feat lib: easily access the main tracer, logger, etc

This commit is contained in:
Simon Cruanes 2025-12-04 14:41:17 -05:00
parent 5a6bd442b7
commit d02d609cf9
No known key found for this signature in database
GPG key ID: EBFFF6F283F3A2B4
5 changed files with 25 additions and 10 deletions

View file

@ -29,9 +29,9 @@ type t = {
let dummy () : t = let dummy () : t =
let ticker = Cb_set.create () in let ticker = Cb_set.create () in
{ {
emit_spans = Emitter.dummy (); emit_spans = Emitter.dummy;
emit_metrics = Emitter.dummy (); emit_metrics = Emitter.dummy;
emit_logs = Emitter.dummy (); emit_logs = Emitter.dummy;
on_tick = Cb_set.register ticker; on_tick = Cb_set.register ticker;
tick = (fun () -> Cb_set.trigger ticker); tick = (fun () -> Cb_set.trigger ticker);
cleanup = (fun ~on_done () -> on_done ()); cleanup = (fun ~on_done () -> on_done ());

View file

@ -46,12 +46,11 @@ let tap (f : 'a -> unit) (self : 'a t) : 'a t =
in in
{ self with emit } { self with emit }
let dummy () : _ t = let dummy : _ t =
let closed = Atomic.make false in
{ {
enabled = (fun () -> false); enabled = (fun () -> false);
emit = ignore; emit = ignore;
tick = (fun ~now:_ -> ()); tick = (fun ~now:_ -> ());
closed = (fun () -> Atomic.get closed); closed = (fun () -> true);
flush_and_close = (fun () -> Atomic.set closed true); flush_and_close = ignore;
} }

View file

@ -8,12 +8,17 @@ open Opentelemetry_emitter
type t = Log_record.t Emitter.t type t = Log_record.t Emitter.t
let dummy () : t = Emitter.dummy () let dummy : t = Emitter.dummy
let enabled = Emitter.enabled let enabled = Emitter.enabled
let of_exporter (exp : Exporter.t) : t = exp.emit_logs let of_exporter (exp : Exporter.t) : t = exp.emit_logs
let get_main () : t =
match Main_exporter.get () with
| None -> dummy
| Some e -> e.emit_logs
let emit ?attrs:_ (logs : Log_record.t list) : unit = let emit ?attrs:_ (logs : Log_record.t list) : unit =
match Main_exporter.get () with match Main_exporter.get () with
| None -> () | None -> ()

View file

@ -2,7 +2,7 @@ open Opentelemetry_emitter
type t = Metrics.t Emitter.t type t = Metrics.t Emitter.t
let dummy () : t = Emitter.dummy () let dummy : t = Emitter.dummy
let enabled = Emitter.enabled let enabled = Emitter.enabled
@ -16,6 +16,11 @@ let (emit [@deprecated "use an explicit Metrics_emitter.t"]) =
| None -> () | None -> ()
| Some exp -> Exporter.send_metrics exp l | Some exp -> Exporter.send_metrics exp l
let get_main () : t =
match Main_exporter.get () with
| None -> dummy
| Some e -> e.emit_metrics
(** An emitter that uses the current {!Main_exporter} *) (** An emitter that uses the current {!Main_exporter} *)
let dynamic_forward_to_main_exporter : t = let dynamic_forward_to_main_exporter : t =
Main_exporter.Util.dynamic_forward_to_main_exporter () ~get_emitter:(fun e -> Main_exporter.Util.dynamic_forward_to_main_exporter () ~get_emitter:(fun e ->

View file

@ -16,13 +16,19 @@ type t = Span.t Emitter.t
https://opentelemetry.io/docs/specs/otel/trace/api/#tracer *) https://opentelemetry.io/docs/specs/otel/trace/api/#tracer *)
(** Dummy tracer, always disabled *) (** Dummy tracer, always disabled *)
let dummy () : t = Emitter.dummy () let dummy : t = Emitter.dummy
(** A tracer that uses the current {!Main_exporter} *) (** A tracer that uses the current {!Main_exporter} *)
let dynamic_forward_to_main_exporter : t = let dynamic_forward_to_main_exporter : t =
Main_exporter.Util.dynamic_forward_to_main_exporter () ~get_emitter:(fun e -> Main_exporter.Util.dynamic_forward_to_main_exporter () ~get_emitter:(fun e ->
e.emit_spans) e.emit_spans)
(** Get tracer using the main exporter in {!Main_exporter} *)
let get_main () : t =
match Main_exporter.get () with
| None -> dummy
| Some e -> e.emit_spans
let (add_event [@deprecated "use Span.add_event"]) = Span.add_event let (add_event [@deprecated "use Span.add_event"]) = Span.add_event
let (add_attrs [@deprecated "use Span.add_attrs"]) = Span.add_attrs let (add_attrs [@deprecated "use Span.add_attrs"]) = Span.add_attrs