defmodule JSONRPC2.Telemetry do @moduledoc """ Telemetry integration. """ def start(event, meta \\ %{}, extra_measurements \\ %{}) do start_time = System.monotonic_time() :telemetry.execute( [:jsonrpc2, event, :start], Map.merge(extra_measurements, %{system_time: System.system_time()}), meta ) start_time end def stop(event, start_time, meta \\ %{}, extra_measurements \\ %{}) do end_time = System.monotonic_time() measurements = Map.merge(extra_measurements, %{duration: end_time - start_time}) :telemetry.execute( [:jsonrpc2, event, :stop], measurements, meta ) end def exception(event, start_time, kind, reason, stack, meta \\ %{}, extra_measurements \\ %{}) do end_time = System.monotonic_time() measurements = Map.merge(extra_measurements, %{duration: end_time - start_time}) meta = meta |> Map.put(:kind, kind) |> Map.put(:reason, reason) |> Map.put(:stacktrace, stack) :telemetry.execute([:jsonrpc2, event, :exception], measurements, meta) end def span(event, start_metadata, fun) do :telemetry.span( [:jsonrpc2, event], start_metadata, fun ) end end