Library
Module
Module type
Parameter
Class
Class type
Trace.
User defined data, generally passed as key/value pairs to whatever collector is installed (if any).
type explicit_span = {
span : span;
Identifier for this span. Several explicit spans might share the same identifier since we can differentiate between them via meta
.
mutable meta : Meta_map.t;
Metadata for this span (and its context)
*)}
Explicit span, with collector-specific metadata
module Collector : sig ... end
A global collector.
module Meta_map : sig ... end
Associative containers with Heterogeneous Values
Is there a collector?
This is fast, so that the traced program can check it before creating any span or message.
val with_span :
?__FUNCTION__:string ->
__FILE__:string ->
__LINE__:int ->
?data:(unit -> (string * user_data) list) ->
string ->
(span -> 'a) ->
'a
with_span ~__FILE__ ~__LINE__ name f
enters a new span sp
, and calls f sp
. sp
might be a dummy span if no collector is installed. When f sp
returns or raises, the span sp
is exited.
This is the recommended way to instrument most code.
NOTE an important restriction is that this is only supposed to work for synchronous, direct style code. Monadic concurrency, Effect-based fibers, etc. might not play well with this style of spans on some or all backends. If you use cooperative concurrency, see enter_manual_span
.
Add structured data to the given active span (see with_span
). Behavior is not specified if the span has been exited.
val enter_manual_sub_span :
parent:explicit_span ->
?flavor:[ `Sync | `Async ] ->
?__FUNCTION__:string ->
__FILE__:string ->
__LINE__:int ->
?data:(unit -> (string * user_data) list) ->
string ->
explicit_span
Like with_span
but the caller is responsible for obtaining the parent
span from their own caller, and carry the resulting explicit_span
to the matching exit_manual_span
.
val enter_manual_toplevel_span :
?flavor:[ `Sync | `Async ] ->
?__FUNCTION__:string ->
__FILE__:string ->
__LINE__:int ->
?data:(unit -> (string * user_data) list) ->
string ->
explicit_span
Like with_span
but the caller is responsible for carrying this explicit_span
around until it's exited with exit_manual_span
. The span can be used as a parent in enter_manual_sub_span
.
val exit_manual_span : explicit_span -> unit
Exit an explicit span. This can be on another thread, in a fiber or lightweight thread, etc. and will be supported by backends nonetheless. The span can be obtained via enter_manual_sub_span
or enter_manual_toplevel_span
.
val add_data_to_manual_span :
explicit_span ->
(string * user_data) list ->
unit
add_data_explicit esp data
adds data
to the span esp
. The behavior is not specified is the span has been exited already.
message msg
logs a message msg
(if a collector is installed). Additional metadata can be provided.
val messagef :
?span:span ->
?data:(unit -> (string * user_data) list) ->
((('a, Format.formatter, unit, unit) format4 -> 'a) -> unit) ->
unit
messagef (fun k->k"hello %s %d!" "world" 42)
is like message "hello world 42!"
but only computes the string formatting if a collector is installed.
Give a name to the current thread. This might be used by the collector to display traces in a more informative way.
Give a name to the current process. This might be used by the collector to display traces in a more informative way.
val counter_int :
?data:(unit -> (string * user_data) list) ->
string ->
int ->
unit
Emit a counter of type int
. Counters represent the evolution of some quantity over time.
val counter_float :
?data:(unit -> (string * user_data) list) ->
string ->
float ->
unit
Emit a counter of type float
. See counter_int
for more details.
type collector = (module Collector.S)
An event collector.
See Collector
for more details.
val setup_collector : collector -> unit
setup_collector c
installs c
as the current collector.