mirror of
https://github.com/ocaml-tracing/ocaml-opentelemetry.git
synced 2026-03-09 12:23:32 -04:00
feat: tracer, logger, etc are regular emitters now
This commit is contained in:
parent
9dd15d109a
commit
cf39d2a699
6 changed files with 36 additions and 76 deletions
|
|
@ -4,34 +4,14 @@
|
||||||
{{:https://opentelemetry.io/docs/reference/specification/overview/#log-signal}
|
{{:https://opentelemetry.io/docs/reference/specification/overview/#log-signal}
|
||||||
the spec} *)
|
the spec} *)
|
||||||
|
|
||||||
open Common_
|
open Opentelemetry_emitter
|
||||||
|
|
||||||
(** A logger object *)
|
type t = Log_record.t Emitter.t
|
||||||
class type t = object
|
|
||||||
method is_enabled : Log_record.severity -> bool
|
|
||||||
|
|
||||||
method emit : Log_record.t list -> unit
|
let dummy () : t = Emitter.dummy ()
|
||||||
end
|
|
||||||
|
|
||||||
(** Dummy logger, always disabled *)
|
let enabled = Emitter.enabled
|
||||||
let dummy : t =
|
|
||||||
object
|
|
||||||
method is_enabled _ = false
|
|
||||||
|
|
||||||
method emit _ = ()
|
let emit = Emitter.emit
|
||||||
end
|
|
||||||
|
|
||||||
class simple (exp : #Exporter.t) : t =
|
let of_exporter (exp : Exporter.t) : t = exp.emit_logs
|
||||||
object
|
|
||||||
method is_enabled _ = true
|
|
||||||
|
|
||||||
method emit logs = if logs <> [] then exp#send_logs logs
|
|
||||||
end
|
|
||||||
|
|
||||||
let emit ?service_name:_ ?attrs:_ (l : Log_record.t list) : unit =
|
|
||||||
match Exporter.Main_exporter.get () with
|
|
||||||
| None -> ()
|
|
||||||
| Some e -> e#send_logs l
|
|
||||||
[@@deprecated "use an explicit Logger"]
|
|
||||||
|
|
||||||
let k_logger : t Context.key = Context.new_key ()
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ let create () : t = { cbs = Alist.make () }
|
||||||
|
|
||||||
let[@inline] add_metrics_cb (self : t) f = Alist.add self.cbs f
|
let[@inline] add_metrics_cb (self : t) f = Alist.add self.cbs f
|
||||||
|
|
||||||
let add_to_exporter (exp : #Exporter.t) (self : t) =
|
let add_to_exporter (exp : Exporter.t) (self : t) =
|
||||||
let on_tick () =
|
let on_tick () =
|
||||||
(* collect all metrics *)
|
(* collect all metrics *)
|
||||||
let res = ref [] in
|
let res = ref [] in
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ val add_metrics_cb : t -> (unit -> Metrics.t list) -> unit
|
||||||
metrics. It might be called regularly by the backend, in particular (but not
|
metrics. It might be called regularly by the backend, in particular (but not
|
||||||
only) when {!Exporter.tick} is called. *)
|
only) when {!Exporter.tick} is called. *)
|
||||||
|
|
||||||
val add_to_exporter : #Exporter.t -> t -> unit
|
val add_to_exporter : Exporter.t -> t -> unit
|
||||||
(** Make sure we export metrics at every [tick] of the exporter *)
|
(** Make sure we export metrics at every [tick] of the exporter *)
|
||||||
|
|
||||||
module Main_set : sig
|
module Main_set : sig
|
||||||
|
|
|
||||||
|
|
@ -1,32 +1,19 @@
|
||||||
open Common_
|
open Opentelemetry_emitter
|
||||||
|
|
||||||
class type t = object
|
type t = Metrics.t Emitter.t
|
||||||
method is_enabled : unit -> bool
|
|
||||||
|
|
||||||
method emit : Metrics.t list -> unit
|
let dummy () : t = Emitter.dummy ()
|
||||||
end
|
|
||||||
|
|
||||||
class dummy : t =
|
let enabled = Emitter.enabled
|
||||||
object
|
|
||||||
method is_enabled () = false
|
|
||||||
|
|
||||||
method emit _ = ()
|
let emit = Emitter.emit
|
||||||
end
|
|
||||||
|
|
||||||
class simple (exp : #Exporter.t) : t =
|
let of_exporter (exp : Exporter.t) : t = exp.emit_metrics
|
||||||
object
|
|
||||||
method is_enabled () = true
|
|
||||||
|
|
||||||
method emit l = if l <> [] then exp#send_metrics l
|
|
||||||
end
|
|
||||||
|
|
||||||
(** Emit some metrics to the collector (sync). This blocks until the backend has
|
(** Emit some metrics to the collector (sync). This blocks until the backend has
|
||||||
pushed the metrics into some internal queue, or discarded them.
|
pushed the metrics into some internal queue, or discarded them. *)
|
||||||
|
|
||||||
{b NOTE} be careful not to call this inside a Gc alarm, as it can cause
|
|
||||||
deadlocks. *)
|
|
||||||
let emit ?attrs:_ (l : Metrics.t list) : unit =
|
let emit ?attrs:_ (l : Metrics.t list) : unit =
|
||||||
match Exporter.Main_exporter.get () with
|
match Exporter.Main_exporter.get () with
|
||||||
| None -> ()
|
| None -> ()
|
||||||
| Some exp -> exp#send_metrics l
|
| Some exp -> Exporter.send_metrics exp l
|
||||||
[@@deprecated "use an explicit Metrics_emitter.t"]
|
[@@deprecated "use an explicit Metrics_emitter.t"]
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,7 @@ module Logs = Logger [@@deprecated "use Logger"]
|
||||||
|
|
||||||
(** {2 Utils} *)
|
(** {2 Utils} *)
|
||||||
|
|
||||||
|
module Any_signal = Any_signal
|
||||||
module Trace_context = Trace_context
|
module Trace_context = Trace_context
|
||||||
module Gc_metrics = Gc_metrics
|
module Gc_metrics = Gc_metrics
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,44 +6,36 @@
|
||||||
|
|
||||||
open Common_
|
open Common_
|
||||||
open Proto.Trace
|
open Proto.Trace
|
||||||
|
open Opentelemetry_emitter
|
||||||
|
|
||||||
type span = Span.t
|
type span = Span.t
|
||||||
|
|
||||||
|
type t = Span.t Emitter.t
|
||||||
(** A tracer.
|
(** A tracer.
|
||||||
|
|
||||||
https://opentelemetry.io/docs/specs/otel/trace/api/#tracer *)
|
https://opentelemetry.io/docs/specs/otel/trace/api/#tracer *)
|
||||||
class type t = object
|
|
||||||
method is_enabled : unit -> bool
|
|
||||||
|
|
||||||
method emit : span list -> unit
|
|
||||||
end
|
|
||||||
|
|
||||||
(** Dummy tracer, always disabled *)
|
(** Dummy tracer, always disabled *)
|
||||||
let dummy : t =
|
let dummy () : t = Emitter.dummy ()
|
||||||
object
|
|
||||||
method is_enabled () = false
|
|
||||||
|
|
||||||
method emit _ = ()
|
|
||||||
end
|
|
||||||
|
|
||||||
(** A simple exporter that directly calls the exporter. *)
|
|
||||||
class simple (exp : #Exporter.t) : t =
|
|
||||||
object
|
|
||||||
method is_enabled () = true
|
|
||||||
|
|
||||||
method emit spans = if spans <> [] then Exporter.send_trace exp spans
|
|
||||||
end
|
|
||||||
|
|
||||||
(** A tracer that uses {!Exporter.Main_exporter} *)
|
(** A tracer that uses {!Exporter.Main_exporter} *)
|
||||||
let simple_main_exporter : t =
|
let simple_main_exporter : t =
|
||||||
object
|
let enabled () = Exporter.Main_exporter.present () in
|
||||||
method is_enabled () = Exporter.Main_exporter.present ()
|
let closed () = not (enabled ()) in
|
||||||
|
let flush_and_close () = () in
|
||||||
method emit spans =
|
let tick ~now:_ =
|
||||||
|
match Exporter.Main_exporter.get () with
|
||||||
|
| None -> ()
|
||||||
|
| Some exp -> Exporter.tick exp
|
||||||
|
in
|
||||||
|
let emit spans =
|
||||||
|
if spans <> [] then (
|
||||||
match Exporter.Main_exporter.get () with
|
match Exporter.Main_exporter.get () with
|
||||||
| None -> ()
|
| None -> ()
|
||||||
| Some exp -> exp#send_trace spans
|
| Some exp -> Exporter.send_trace exp spans
|
||||||
end
|
)
|
||||||
|
in
|
||||||
|
{ Emitter.enabled; closed; emit; tick; flush_and_close }
|
||||||
|
|
||||||
(** Directly emit to the main exporter.
|
(** Directly emit to the main exporter.
|
||||||
|
|
||||||
|
|
@ -53,7 +45,7 @@ let (emit [@deprecated "use an explicit tracer"]) =
|
||||||
fun ?service_name:_ ?attrs:_ (spans : span list) : unit ->
|
fun ?service_name:_ ?attrs:_ (spans : span list) : unit ->
|
||||||
match Exporter.Main_exporter.get () with
|
match Exporter.Main_exporter.get () with
|
||||||
| None -> ()
|
| None -> ()
|
||||||
| Some exp -> exp#send_trace spans
|
| Some exp -> Exporter.send_trace exp spans
|
||||||
|
|
||||||
let (add_event [@deprecated "use Span.add_event"]) = Span.add_event
|
let (add_event [@deprecated "use Span.add_event"]) = Span.add_event
|
||||||
|
|
||||||
|
|
@ -107,7 +99,7 @@ let with_thunk_and_finally ?(tracer = simple_main_exporter)
|
||||||
in
|
in
|
||||||
Span.set_status span status));
|
Span.set_status span status));
|
||||||
|
|
||||||
tracer#emit [ span ]
|
Emitter.emit tracer [ span ]
|
||||||
in
|
in
|
||||||
let thunk () = Ambient_span.with_ambient span (fun () -> cb span) in
|
let thunk () = Ambient_span.with_ambient span (fun () -> cb span) in
|
||||||
thunk, finally
|
thunk, finally
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue