1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
(** Traces.
The tracer is an object that can be used to emit spans that form a trace.
See
{{:https://opentelemetry.io/docs/reference/specification/overview/#tracing-signal}
the spec} *)
open Opentelemetry_emitter
type span = Span.t
type t = {
emit: Span.t Emitter.t;
clock: Clock.t;
}
(** A tracer.
https://opentelemetry.io/docs/specs/otel/trace/api/#tracer *)
(** Dummy tracer, always disabled *)
let dummy : t = { emit = Emitter.dummy; clock = Clock.ptime_clock }
let[@inline] enabled (self : t) = Emitter.enabled self.emit
let of_exporter (exp : Exporter.t) : t =
let emit =
Emitter.make ~signal_name:"spans"
~emit:(fun spans -> exp.Exporter.export (Any_signal_l.Spans spans))
()
in
{ emit; clock = Clock.Main.get () }