diff --git a/src/core/exporter.ml b/src/core/exporter.ml index 8bd96b7f..621ea5b9 100644 --- a/src/core/exporter.ml +++ b/src/core/exporter.ml @@ -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 ()); diff --git a/src/emitter/emitter.ml b/src/emitter/emitter.ml index d3aa0e5e..fb2f9285 100644 --- a/src/emitter/emitter.ml +++ b/src/emitter/emitter.ml @@ -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; } diff --git a/src/lib/logger.ml b/src/lib/logger.ml index 9c2681fd..88d70ce0 100644 --- a/src/lib/logger.ml +++ b/src/lib/logger.ml @@ -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 -> () diff --git a/src/lib/metrics_emitter.ml b/src/lib/metrics_emitter.ml index 9c9c530b..f26fc224 100644 --- a/src/lib/metrics_emitter.ml +++ b/src/lib/metrics_emitter.ml @@ -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 -> diff --git a/src/lib/tracer.ml b/src/lib/tracer.ml index 4e507943..1abfaade 100644 --- a/src/lib/tracer.ml +++ b/src/lib/tracer.ml @@ -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