defmodule SpandexTesla.Telemetry do @moduledoc """ Defines the `:telemetry` handlers to attach tracing to Tesla Telemetry. """ @doc """ Automatic installer. Call it from application.ex to trace all events generated by Tesla. """ def attach do if new_telemetry_events_supported?() do tesla_events = [ [:tesla, :request, :start], [:tesla, :request, :stop], [:tesla, :request, :exception] ] :telemetry.attach_many(__MODULE__, tesla_events, &SpandexTesla.handle_event/4, nil) else :telemetry.attach(__MODULE__, [:tesla, :request], &SpandexTesla.handle_event/4, nil) end end defp new_telemetry_events_supported? do case :application.get_key(:tesla, :vsn) do {:ok, version} -> version |> List.to_string() |> Version.match?(">= 1.3.3") _ -> false end end end