mirror of
https://github.com/ocaml-tracing/ocaml-trace.git
synced 2026-05-06 09:25:28 -04:00
trace.lwt: do not provide a ambient-span-provider except in docs; add docs
it's too backend-specific, it would clash eg with the opentelemetry ambient span provider. Better let the user know this.
This commit is contained in:
parent
42bf837113
commit
5629555a72
1 changed files with 30 additions and 10 deletions
|
|
@ -1,21 +1,41 @@
|
|||
(** Optional interface with lwt.
|
||||
|
||||
This provides a Lwt-friendly variant of {!Trace_core.with_span}.
|
||||
|
||||
To track the ambient span, which can be useful for some backends or for
|
||||
async spans, you can use [Ambient_context_lwt], a collector-specific ambient
|
||||
span provider (eg [Opentelemetry_trace] comes with one), or define your own
|
||||
like this:
|
||||
|
||||
{[
|
||||
(* new key to track the current span in lwt context *)
|
||||
let k_ambient_span : span Lwt.key = Lwt.new_key ()
|
||||
|
||||
(* ambient span provider, install it using Trace_core.set_ambient_context_provider] *)
|
||||
let ambient_span_provider : Trace_core.Ambient_span_provider.t =
|
||||
ASP_some
|
||||
( (),
|
||||
{
|
||||
get_current_span = (fun () -> Lwt.get k_ambient_span);
|
||||
with_current_span_set_to =
|
||||
(fun () span f ->
|
||||
Lwt.with_value k_ambient_span (Some span) (fun () -> f span));
|
||||
} )
|
||||
]}
|
||||
|
||||
@since NEXT_RELEASE *)
|
||||
|
||||
open Trace_core
|
||||
|
||||
let k_ambient_span : span Lwt.key = Lwt.new_key ()
|
||||
(** [with_span name f] enters a span [sp], calls [f sp] which returns a Lwt
|
||||
promise, and make sure to exit the span [sp] when [f sp] exits (or fails).
|
||||
|
||||
let ambient_span_provider : Trace_core.Ambient_span_provider.t =
|
||||
ASP_some
|
||||
( (),
|
||||
{
|
||||
get_current_span = (fun () -> Lwt.get k_ambient_span);
|
||||
with_current_span_set_to =
|
||||
(fun () span f ->
|
||||
Lwt.with_value k_ambient_span (Some span) (fun () -> f span));
|
||||
} )
|
||||
This is similar to {!Trace_core.with_span} but it respects the promise
|
||||
semnatics of Lwt (ie. it doesn't exit the span immediately instead of
|
||||
waiting for the promise to end).
|
||||
|
||||
To track the current span you still need to install a Lwt-friendly
|
||||
{!Trace_core.Ambient_span_provider.t} (probably using {!Lwt.with_value}). *)
|
||||
let with_span ?level ?__FUNCTION__ ~__FILE__ ~__LINE__ ?parent ?params ?data
|
||||
name (f : span -> 'a Lwt.t) : 'a Lwt.t =
|
||||
if Trace_core.enabled () then (
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue