mirror of
https://github.com/ocaml-tracing/ocaml-opentelemetry.git
synced 2026-03-08 03:47:59 -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}
|
||||
the spec} *)
|
||||
|
||||
open Common_
|
||||
open Opentelemetry_emitter
|
||||
|
||||
(** A logger object *)
|
||||
class type t = object
|
||||
method is_enabled : Log_record.severity -> bool
|
||||
type t = Log_record.t Emitter.t
|
||||
|
||||
method emit : Log_record.t list -> unit
|
||||
end
|
||||
let dummy () : t = Emitter.dummy ()
|
||||
|
||||
(** Dummy logger, always disabled *)
|
||||
let dummy : t =
|
||||
object
|
||||
method is_enabled _ = false
|
||||
let enabled = Emitter.enabled
|
||||
|
||||
method emit _ = ()
|
||||
end
|
||||
let emit = Emitter.emit
|
||||
|
||||
class simple (exp : #Exporter.t) : t =
|
||||
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 ()
|
||||
let of_exporter (exp : Exporter.t) : t = exp.emit_logs
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ let create () : t = { cbs = Alist.make () }
|
|||
|
||||
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 () =
|
||||
(* collect all metrics *)
|
||||
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
|
||||
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 *)
|
||||
|
||||
module Main_set : sig
|
||||
|
|
|
|||
|
|
@ -1,32 +1,19 @@
|
|||
open Common_
|
||||
open Opentelemetry_emitter
|
||||
|
||||
class type t = object
|
||||
method is_enabled : unit -> bool
|
||||
type t = Metrics.t Emitter.t
|
||||
|
||||
method emit : Metrics.t list -> unit
|
||||
end
|
||||
let dummy () : t = Emitter.dummy ()
|
||||
|
||||
class dummy : t =
|
||||
object
|
||||
method is_enabled () = false
|
||||
let enabled = Emitter.enabled
|
||||
|
||||
method emit _ = ()
|
||||
end
|
||||
let emit = Emitter.emit
|
||||
|
||||
class simple (exp : #Exporter.t) : t =
|
||||
object
|
||||
method is_enabled () = true
|
||||
|
||||
method emit l = if l <> [] then exp#send_metrics l
|
||||
end
|
||||
let of_exporter (exp : Exporter.t) : t = exp.emit_metrics
|
||||
|
||||
(** Emit some metrics to the collector (sync). This blocks until the backend has
|
||||
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. *)
|
||||
pushed the metrics into some internal queue, or discarded them. *)
|
||||
let emit ?attrs:_ (l : Metrics.t list) : unit =
|
||||
match Exporter.Main_exporter.get () with
|
||||
| None -> ()
|
||||
| Some exp -> exp#send_metrics l
|
||||
| Some exp -> Exporter.send_metrics exp l
|
||||
[@@deprecated "use an explicit Metrics_emitter.t"]
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@ module Logs = Logger [@@deprecated "use Logger"]
|
|||
|
||||
(** {2 Utils} *)
|
||||
|
||||
module Any_signal = Any_signal
|
||||
module Trace_context = Trace_context
|
||||
module Gc_metrics = Gc_metrics
|
||||
|
||||
|
|
|
|||
|
|
@ -6,44 +6,36 @@
|
|||
|
||||
open Common_
|
||||
open Proto.Trace
|
||||
open Opentelemetry_emitter
|
||||
|
||||
type span = Span.t
|
||||
|
||||
type t = Span.t Emitter.t
|
||||
(** A 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 *)
|
||||
let dummy : t =
|
||||
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
|
||||
let dummy () : t = Emitter.dummy ()
|
||||
|
||||
(** A tracer that uses {!Exporter.Main_exporter} *)
|
||||
let simple_main_exporter : t =
|
||||
object
|
||||
method is_enabled () = Exporter.Main_exporter.present ()
|
||||
|
||||
method emit spans =
|
||||
let enabled () = Exporter.Main_exporter.present () in
|
||||
let closed () = not (enabled ()) in
|
||||
let flush_and_close () = () in
|
||||
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
|
||||
| None -> ()
|
||||
| Some exp -> exp#send_trace spans
|
||||
end
|
||||
| Some exp -> Exporter.send_trace exp spans
|
||||
)
|
||||
in
|
||||
{ Emitter.enabled; closed; emit; tick; flush_and_close }
|
||||
|
||||
(** 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 ->
|
||||
match Exporter.Main_exporter.get () with
|
||||
| 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
|
||||
|
||||
|
|
@ -107,7 +99,7 @@ let with_thunk_and_finally ?(tracer = simple_main_exporter)
|
|||
in
|
||||
Span.set_status span status));
|
||||
|
||||
tracer#emit [ span ]
|
||||
Emitter.emit tracer [ span ]
|
||||
in
|
||||
let thunk () = Ambient_span.with_ambient span (fun () -> cb span) in
|
||||
thunk, finally
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue