package trace
A stub for tracing/observability, agnostic in how data is collected
Install
Dune Dependency
Authors
Maintainers
Sources
trace-0.5.tbz
sha256=97436f58f181775591f9be745971187e9b6e0948dd6bc32567fa396278113488
sha512=4d47458ec2b014be292498e3e99ca5f7de00e3958dab01cb758254b16c7ce23e1eabd809c5063c5b4f7aeda63ffa38473b008227807a206b018068e63b4526e9
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 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
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 data_empty_build_ () = [] let[@inline] enabled () = match A.get collector with | None -> false | Some _ -> true let with_span_collector_ (module C : Collector.S) ?__FUNCTION__ ~__FILE__ ~__LINE__ ?(data = data_empty_build_) 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 = data_empty_build_) 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[@inline] add_data_to_span sp data : unit = if data <> [] then ( match A.get collector with | None -> () | Some (module C) -> C.add_data_to_span sp data ) let[@inline] add_data_to_manual_span esp data : unit = if data <> [] then ( match A.get collector with | None -> () | Some (module C) -> C.add_data_to_manual_span esp data ) let message_collector_ (module C : Collector.S) ?span ?(data = data_empty_build_) 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 ?(data = data_empty_build_) name n : unit = match A.get collector with | None -> () | Some (module C) -> let data = data () in C.counter_int ~data name n let counter_float ?(data = data_empty_build_) name f : unit = match A.get collector with | None -> () | Some (module C) -> let data = data () in C.counter_float ~data 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)"
>