From b5c35c5c1ecc0b14f5b1551536827d89037cafea Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Mon, 15 Aug 2022 12:30:16 -0400 Subject: [PATCH 1/5] ocamlformat-ignore --- .ocamlformat-ignore | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .ocamlformat-ignore diff --git a/.ocamlformat-ignore b/.ocamlformat-ignore new file mode 100644 index 00000000..94a26a6e --- /dev/null +++ b/.ocamlformat-ignore @@ -0,0 +1,6 @@ +src/*_pb.ml +src/*_pb.mli +src/*_types.ml +src/*_types.mli +src/*_pp.ml +src/*_pp.mli From b01dd32eadc684bfbdd9f5cb63968ae852393bcd Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Mon, 15 Aug 2022 12:30:22 -0400 Subject: [PATCH 2/5] add Span_link module --- src/opentelemetry.ml | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/src/opentelemetry.ml b/src/opentelemetry.ml index 8f80f8b6..66dcf7de 100644 --- a/src/opentelemetry.ml +++ b/src/opentelemetry.ml @@ -480,6 +480,38 @@ end = struct default_span_event ~time_unix_nano ~name ~attributes:attrs () end +(** Span Link + + A pointer from the current span to another span in the same trace or in a + different trace. For example, this can be used in batching operations, + where a single batch handler processes multiple requests from different + traces or when the handler receives a request from a different project. +*) +module Span_link : sig + open Proto.Trace + type t = span_link + + val make : + trace_id:Trace_id.t -> + span_id:Span_id.t -> + ?trace_state:string -> + ?attrs:key_value list -> + ?dropped_attributes_count:int -> + unit -> + t +end = struct + open Proto.Trace + type t = span_link + + let make ~trace_id ~span_id ?trace_state ?(attrs=[]) ?dropped_attributes_count () : t = + let attributes = List.map _conv_key_value attrs in + let dropped_attributes_count = Option.map Int32.of_int dropped_attributes_count in + default_span_link + ~trace_id:(Trace_id.to_bytes trace_id) + ~span_id:(Span_id.to_bytes span_id) + ?trace_state ~attributes ?dropped_attributes_count () +end + (** Spans. A Span is the workhorse of traces, it indicates an operation that @@ -525,7 +557,7 @@ module Span : sig ?status:status -> trace_id:Trace_id.t -> ?parent:id -> - ?links:(Trace_id.t * Span_id.t * string) list -> + ?links:Span_link.t list -> start_time:Timestamp_ns.t -> end_time:Timestamp_ns.t -> string -> @@ -571,14 +603,6 @@ end = struct let trace_id = Trace_id.to_bytes trace_id in let parent_span_id = Option.map Span_id.to_bytes parent in let attributes = List.map _conv_key_value attrs in - let links = - List.map - (fun (trace_id, span_id, trace_state) -> - let trace_id = Trace_id.to_bytes trace_id in - let span_id = Span_id.to_bytes span_id in - default_span_link ~trace_id ~span_id ~trace_state ()) - links - in let span = default_span ~trace_id ?parent_span_id ~span_id:(Span_id.to_bytes id) ~attributes ~events ?trace_state ~status ~kind ~name ~links From d061c64818acf1d77c02a2639b552aa8b3e6afc5 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Mon, 15 Aug 2022 12:34:52 -0400 Subject: [PATCH 3/5] fix --- src/integrations/cohttp/opentelemetry_cohttp_lwt.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/integrations/cohttp/opentelemetry_cohttp_lwt.ml b/src/integrations/cohttp/opentelemetry_cohttp_lwt.ml index 4af27555..db33c233 100644 --- a/src/integrations/cohttp/opentelemetry_cohttp_lwt.ml +++ b/src/integrations/cohttp/opentelemetry_cohttp_lwt.ml @@ -32,7 +32,7 @@ module Server : sig ?service_name:string -> ?attrs:Otel.Span.key_value list -> ?kind:Otel.Span.kind -> - ?links:(Otel.Trace_id.t * Otel.Span_id.t * string) list -> + ?links:Otel.Span_link.t list -> string -> Request.t -> (Request.t -> 'a Lwt.t) -> From 788dc38e9bccffd35d50572993089f93fafd96cd Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Mon, 15 Aug 2022 12:45:50 -0400 Subject: [PATCH 4/5] format --- src/opentelemetry.ml | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/src/opentelemetry.ml b/src/opentelemetry.ml index 66dcf7de..4d4a5206 100644 --- a/src/opentelemetry.ml +++ b/src/opentelemetry.ml @@ -7,7 +7,8 @@ module Rand_bytes = Rand_bytes (** Generation of random identifiers *) open struct - let result_bind x f = match x with + let result_bind x f = + match x with | Error e -> Error e | Ok x -> f x end @@ -416,8 +417,8 @@ module Globals = struct |> String.split_on_char ',' |> List.map parse_pair with _ -> [] - (** Add a global attribute *) - let add_global_attribute (key:string) (v:value) : unit = + (** Add a global attribute *) + let add_global_attribute (key : string) (v : value) : unit = global_attributes := _conv_key_value (key, v) :: !global_attributes (* add global attributes to this list *) @@ -443,7 +444,8 @@ module Globals = struct | None -> l | Some v -> default_key_value ~key:Conventions.Attributes.Service.instance_id - ~value:(Some (String_value v)) () :: l + ~value:(Some (String_value v)) () + :: l in let l = match !service_namespace with @@ -489,6 +491,7 @@ end *) module Span_link : sig open Proto.Trace + type t = span_link val make : @@ -498,18 +501,22 @@ module Span_link : sig ?attrs:key_value list -> ?dropped_attributes_count:int -> unit -> - t + t end = struct open Proto.Trace + type t = span_link - let make ~trace_id ~span_id ?trace_state ?(attrs=[]) ?dropped_attributes_count () : t = + let make ~trace_id ~span_id ?trace_state ?(attrs = []) + ?dropped_attributes_count () : t = let attributes = List.map _conv_key_value attrs in - let dropped_attributes_count = Option.map Int32.of_int dropped_attributes_count in + let dropped_attributes_count = + Option.map Int32.of_int dropped_attributes_count + in default_span_link - ~trace_id:(Trace_id.to_bytes trace_id) - ~span_id:(Span_id.to_bytes span_id) - ?trace_state ~attributes ?dropped_attributes_count () + ~trace_id:(Trace_id.to_bytes trace_id) + ~span_id:(Span_id.to_bytes span_id) ?trace_state ~attributes + ?dropped_attributes_count () end (** Spans. @@ -696,7 +703,8 @@ module Trace = struct | Error e -> default_status ~code:Status_code_error ~message:e () in let span, _ = - (* TODO: should the attrs passed to with_ go on the Span (in Span.create) or on the ResourceSpan (in emit)? + (* TODO: should the attrs passed to with_ go on the Span + (in Span.create) or on the ResourceSpan (in emit)? (question also applies to Opentelemetry_lwt.Trace.with) *) Span.create ?kind ~trace_id ?parent ?links ~id:span_id ?trace_state ~attrs:scope.attrs ~events:scope.events ~start_time @@ -913,8 +921,8 @@ module Logs = struct ~instrumentation_library_logs:[ ll ] () in Collector.send_logs [ rl ] ~ret:ignore - end + (** A set of callbacks that produce metrics when called. The metrics are automatically called regularly. From 97b9cb8ea8e7d07ece0edb49580f5212e69293dd Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Mon, 15 Aug 2022 13:18:10 -0400 Subject: [PATCH 5/5] detail --- src/opentelemetry.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opentelemetry.ml b/src/opentelemetry.ml index 4d4a5206..c2fde0d0 100644 --- a/src/opentelemetry.ml +++ b/src/opentelemetry.ml @@ -7,7 +7,7 @@ module Rand_bytes = Rand_bytes (** Generation of random identifiers *) open struct - let result_bind x f = + let[@inline] result_bind x f = match x with | Error e -> Error e | Ok x -> f x