mirror of
https://github.com/ocaml-tracing/ocaml-opentelemetry.git
synced 2026-03-08 20:07:55 -04:00
more features in spans
This commit is contained in:
parent
4bed351df4
commit
3beacb1f18
2 changed files with 40 additions and 2 deletions
|
|
@ -171,9 +171,14 @@ module Span : sig
|
||||||
|
|
||||||
val id : t -> Span_id.t
|
val id : t -> Span_id.t
|
||||||
|
|
||||||
|
type key_value = string * [`Int of int | `String of string | `Bool of bool | `None]
|
||||||
|
|
||||||
val create :
|
val create :
|
||||||
?kind:kind ->
|
?kind:kind ->
|
||||||
?id:id ->
|
?id:id ->
|
||||||
|
?trace_state:string ->
|
||||||
|
?service_name:string ->
|
||||||
|
?attrs:key_value list ->
|
||||||
trace_id:Trace_id.t ->
|
trace_id:Trace_id.t ->
|
||||||
?parent:id ->
|
?parent:id ->
|
||||||
?links:(Trace_id.t * Span_id.t * string) list ->
|
?links:(Trace_id.t * Span_id.t * string) list ->
|
||||||
|
|
@ -201,14 +206,42 @@ end = struct
|
||||||
| Span_kind_producer
|
| Span_kind_producer
|
||||||
| Span_kind_consumer
|
| Span_kind_consumer
|
||||||
|
|
||||||
|
type key_value = string * [`Int of int | `String of string | `Bool of bool | `None]
|
||||||
|
|
||||||
let create
|
let create
|
||||||
?(kind=Span_kind_unspecified)
|
?(kind=Span_kind_unspecified)
|
||||||
?(id=Span_id.create())
|
?(id=Span_id.create())
|
||||||
|
?trace_state
|
||||||
|
?service_name
|
||||||
|
?(attrs=[])
|
||||||
~trace_id ?parent ?(links=[])
|
~trace_id ?parent ?(links=[])
|
||||||
~start_time ~end_time
|
~start_time ~end_time
|
||||||
name : t * id =
|
name : t * id =
|
||||||
let trace_id = Trace_id.to_bytes trace_id in
|
let trace_id = Trace_id.to_bytes trace_id in
|
||||||
let parent_span_id = Option.map Span_id.to_bytes parent in
|
let parent_span_id = Option.map Span_id.to_bytes parent in
|
||||||
|
|
||||||
|
let attributes =
|
||||||
|
let open Proto.Common in
|
||||||
|
let l = List.map
|
||||||
|
(fun (k,v) ->
|
||||||
|
let value = match v with
|
||||||
|
| `Int i -> Some (Int_value (Int64.of_int i))
|
||||||
|
| `String s -> Some (String_value s)
|
||||||
|
| `Bool b -> Some (Bool_value b)
|
||||||
|
| `None -> None
|
||||||
|
in
|
||||||
|
default_key_value ~key:k ~value ())
|
||||||
|
attrs
|
||||||
|
in
|
||||||
|
let l = match service_name with
|
||||||
|
| None -> l
|
||||||
|
| Some v ->
|
||||||
|
default_key_value ~key:"service.name"
|
||||||
|
~value:(Some (String_value v)) () :: l
|
||||||
|
in
|
||||||
|
l
|
||||||
|
in
|
||||||
|
|
||||||
let links =
|
let links =
|
||||||
List.map
|
List.map
|
||||||
(fun (trace_id,span_id,trace_state) ->
|
(fun (trace_id,span_id,trace_state) ->
|
||||||
|
|
@ -221,6 +254,8 @@ end = struct
|
||||||
default_span
|
default_span
|
||||||
~trace_id ?parent_span_id
|
~trace_id ?parent_span_id
|
||||||
~span_id:(Span_id.to_bytes id)
|
~span_id:(Span_id.to_bytes id)
|
||||||
|
~attributes
|
||||||
|
?trace_state
|
||||||
~kind ~name ~links
|
~kind ~name ~links
|
||||||
~start_time_unix_nano:start_time
|
~start_time_unix_nano:start_time
|
||||||
~end_time_unix_nano:end_time
|
~end_time_unix_nano:end_time
|
||||||
|
|
@ -244,13 +279,16 @@ module Trace = struct
|
||||||
Collector.send_trace [rs]
|
Collector.send_trace [rs]
|
||||||
|
|
||||||
let with_
|
let with_
|
||||||
|
?trace_state ?service_name ?attrs
|
||||||
?kind ?(trace_id=Trace_id.create()) ?parent ?links
|
?kind ?(trace_id=Trace_id.create()) ?parent ?links
|
||||||
name (f:Trace_id.t * Span_id.t -> 'a) : 'a =
|
name (f:Trace_id.t * Span_id.t -> 'a) : 'a =
|
||||||
let start_time = Timestamp_ns.now_unix_ns() in
|
let start_time = Timestamp_ns.now_unix_ns() in
|
||||||
let span_id = Span_id.create() in
|
let span_id = Span_id.create() in
|
||||||
let finally() =
|
let finally() =
|
||||||
let span, _ =
|
let span, _ =
|
||||||
Span.create ?kind ~trace_id ?parent ?links ~id:span_id
|
Span.create
|
||||||
|
?kind ~trace_id ?parent ?links ~id:span_id
|
||||||
|
?trace_state ?service_name ?attrs
|
||||||
~start_time ~end_time:(Timestamp_ns.now_unix_ns())
|
~start_time ~end_time:(Timestamp_ns.now_unix_ns())
|
||||||
name in
|
name in
|
||||||
emit [span];
|
emit [span];
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ let run () =
|
||||||
Printf.printf "collector is on %S\n%!" (Opentelemetry_client_ocurl.get_url());
|
Printf.printf "collector is on %S\n%!" (Opentelemetry_client_ocurl.get_url());
|
||||||
let i = ref 0 in
|
let i = ref 0 in
|
||||||
while true do
|
while true do
|
||||||
let@ (tr,sp) = T.Trace.with_ "loop" in
|
let@ (tr,sp) = T.Trace.with_ ~service_name:"t1" "loop" in
|
||||||
Unix.sleepf 2.;
|
Unix.sleepf 2.;
|
||||||
|
|
||||||
let gc = Gc.stat() in
|
let gc = Gc.stat() in
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue