# singleton

Python API: `luxonis_ml.telemetry.singleton`

## Classes

### TelemetryKey

#### Attributes

##### library_name

##### source_component

## Functions

### get_or_init

```python
def get_or_init(library_name: str, *, source_component: str | None = None, library_version: str | None = None, config: TelemetryConfig | None = None, context_providers: list[ContextProvider] | None = None, system_context_providers: list[SystemContextProvider] | None = None, register_exit_handler: bool = True) -> Telemetry:
```

Return an existing telemetry instance or initialize one.

Parameters

 * `library_name` (`str`): Name of the library emitting telemetry.
 * `source_component` (`str | None`): Optional emitter/component name for the singleton instance. If omitted, the library name is
   reused.
 * `library_version` (`str | None`): Version string for the library.
 * `config` (`TelemetryConfig | None`): Optional telemetry configuration.
 * `context_providers` (`list[ContextProvider] | None`): Callables that return extra context to attach to every event.
 * `system_context_providers` (`list[SystemContextProvider] | None`): Callables that return extra context to attach only when
   system metadata is requested.
 * `register_exit_handler` (`bool`): Whether to flush telemetry on process exit.

Returns

 * `Telemetry`: The existing or newly initialized telemetry instance for the `(library_name, source_component)` key.

### get_telemetry

```python
def get_telemetry(library_name: str | None = None, *, source_component: str | None = None) -> Telemetry | None:
```

Return a telemetry instance by singleton identity.

Parameters

 * `library_name` (`str | None`): Optional library/product name to filter by.
 * `source_component` (`str | None`): Optional emitter/component name to filter by.

Returns

 * `Telemetry | None`: The matching telemetry instance when the lookup resolves to one instance. Ambiguous lookups return `None`.

### initialize_telemetry

```python
def initialize_telemetry(*, library_name: str, source_component: str | None = None, library_version: str | None = None, config: TelemetryConfig | None = None, context_providers: list[ContextProvider] | None = None, system_context_providers: list[SystemContextProvider] | None = None, register_exit_handler: bool = True) -> Telemetry:
```

Initialize and return a telemetry instance for one emitter.

Parameters

 * `library_name` (`str`): Name of the library emitting telemetry.
 * `source_component` (`str | None`): Optional emitter/component name. If omitted, the library name is reused.
 * `library_version` (`str | None`): Optional version string for the library.
 * `config` (`TelemetryConfig | None`): Optional telemetry configuration.
 * `context_providers` (`list[ContextProvider] | None`): Optional list of context provider callables.
 * `system_context_providers` (`list[SystemContextProvider] | None`): Optional list of system context provider callables.
 * `register_exit_handler` (`bool`): Whether to flush telemetry on process exit.

Returns

 * `Telemetry`: The initialized telemetry instance for the exact `(library_name, source_component)` key.

### shutdown_on_exit

```python
def shutdown_on_exit():
```

Register an exit handler to flush telemetry on shutdown.
