Source file tracer.ml

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 () }