beam-telemetry / telemetry

Dynamic dispatching library for metrics and instrumentations.
https://hexdocs.pm/telemetry
Apache License 2.0
872 stars 66 forks source link

Introduce start_span, stop_span #132

Open rlipscombe opened 6 months ago

rlipscombe commented 6 months ago

I want to report a span that, er, spans over an asynchronous call to a gen_statem, using gen_statem:send_request() and gen_statem:check_response().

It would be useful if there were telemetry:start_span() and telemetry:stop_span() functions for this use case.

An example without gen_statem might make this clearer:

Span = telemetry:start_span([worker, processing], StartMetadata),
Parent = self(),
{MRef, Pid} = spawn_monitor(fun() -> Result = do_some_work(), Parent ! {reply, Result} end),
receive
    {reply, Result} ->
        telemetry:stop_span([worker, processing], Span);
    {'DOWN', Ref, process, Pid, Error} when Error /= normal ->
        telemetry:error_span([worker, processing], Span)
end.

...something like that, anyway.

Maybe the EventPrefix ought to be stashed in the span, to avoid repetition.