Packages
This is implementation of transport agnostic JSONRPC 2.0 protocol. There is no transport level. It consists only of specification entities
Current section
Files
Jump to
Current section
Files
lib/jsonrpc2/telemetry.ex
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