Source file dynamic_enricher.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
(** Hooks to add attributes to every span or log *)
type t = unit -> Key_value.t list
(** A dynamic enricher is a callback that produces high-cardinality attributes
at span/log-record creation time. This enables "wide events". *)
open struct
let enrichers_ : t Alist.t = Alist.make ()
end
let add (f : t) : unit = Alist.add enrichers_ f
let collect () : Key_value.t list =
let acc = ref [] in
List.iter
(fun f ->
match f () with
| kvs -> acc := List.rev_append kvs !acc
| exception exn ->
let bt = Printexc.get_raw_backtrace () in
Self_debug.log Warning (fun () ->
Printf.sprintf "dynamic_enricher raised %s\n%s"
(Printexc.to_string exn)
(Printexc.raw_backtrace_to_string bt)))
(Alist.get enrichers_);
!acc