mirror of
https://github.com/ocaml-tracing/ocaml-trace.git
synced 2026-05-05 17:04:49 -04:00
add Trace_lwt optional library
provides a with_span that's lwt friendly, as well as a ambient span provider.
This commit is contained in:
parent
83d408355b
commit
feb50a6b8e
3 changed files with 38 additions and 1 deletions
|
|
@ -22,13 +22,14 @@
|
||||||
(synopsis
|
(synopsis
|
||||||
"A lightweight stub for tracing/observability, agnostic in how data is collected")
|
"A lightweight stub for tracing/observability, agnostic in how data is collected")
|
||||||
(description
|
(description
|
||||||
"ocaml-trace can be used to instrument libraries and programs with low overhead.\n\n It doesn't do any IO unless a collector is plugged in, which only\n the final executable should do.")
|
"ocaml-trace can be used to instrument libraries and programs with low overhead. It doesn't do any IO unless a collector is plugged in, which only the final executable should do.")
|
||||||
(depends
|
(depends
|
||||||
(ocaml
|
(ocaml
|
||||||
(>= 4.08))
|
(>= 4.08))
|
||||||
dune)
|
dune)
|
||||||
(depopts
|
(depopts
|
||||||
unix
|
unix
|
||||||
|
lwt
|
||||||
(thread-local-storage (>= 0.2))
|
(thread-local-storage (>= 0.2))
|
||||||
(mtime
|
(mtime
|
||||||
(>= 2.0)))
|
(>= 2.0)))
|
||||||
|
|
|
||||||
6
src/lwt/dune
Normal file
6
src/lwt/dune
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
(library
|
||||||
|
(name trace_lwt)
|
||||||
|
(public_name trace.lwt)
|
||||||
|
(optional) ; lwt
|
||||||
|
(libraries trace.core lwt)
|
||||||
|
(synopsis "Interface with lwt"))
|
||||||
30
src/lwt/trace_lwt.ml
Normal file
30
src/lwt/trace_lwt.ml
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
(** Optional interface with lwt.
|
||||||
|
|
||||||
|
@since NEXT_RELEASE *)
|
||||||
|
|
||||||
|
open Trace_core
|
||||||
|
|
||||||
|
let k_ambient_span : span Lwt.key = Lwt.new_key ()
|
||||||
|
|
||||||
|
let ambient_span_provider : Trace_core.Ambient_span_provider.t =
|
||||||
|
ASP_some
|
||||||
|
( (),
|
||||||
|
{
|
||||||
|
get_current_span = (fun () -> Lwt.get k_ambient_span);
|
||||||
|
with_current_span_set_to =
|
||||||
|
(fun () span f ->
|
||||||
|
Lwt.with_value k_ambient_span (Some span) (fun () -> f span));
|
||||||
|
} )
|
||||||
|
|
||||||
|
let with_span ?level ?__FUNCTION__ ~__FILE__ ~__LINE__ ?parent ?params ?data
|
||||||
|
name (f : span -> 'a Lwt.t) : 'a Lwt.t =
|
||||||
|
if Trace_core.enabled () then (
|
||||||
|
let span =
|
||||||
|
Trace_core.enter_span ?level ?__FUNCTION__ ~__FILE__ ~__LINE__ ?parent
|
||||||
|
?params ?data name
|
||||||
|
in
|
||||||
|
let fut = Trace_core.with_current_span_set_to span f in
|
||||||
|
Lwt.on_termination fut (fun () -> Trace_core.exit_span span);
|
||||||
|
fut
|
||||||
|
) else
|
||||||
|
f Trace_core.Collector.dummy_span
|
||||||
Loading…
Add table
Reference in a new issue