mirror of
https://github.com/ocaml-tracing/ocaml-trace.git
synced 2026-03-08 03:47:57 -04:00
functions to enter/exit implicit spans
This commit is contained in:
parent
a0874f2c31
commit
ef15941936
4 changed files with 53 additions and 0 deletions
|
|
@ -31,6 +31,23 @@ module type S = sig
|
||||||
to be efficient to implement in async contexts.
|
to be efficient to implement in async contexts.
|
||||||
@since 0.3 *)
|
@since 0.3 *)
|
||||||
|
|
||||||
|
val enter_span :
|
||||||
|
__FUNCTION__:string option ->
|
||||||
|
__FILE__:string ->
|
||||||
|
__LINE__:int ->
|
||||||
|
data:(string * user_data) list ->
|
||||||
|
string ->
|
||||||
|
span
|
||||||
|
(** Enter a new implicit span. For many uses cases, {!with_span} will
|
||||||
|
be easier to use.
|
||||||
|
@since NEXT_RELEASE *)
|
||||||
|
|
||||||
|
val exit_span : span -> unit
|
||||||
|
(** Exit span. This should be called on the same thread
|
||||||
|
as the corresponding {!enter_span}, and nest properly with
|
||||||
|
other calls to enter/exit_span and {!with_span}.
|
||||||
|
@since NEXT_RELEASE *)
|
||||||
|
|
||||||
val enter_manual_span :
|
val enter_manual_span :
|
||||||
parent:explicit_span option ->
|
parent:explicit_span option ->
|
||||||
flavor:[ `Sync | `Async ] option ->
|
flavor:[ `Sync | `Async ] option ->
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,19 @@ let[@inline] with_span ?__FUNCTION__ ~__FILE__ ~__LINE__ ?data name f =
|
||||||
with_span_collector_ collector ?__FUNCTION__ ~__FILE__ ~__LINE__ ?data name
|
with_span_collector_ collector ?__FUNCTION__ ~__FILE__ ~__LINE__ ?data name
|
||||||
f
|
f
|
||||||
|
|
||||||
|
let[@inline] enter_span ?__FUNCTION__ ~__FILE__ ~__LINE__
|
||||||
|
?(data = data_empty_build_) name : span =
|
||||||
|
match A.get collector with
|
||||||
|
| None -> Collector.dummy_span
|
||||||
|
| Some (module C) ->
|
||||||
|
let data = data () in
|
||||||
|
C.enter_span ~__FUNCTION__ ~__FILE__ ~__LINE__ ~data name
|
||||||
|
|
||||||
|
let[@inline] exit_span sp : unit =
|
||||||
|
match A.get collector with
|
||||||
|
| None -> ()
|
||||||
|
| Some (module C) -> C.exit_span sp
|
||||||
|
|
||||||
let enter_explicit_span_collector_ (module C : Collector.S) ~parent ~flavor
|
let enter_explicit_span_collector_ (module C : Collector.S) ~parent ~flavor
|
||||||
?__FUNCTION__ ~__FILE__ ~__LINE__ ?(data = data_empty_build_) name :
|
?__FUNCTION__ ~__FILE__ ~__LINE__ ?(data = data_empty_build_) name :
|
||||||
explicit_span =
|
explicit_span =
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,16 @@ val with_span :
|
||||||
see {!enter_manual_span}.
|
see {!enter_manual_span}.
|
||||||
*)
|
*)
|
||||||
|
|
||||||
|
val enter_span :
|
||||||
|
?__FUNCTION__:string ->
|
||||||
|
__FILE__:string ->
|
||||||
|
__LINE__:int ->
|
||||||
|
?data:(unit -> (string * user_data) list) ->
|
||||||
|
string ->
|
||||||
|
span
|
||||||
|
|
||||||
|
val exit_span : span -> unit
|
||||||
|
|
||||||
val add_data_to_span : span -> (string * user_data) list -> unit
|
val add_data_to_span : span -> (string * user_data) list -> unit
|
||||||
(** Add structured data to the given active span (see {!with_span}).
|
(** Add structured data to the given active span (see {!with_span}).
|
||||||
Behavior is not specified if the span has been exited.
|
Behavior is not specified if the span has been exited.
|
||||||
|
|
|
||||||
|
|
@ -386,6 +386,19 @@ let collector ~out () : collector =
|
||||||
else
|
else
|
||||||
Thread.id (Thread.self ())
|
Thread.id (Thread.self ())
|
||||||
|
|
||||||
|
let enter_span ~__FUNCTION__:fun_name ~__FILE__:_ ~__LINE__:_ ~data name :
|
||||||
|
span =
|
||||||
|
let span = Int64.of_int (A.fetch_and_add span_id_gen_ 1) in
|
||||||
|
let tid = get_tid_ () in
|
||||||
|
let time_us = now_us () in
|
||||||
|
B_queue.push events
|
||||||
|
(E_define_span { tid; name; time_us; id = span; fun_name; data });
|
||||||
|
span
|
||||||
|
|
||||||
|
let exit_span span : unit =
|
||||||
|
let time_us = now_us () in
|
||||||
|
B_queue.push events (E_exit_span { id = span; time_us })
|
||||||
|
|
||||||
let with_span ~__FUNCTION__:fun_name ~__FILE__:_ ~__LINE__:_ ~data name f =
|
let with_span ~__FUNCTION__:fun_name ~__FILE__:_ ~__LINE__:_ ~data name f =
|
||||||
let span = Int64.of_int (A.fetch_and_add span_id_gen_ 1) in
|
let span = Int64.of_int (A.fetch_and_add span_id_gen_ 1) in
|
||||||
let tid = get_tid_ () in
|
let tid = get_tid_ () in
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue