defmodule Nebulex.Telemetry do
@moduledoc """
Telemetry wrapper.
"""
# Inline common instructions
@compile {:inline, execute: 3, span: 3, attach_many: 4, detach: 1}
if Code.ensure_loaded?(:telemetry) do
defdelegate execute(event, measurements, metadata), to: :telemetry
defdelegate span(event_prefix, start_meta, span_fn), to: :telemetry
defdelegate attach_many(handler_id, events, fun, config), to: :telemetry
defdelegate detach(handler_id), to: :telemetry
else
@doc false
def execute(_event, _measurements, _metadata), do: :ok
@doc false
def span(_event_prefix, _start_meta, span_fn), do: elem(span_fn.(), 0)
@doc false
def attach_many(_handler_id, _events, _fun, _config), do: :ok
@doc false
def detach(_handler_id), do: :ok
end
end