Lightweight telemetry helpers with optional TelemetryReporter integration.
This module is intentionally thin: it emits :telemetry events and provides
convenience wrappers for timing code. If the optional telemetry_reporter
dependency is available, it can also start a reporter and attach handlers
that forward events.
Summary
Functions
Attach TelemetryReporter handlers for forwarding :telemetry events.
Detach a TelemetryReporter handler.
Emit a telemetry event.
Log a telemetry event via TelemetryReporter if available.
Measure execution time and emit :stop or :exception events.
Start a TelemetryReporter instance if the dependency is available.
Types
@type event_name() :: [atom()]
@type measurements() :: map()
@type metadata() :: map()
@type reporter() :: GenServer.server()
Functions
Attach TelemetryReporter handlers for forwarding :telemetry events.
Returns the handler id.
@spec detach_reporter(term()) :: :ok | {:error, :not_found} | {:error, :missing_dependency}
Detach a TelemetryReporter handler.
@spec execute(event_name(), measurements(), metadata()) :: :ok
Emit a telemetry event.
@spec log(reporter(), String.t() | [atom()], map(), atom()) :: :ok | {:error, :overloaded} | {:error, :not_running} | {:error, :missing_dependency}
Log a telemetry event via TelemetryReporter if available.
@spec measure(event_name(), metadata(), (-> result), keyword()) :: result when result: term()
Measure execution time and emit :stop or :exception events.
Options:
:time_unit- unit for duration (default::microsecond)
@spec start_reporter(keyword()) :: GenServer.on_start() | {:error, :missing_dependency}
Start a TelemetryReporter instance if the dependency is available.