Current section
Files
Jump to
Current section
Files
src/gloo@telemetry.erl
-module(gloo@telemetry).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gloo/telemetry.gleam").
-export([disabled/0, with_handler/1, emit/2]).
-export_type([event/0, telemetry/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(
" Event hooks for observability. Attach a handler with `telemetry.with_handler`\n"
" and pass the resulting `Telemetry` value to `repo.with_telemetry`.\n"
"\n"
" Events: `QueryStart`, `QueryEnd`, `QueryError`, `TransactionStart`,\n"
" `TransactionCommit`, `TransactionRollback`.\n"
).
-type event() :: {query_start, binary(), integer()} |
{query_end, binary(), integer(), integer()} |
{query_error, binary(), binary()} |
transaction_start |
transaction_commit |
transaction_rollback.
-type telemetry() :: {telemetry, gleam@option:option(fun((event()) -> nil))}.
-file("src/gloo/telemetry.gleam", 25).
-spec disabled() -> telemetry().
disabled() ->
{telemetry, none}.
-file("src/gloo/telemetry.gleam", 29).
-spec with_handler(fun((event()) -> nil)) -> telemetry().
with_handler(Handler) ->
{telemetry, {some, Handler}}.
-file("src/gloo/telemetry.gleam", 33).
-spec emit(telemetry(), event()) -> nil.
emit(Telemetry, Event) ->
case erlang:element(2, Telemetry) of
none ->
nil;
{some, H} ->
H(Event)
end.