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 ticker = Cb_set.create () in
{
emit_spans = Emitter.dummy ();
emit_metrics = Emitter.dummy ();
emit_logs = Emitter.dummy ();
emit_spans = Emitter.dummy;
emit_metrics = Emitter.dummy;
emit_logs = Emitter.dummy;
on_tick = Cb_set.register ticker;
tick = (fun () -> Cb_set.trigger ticker);
cleanup = (fun ~on_done () -> on_done ());

View file

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

View file

@ -8,12 +8,17 @@ open Opentelemetry_emitter
type t = Log_record.t Emitter.t
let dummy () : t = Emitter.dummy ()
let dummy : t = Emitter.dummy
let enabled = Emitter.enabled
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 =
match Main_exporter.get () with
| None -> ()

View file

@ -2,7 +2,7 @@ open Opentelemetry_emitter
type t = Metrics.t Emitter.t
let dummy () : t = Emitter.dummy ()
let dummy : t = Emitter.dummy
let enabled = Emitter.enabled
@ -16,6 +16,11 @@ let (emit [@deprecated "use an explicit Metrics_emitter.t"]) =
| None -> ()
| 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} *)
let dynamic_forward_to_main_exporter : t =
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 *)
(** Dummy tracer, always disabled *)
let dummy () : t = Emitter.dummy ()
let dummy : t = Emitter.dummy
(** A tracer that uses the current {!Main_exporter} *)
let dynamic_forward_to_main_exporter : t =
Main_exporter.Util.dynamic_forward_to_main_exporter () ~get_emitter:(fun e ->
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_attrs [@deprecated "use Span.add_attrs"]) = Span.add_attrs