package trace
A stub for tracing/observability, agnostic in how data is collected
Install
Dune Dependency
Authors
Maintainers
Sources
trace-0.3.tbz
sha256=2ababaa983bbb4a264b5346316b76638d3c77e3addf3522086c6fd9e61bd6505
sha512=63900b36513e67827744d9f656f2d2d3a707b0cea2ed67b571ddd30cedcaec2bf2e1791813add50ccaf846ee90f1195d9f86d3bddbefb2c30cefe2c81b57ed61
doc/src/trace.core/trace_core.ml.html
Source file trace_core.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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
include Types module A = Atomic_ module Collector = Collector module Meta_map = Meta_map type collector = (module Collector.S) (** Global collector. *) let collector : collector option A.t = A.make None let[@inline] enabled () = match A.get collector with | None -> false | Some _ -> true let with_span_collector_ (module C : Collector.S) ?__FUNCTION__ ~__FILE__ ~__LINE__ ?(data = fun () -> []) name f = let data = data () in C.with_span ~__FUNCTION__ ~__FILE__ ~__LINE__ ~data name f let[@inline] with_span ?__FUNCTION__ ~__FILE__ ~__LINE__ ?data name f = match A.get collector with | None -> (* fast path: no collector, no span *) f Collector.dummy_span | Some collector -> with_span_collector_ collector ?__FUNCTION__ ~__FILE__ ~__LINE__ ?data name f let enter_explicit_span_collector_ (module C : Collector.S) ~parent ~flavor ?__FUNCTION__ ~__FILE__ ~__LINE__ ?(data = fun () -> []) name : explicit_span = let data = data () in C.enter_manual_span ~parent ~flavor ~__FUNCTION__ ~__FILE__ ~__LINE__ ~data name let[@inline] enter_manual_sub_span ~parent ?flavor ?__FUNCTION__ ~__FILE__ ~__LINE__ ?data name : explicit_span = match A.get collector with | None -> Collector.dummy_explicit_span | Some coll -> enter_explicit_span_collector_ coll ~parent:(Some parent) ~flavor ?__FUNCTION__ ~__FILE__ ~__LINE__ ?data name let[@inline] enter_manual_toplevel_span ?flavor ?__FUNCTION__ ~__FILE__ ~__LINE__ ?data name : explicit_span = match A.get collector with | None -> Collector.dummy_explicit_span | Some coll -> enter_explicit_span_collector_ coll ~parent:None ~flavor ?__FUNCTION__ ~__FILE__ ~__LINE__ ?data name let[@inline] exit_manual_span espan : unit = match A.get collector with | None -> () | Some (module C) -> C.exit_manual_span espan let message_collector_ (module C : Collector.S) ?span ?(data = fun () -> []) msg : unit = let data = data () in C.message ?span ~data msg let[@inline] message ?span ?data msg : unit = match A.get collector with | None -> () | Some coll -> message_collector_ coll ?span ?data msg let messagef ?span ?data k = match A.get collector with | None -> () | Some (module C) -> k (fun fmt -> Format.kasprintf (fun str -> let data = match data with | None -> [] | Some f -> f () in C.message ?span ~data str) fmt) let counter_int name n : unit = match A.get collector with | None -> () | Some (module C) -> C.counter_int name n let counter_float name f : unit = match A.get collector with | None -> () | Some (module C) -> C.counter_float name f let set_thread_name name : unit = match A.get collector with | None -> () | Some (module C) -> C.name_thread name let set_process_name name : unit = match A.get collector with | None -> () | Some (module C) -> C.name_process name let setup_collector c : unit = while let cur = A.get collector in match cur with | Some _ -> invalid_arg "trace: collector already present" | None -> not (A.compare_and_set collector cur (Some c)) do () done let shutdown () = match A.exchange collector None with | None -> () | Some (module C) -> C.shutdown () module Internal_ = struct module Atomic_ = Atomic_ end
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>