mirror of
https://github.com/ocaml-tracing/ocaml-trace.git
synced 2026-03-09 04:17:56 -04:00
share code for implicit spans
This commit is contained in:
parent
ef15941936
commit
b387729081
1 changed files with 16 additions and 14 deletions
|
|
@ -386,8 +386,7 @@ let collector ~out () : collector =
|
||||||
else
|
else
|
||||||
Thread.id (Thread.self ())
|
Thread.id (Thread.self ())
|
||||||
|
|
||||||
let enter_span ~__FUNCTION__:fun_name ~__FILE__:_ ~__LINE__:_ ~data name :
|
let[@inline] enter_span_ ~fun_name ~data name : span =
|
||||||
span =
|
|
||||||
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
|
||||||
let time_us = now_us () in
|
let time_us = now_us () in
|
||||||
|
|
@ -395,23 +394,26 @@ let collector ~out () : collector =
|
||||||
(E_define_span { tid; name; time_us; id = span; fun_name; data });
|
(E_define_span { tid; name; time_us; id = span; fun_name; data });
|
||||||
span
|
span
|
||||||
|
|
||||||
|
let enter_span ~__FUNCTION__:fun_name ~__FILE__:_ ~__LINE__:_ ~data name :
|
||||||
|
span =
|
||||||
|
enter_span_ ~fun_name ~data name
|
||||||
|
|
||||||
let exit_span span : unit =
|
let exit_span span : unit =
|
||||||
let time_us = now_us () in
|
let time_us = now_us () in
|
||||||
B_queue.push events (E_exit_span { id = span; time_us })
|
B_queue.push events (E_exit_span { id = span; time_us })
|
||||||
|
|
||||||
|
(* re-raise exception with its backtrace *)
|
||||||
|
external reraise : exn -> 'a = "%reraise"
|
||||||
|
|
||||||
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 = enter_span_ ~fun_name ~data name in
|
||||||
let tid = get_tid_ () in
|
try
|
||||||
let time_us = now_us () in
|
let x = f span in
|
||||||
B_queue.push events
|
exit_span span;
|
||||||
(E_define_span { tid; name; time_us; id = span; fun_name; data });
|
x
|
||||||
|
with exn ->
|
||||||
let finally () =
|
exit_span span;
|
||||||
let time_us = now_us () in
|
reraise exn
|
||||||
B_queue.push events (E_exit_span { id = span; time_us })
|
|
||||||
in
|
|
||||||
|
|
||||||
Fun.protect ~finally (fun () -> f span)
|
|
||||||
|
|
||||||
let add_data_to_span span data =
|
let add_data_to_span span data =
|
||||||
if data <> [] then B_queue.push events (E_add_data { id = span; data })
|
if data <> [] then B_queue.push events (E_add_data { id = span; data })
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue