From a64565f1040d995b8bb7d8eab4dd1d8872393b73 Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Tue, 1 Aug 2023 21:03:58 +0000 Subject: [PATCH 01/40] store: Extract thread_local, abstract for lwt/eio --- dune-project | 2 + opentelemetry-lwt.opam | 1 + opentelemetry.opam | 1 + src/dune | 2 +- src/opentelemetry.ml | 8 +-- src/thread_local.ml | 100 ----------------------------- src/thread_local.mli | 27 -------- src/trace/dune | 2 +- src/trace/opentelemetry_trace.ml | 107 +++++++------------------------ 9 files changed, 33 insertions(+), 217 deletions(-) delete mode 100644 src/thread_local.ml delete mode 100644 src/thread_local.mli diff --git a/dune-project b/dune-project index 6e948d02..14d68d3f 100644 --- a/dune-project +++ b/dune-project @@ -17,6 +17,7 @@ (depends (ocaml (>= "4.08")) ptime + ambient-context (odoc :with-doc) (pbrt (>= 2.3))) (depopts @@ -29,6 +30,7 @@ (synopsis "Lwt-compatible instrumentation for https://opentelemetry.io") (depends (ocaml (>= "4.08")) + ambient-context (opentelemetry (= :version)) (cohttp-lwt-unix :with-test) (odoc :with-doc) diff --git a/opentelemetry-lwt.opam b/opentelemetry-lwt.opam index 9740df2a..dc5f90d5 100644 --- a/opentelemetry-lwt.opam +++ b/opentelemetry-lwt.opam @@ -11,6 +11,7 @@ bug-reports: "https://github.com/imandra-ai/ocaml-opentelemetry/issues" depends: [ "dune" {>= "2.7"} "ocaml" {>= "4.08"} + "ambient-context" "opentelemetry" {= version} "cohttp-lwt-unix" {with-test} "odoc" {with-doc} diff --git a/opentelemetry.opam b/opentelemetry.opam index d7cd5e08..e13b4a10 100644 --- a/opentelemetry.opam +++ b/opentelemetry.opam @@ -12,6 +12,7 @@ depends: [ "dune" {>= "2.7"} "ocaml" {>= "4.08"} "ptime" + "ambient-context" "odoc" {with-doc} "pbrt" {>= "2.3"} ] diff --git a/src/dune b/src/dune index ea4b4070..8faa01ee 100644 --- a/src/dune +++ b/src/dune @@ -2,7 +2,7 @@ (name opentelemetry) (synopsis "API for opentelemetry instrumentation") (flags :standard -warn-error -a+8) - (libraries ptime ptime.clock.os pbrt threads opentelemetry.atomic) + (libraries ambient-context ptime ptime.clock.os pbrt threads opentelemetry.atomic) (public_name opentelemetry)) ; ### protobuf rules ### diff --git a/src/opentelemetry.ml b/src/opentelemetry.ml index 38dc60e4..60d374fa 100644 --- a/src/opentelemetry.ml +++ b/src/opentelemetry.ml @@ -1,7 +1,5 @@ (** Opentelemetry types and instrumentation *) -module Thread_local = Thread_local - module Lock = Lock (** Global lock. *) @@ -522,7 +520,7 @@ module Scope = struct (**/**) - let _global_scope : t Thread_local.t = Thread_local.create () + let _ambient_scope : t Ambient_context.key = Ambient_context.create_key () (**/**) @@ -530,12 +528,12 @@ module Scope = struct let get_surrounding ?scope () : t option = match scope with | Some _ -> scope - | None -> Thread_local.get _global_scope + | None -> Ambient_context.get _ambient_scope (** [with_scope sc f] calls [f()] in a context where [sc] is the (thread)-local scope, then reverts to the previous local scope, if any. *) let[@inline] with_scope (sc : t) (f : unit -> 'a) : 'a = - Thread_local.with_ _global_scope sc (fun _ -> f ()) + Ambient_context.with_binding _ambient_scope sc (fun _ -> f ()) end open struct diff --git a/src/thread_local.ml b/src/thread_local.ml deleted file mode 100644 index 4c4eadfb..00000000 --- a/src/thread_local.ml +++ /dev/null @@ -1,100 +0,0 @@ -module A = Opentelemetry_atomic.Atomic - -type key = int - -let[@inline] get_key_ () : key = Thread.id (Thread.self ()) - -module Key_map_ = Map.Make (struct - type t = key - - let compare : t -> t -> int = compare -end) - -type 'a t = 'a ref Key_map_.t A.t -(** The TLS variable is made of a global atomic reference - (which has very low contention: it's modified only when a - thread is started/stopped). - - Inside that atomic variable, is a map from thread ID to a mutable [ref] - holding the actual data. Because this [ref] is only ever accessed - by the thread with this given ID, it's safe to modify. *) - -let create () : _ t = A.make Key_map_.empty - -let[@inline] get_exn (self : _ t) = - let m = A.get self in - let key = get_key_ () in - !(Key_map_.find key m) - -let[@inline] get self = try Some (get_exn self) with Not_found -> None - -(* remove reference for the key *) -let remove_ref_ self key : unit = - while - let m = A.get self in - let m' = Key_map_.remove key m in - not (A.compare_and_set self m m') - do - Thread.yield () - done - -let set_ref_ self key (r : _ ref) : unit = - while - let m = A.get self in - let m' = Key_map_.add key r m in - not (A.compare_and_set self m m') - do - Thread.yield () - done - -(* get or associate a reference to [key], and return it. - Also return a function to remove the reference if we just created it. *) -let get_or_create_ref_ (self : _ t) key ~v : _ ref * _ option = - try - let r = Key_map_.find key (A.get self) in - let old = !r in - r := v; - r, Some old - with Not_found -> - let r = ref v in - set_ref_ self key r; - r, None - -let set (self : _ t) v : unit = - let key = get_key_ () in - let _, _ = get_or_create_ref_ self key ~v in - () - -let remove (self : _ t) : unit = - let key = get_key_ () in - remove_ref_ self key - -let get_or_create ~create (self : 'a t) : 'a = - let key = get_key_ () in - try - let r = Key_map_.find key (A.get self) in - !r - with Not_found -> - Gc.finalise (fun _ -> remove_ref_ self key) (Thread.self ()); - let v = create () in - let r = ref v in - set_ref_ self key r; - v - -let with_ self v f = - let key = get_key_ () in - let r, old = get_or_create_ref_ self key ~v in - - let restore_ () : unit = - match old with - | None -> remove_ref_ self key - | Some old -> r := old - in - - try - let res = f old in - restore_ (); - res - with e -> - restore_ (); - raise e diff --git a/src/thread_local.mli b/src/thread_local.mli deleted file mode 100644 index 7a33b709..00000000 --- a/src/thread_local.mli +++ /dev/null @@ -1,27 +0,0 @@ -(** Thread/Domain local storage - - This allows the creation of global state that is per-domain or per-thread. -*) - -type 'a t - -val create : unit -> 'a t -(** Create new storage *) - -val get : 'a t -> 'a option -(** Get current value *) - -val get_exn : 'a t -> 'a -(** Like {!get} but fails with an exception - @raise Not_found if no value was found *) - -val set : 'a t -> 'a -> unit - -val remove : _ t -> unit - -val get_or_create : create:(unit -> 'a) -> 'a t -> 'a - -val with_ : 'a t -> 'a -> ('a option -> 'b) -> 'b -(** [with_ var x f] sets [var] to [x] for this thread, calls [f prev] where - [prev] is the value currently in [var] (if any), and - then restores the old value of [var] for this thread. *) diff --git a/src/trace/dune b/src/trace/dune index 8391f103..69d9e44f 100644 --- a/src/trace/dune +++ b/src/trace/dune @@ -4,4 +4,4 @@ (public_name opentelemetry.trace) (synopsis "Use opentelemetry as a collector for trace") (optional) - (libraries trace opentelemetry)) + (libraries ambient-context trace opentelemetry)) diff --git a/src/trace/opentelemetry_trace.ml b/src/trace/opentelemetry_trace.ml index 2670429c..5f0d2c24 100644 --- a/src/trace/opentelemetry_trace.ml +++ b/src/trace/opentelemetry_trace.ml @@ -1,38 +1,4 @@ module Otel = Opentelemetry -module TLS = Otel.Thread_local - -type span = Trace.span - -(** Table indexed by Trace spans *) -module Span_tbl = Hashtbl.Make (struct - include Int64 - - let hash : t -> int = Hashtbl.hash -end) - -(** Per-thread set of active spans. *) -module Active_spans = struct - type span_begin = { - span_id: Otel.Span_id.t; - start_time: int64; - name: string; - data: (string * Trace.user_data) list; - __FILE__: string; - __LINE__: int; - new_scope: Otel.Scope.t; - old_scope: Otel.Scope.t option; - } - (** Information we get at the beginning of the span *) - - type t = { tbl: span_begin Span_tbl.t } [@@unboxed] - (** Storage for active spans *) - - let create () : t = { tbl = Span_tbl.create 8 } - - let tls : t TLS.t = TLS.create () - - let[@inline] get () : t = TLS.get_or_create tls ~create -end let conv_span_to_i64 (id : Otel.Span_id.t) : int64 = let bs = Otel.Span_id.to_bytes id in @@ -47,7 +13,7 @@ let span_of_i64 (id : int64) : Otel.Span_id.t = let collector () : Trace.collector = let module M = struct - let enter_span ?__FUNCTION__:_ ~__FILE__ ~__LINE__ ~data name : span = + let with_span ~__FUNCTION__:_ ~__FILE__ ~__LINE__ ~data name cb = let span_id = Otel.Span_id.create () in let span = conv_span_to_i64 span_id in @@ -63,57 +29,32 @@ let collector () : Trace.collector = let new_scope = { Otel.Scope.span_id; trace_id; events = []; attrs = [] } in - TLS.set Otel.Scope._global_scope new_scope; - - let active_spans = Active_spans.get () in - Span_tbl.add active_spans.tbl span - { - span_id; - start_time; - __FILE__; - __LINE__; - old_scope; - new_scope; - name; - data; - }; - - span - - let exit_span (span : span) : unit = - let active_spans = Active_spans.get () in - match Span_tbl.find_opt active_spans.tbl span with - | None -> () (* TODO: log warning *) - | Some - { - span_id; - start_time; - name; - __FILE__; - __LINE__; - new_scope; - old_scope; - data; - } -> - let end_time = Otel.Timestamp_ns.now_unix_ns () in - - (* restore previous scope *) - (match old_scope with - | None -> TLS.remove Otel.Scope._global_scope - | Some sc -> TLS.set Otel.Scope._global_scope sc); - - let o_span : Otel.Span.t = - let attrs = - [ "file", `String __FILE__; "line", `Int __LINE__ ] @ data - in - Otel.Span.create ~trace_id:new_scope.trace_id ~id:span_id ~start_time - ~end_time ~attrs name - |> fst + + Ambient_context.with_binding Otel.Scope._ambient_scope new_scope + @@ fun () -> + let rv = cb span in + + let end_time = Otel.Timestamp_ns.now_unix_ns () in + + let o_span : Otel.Span.t = + let attrs = + [ "file", `String __FILE__; "line", `Int __LINE__ ] @ data in + Otel.Span.create ~trace_id:new_scope.trace_id ~id:span_id ~start_time + ~end_time ~attrs name + |> fst + in + + Otel.Trace.emit [ o_span ]; + + rv - Otel.Trace.emit [ o_span ]; + let enter_explicit_span ~surrounding:_ ?__FUNCTION__:_ ~__FILE__:_ + ~__LINE__:_ ~data:_ _name : Trace.explicit_span = + failwith "nyi" - () + let exit_explicit_span _sp = + failwith "nyi" let message ?span ~data:_ msg : unit = (* gather information from context *) From d668f5c4727917b10bd15a89d41cc1f880e6ab64 Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Tue, 1 Aug 2023 21:42:35 +0000 Subject: [PATCH 02/40] lwt: Share impl details with non-lwt with_ --- src/lwt/opentelemetry_lwt.ml | 42 ++++++++---------------------------- src/opentelemetry.ml | 34 ++++++++++++++++++----------- 2 files changed, 31 insertions(+), 45 deletions(-) diff --git a/src/lwt/opentelemetry_lwt.ml b/src/lwt/opentelemetry_lwt.ml index 8c50e284..887fe6f7 100644 --- a/src/lwt/opentelemetry_lwt.ml +++ b/src/lwt/opentelemetry_lwt.ml @@ -12,45 +12,21 @@ module Metrics_callbacks = Metrics_callbacks module Trace_context = Trace_context module Trace = struct - open Proto.Trace include Trace (** Sync span guard *) - let with_ ?trace_state ?service_name ?(attrs = []) ?kind ?trace_id ?parent - ?scope ?links name (f : Scope.t -> 'a Lwt.t) : 'a Lwt.t = - let trace_id = - match trace_id, scope with - | Some trace_id, _ -> trace_id - | None, Some scope -> scope.trace_id - | None, None -> Trace_id.create () - in - let parent = - match parent, scope with - | Some span_id, _ -> Some span_id - | None, Some scope -> Some scope.span_id - | None, None -> None - in - let start_time = Timestamp_ns.now_unix_ns () in - let span_id = Span_id.create () in - let scope = { trace_id; span_id; events = []; attrs } in - let finally ok = - let status = - match ok with - | Ok () -> default_status ~code:Status_code_ok () - | Error e -> default_status ~code:Status_code_error ~message:e () - in - let span, _ = - Span.create ?kind ~trace_id ?parent ?links ~id:span_id ?trace_state - ~attrs:scope.attrs ~events:scope.events ~start_time - ~end_time:(Timestamp_ns.now_unix_ns ()) - ~status name - in - emit ?service_name [ span ] + let with_ ?force_new_trace_id ?trace_state ?service_name ?attrs ?kind + ?trace_id ?parent ?scope ?links name (cb : Scope.t -> 'a Lwt.t) : 'a Lwt.t + = + let thunk, finally = + with_' ?force_new_trace_id ?trace_state ?service_name ?attrs ?kind + ?trace_id ?parent ?scope ?links name cb in + try%lwt - let* x = f scope in + let* rv = thunk () in let () = finally (Ok ()) in - Lwt.return x + Lwt.return rv with e -> let () = finally (Error (Printexc.to_string e)) in Lwt.fail e diff --git a/src/opentelemetry.ml b/src/opentelemetry.ml index 60d374fa..6d27bf1d 100644 --- a/src/opentelemetry.ml +++ b/src/opentelemetry.ml @@ -716,17 +716,9 @@ module Trace = struct let add_attrs = Scope.add_attrs [@@deprecated "use Scope.add_attrs"] - (** Sync span guard. - - @param force_new_trace_id if true (default false), the span will not use a - surrounding context, or [scope], or [trace_id], but will always - create a fresh new trace ID. - - {b NOTE} be careful not to call this inside a Gc alarm, as it can - cause deadlocks. *) - let with_ ?(force_new_trace_id = false) ?trace_state ?service_name + let with_' ?(force_new_trace_id = false) ?trace_state ?service_name ?(attrs : (string * [< value ]) list = []) ?kind ?trace_id ?parent ?scope - ?links name (f : Scope.t -> 'a) : 'a = + ?links name cb = let scope = if force_new_trace_id then None @@ -770,10 +762,28 @@ module Trace = struct in emit ?service_name [ span ] in + let thunk () = cb scope in + thunk, finally + + (** Sync span guard. + + @param force_new_trace_id if true (default false), the span will not use a + surrounding context, or [scope], or [trace_id], but will always + create a fresh new trace ID. + + {b NOTE} be careful not to call this inside a Gc alarm, as it can + cause deadlocks. *) + let with_ ?force_new_trace_id ?trace_state ?service_name ?attrs ?kind + ?trace_id ?parent ?scope ?links name (cb : Scope.t -> 'a) : 'a = + let thunk, finally = + with_' ?force_new_trace_id ?trace_state ?service_name ?attrs ?kind + ?trace_id ?parent ?scope ?links name cb + in + try - let x = f scope in + let rv = thunk () in finally (Ok ()); - x + rv with e -> finally (Error (Printexc.to_string e)); raise e From 1a1c360f4c6dd1b5a75f4f63fa1a9d07f1ea44b4 Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Wed, 2 Aug 2023 00:19:24 +0000 Subject: [PATCH 03/40] store: Rename 'surrounding' scope to 'ambient' --- src/opentelemetry.ml | 30 ++++++++++++------------------ src/trace/opentelemetry_trace.ml | 10 ++++------ 2 files changed, 16 insertions(+), 24 deletions(-) diff --git a/src/opentelemetry.ml b/src/opentelemetry.ml index 6d27bf1d..9994ba9b 100644 --- a/src/opentelemetry.ml +++ b/src/opentelemetry.ml @@ -518,26 +518,20 @@ module Scope = struct if Collector.has_backend () then scope.attrs <- List.rev_append (attrs ()) scope.attrs - (**/**) + (** The opaque key necessary to access/set the ambient scope with + {!Ambient_context}. *) + let ambient_scope_key : t Ambient_context.key = Ambient_context.create_key () - let _ambient_scope : t Ambient_context.key = Ambient_context.create_key () - - (**/**) - - (** Obtain current scope from thread-local storage, if available *) - let get_surrounding ?scope () : t option = + (** Obtain current scope from {!Ambient_context}, if available. *) + let get_ambient_scope ?scope () : t option = match scope with | Some _ -> scope - | None -> Ambient_context.get _ambient_scope + | None -> Ambient_context.get ambient_scope_key - (** [with_scope sc f] calls [f()] in a context where [sc] is the + (** [with_ambient_scope sc f] calls [f()] in a context where [sc] is the (thread)-local scope, then reverts to the previous local scope, if any. *) - let[@inline] with_scope (sc : t) (f : unit -> 'a) : 'a = - Ambient_context.with_binding _ambient_scope sc (fun _ -> f ()) -end - -open struct - let get_surrounding_scope = Scope.get_surrounding + let[@inline] with_ambient_scope (sc : t) (f : unit -> 'a) : 'a = + Ambient_context.with_binding ambient_scope_key sc (fun _ -> f ()) end (** Span Link @@ -723,7 +717,7 @@ module Trace = struct if force_new_trace_id then None else - get_surrounding_scope ?scope () + Scope.get_ambient_scope ?scope () in let trace_id = match trace_id, scope with @@ -743,7 +737,7 @@ module Trace = struct let span_id = Span_id.create () in let scope = { trace_id; span_id; events = []; attrs } in (* set global scope in this thread *) - Scope.with_scope scope @@ fun () -> + Scope.with_ambient_scope scope @@ fun () -> (* called once we're done, to emit a span *) let finally res = let status = @@ -768,7 +762,7 @@ module Trace = struct (** Sync span guard. @param force_new_trace_id if true (default false), the span will not use a - surrounding context, or [scope], or [trace_id], but will always + ambient scope, [scope], or [trace_id], but will always create a fresh new trace ID. {b NOTE} be careful not to call this inside a Gc alarm, as it can diff --git a/src/trace/opentelemetry_trace.ml b/src/trace/opentelemetry_trace.ml index 5f0d2c24..86e3f61a 100644 --- a/src/trace/opentelemetry_trace.ml +++ b/src/trace/opentelemetry_trace.ml @@ -19,7 +19,7 @@ let collector () : Trace.collector = let start_time = Otel.Timestamp_ns.now_unix_ns () in - let old_scope = Otel.Scope.get_surrounding () in + let old_scope = Otel.Scope.get_ambient_scope () in let trace_id = match old_scope with | None -> Otel.Trace_id.create () @@ -30,8 +30,7 @@ let collector () : Trace.collector = { Otel.Scope.span_id; trace_id; events = []; attrs = [] } in - Ambient_context.with_binding Otel.Scope._ambient_scope new_scope - @@ fun () -> + Otel.Scope.with_ambient_scope new_scope @@ fun () -> let rv = cb span in let end_time = Otel.Timestamp_ns.now_unix_ns () in @@ -53,12 +52,11 @@ let collector () : Trace.collector = ~__LINE__:_ ~data:_ _name : Trace.explicit_span = failwith "nyi" - let exit_explicit_span _sp = - failwith "nyi" + let exit_explicit_span _sp = failwith "nyi" let message ?span ~data:_ msg : unit = (* gather information from context *) - let old_scope = Otel.Scope.get_surrounding () in + let old_scope = Otel.Scope.get_ambient_scope () in let trace_id = Option.map (fun sc -> sc.Otel.Scope.trace_id) old_scope in let span_id = From 9e65566d886e7fee80c7ea2315bd4ce78f7303cf Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Thu, 3 Aug 2023 20:16:34 +0000 Subject: [PATCH 04/40] trace-collector: Use OTel semconv for __FUNCTION__ etc --- src/trace/opentelemetry_trace.ml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/trace/opentelemetry_trace.ml b/src/trace/opentelemetry_trace.ml index 86e3f61a..b987829d 100644 --- a/src/trace/opentelemetry_trace.ml +++ b/src/trace/opentelemetry_trace.ml @@ -13,7 +13,7 @@ let span_of_i64 (id : int64) : Otel.Span_id.t = let collector () : Trace.collector = let module M = struct - let with_span ~__FUNCTION__:_ ~__FILE__ ~__LINE__ ~data name cb = + let with_span ~__FUNCTION__ ~__FILE__ ~__LINE__ ~data name cb = let span_id = Otel.Span_id.create () in let span = conv_span_to_i64 span_id in @@ -36,8 +36,20 @@ let collector () : Trace.collector = let end_time = Otel.Timestamp_ns.now_unix_ns () in let o_span : Otel.Span.t = + let last_dot = String.rindex __FUNCTION__ '.' in + let module_path = String.sub __FUNCTION__ 0 last_dot in + let function_name = + String.sub __FUNCTION__ (last_dot + 1) + (String.length __FUNCTION__ - last_dot - 1) + in let attrs = - [ "file", `String __FILE__; "line", `Int __LINE__ ] @ data + [ + "code.filepath", `String __FILE__; + "code.lineno", `Int __LINE__; + "code.function", `String function_name; + "code.namespace", `String module_path; + ] + @ data in Otel.Span.create ~trace_id:new_scope.trace_id ~id:span_id ~start_time ~end_time ~attrs name From 9fd5fd853607957e7f0214e2b310aff795cc2090 Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Thu, 3 Aug 2023 20:23:05 +0000 Subject: [PATCH 05/40] meta: Auto-format dune-project --- dune-project | 113 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 72 insertions(+), 41 deletions(-) diff --git a/dune-project b/dune-project index 14d68d3f..e8351e30 100644 --- a/dune-project +++ b/dune-project @@ -1,27 +1,36 @@ (lang dune 2.7) + (name opentelemetry) + (generate_opam_files true) + (source (github imandra-ai/ocaml-opentelemetry)) (version 0.5) (authors "the Imandra team and contributors") + (maintainers "the Imandra team and contributors") + (license MIT) + ;(documentation https://url/to/documentation) (package (name opentelemetry) (synopsis "Instrumentation for https://opentelemetry.io") (depends - (ocaml (>= "4.08")) - ptime - ambient-context - (odoc :with-doc) - (pbrt (>= 2.3))) + (ocaml + (>= "4.08")) + ptime + ambient-context + (odoc :with-doc) + (pbrt + (>= 2.3))) (depopts - (trace (>= 0.1))) + (trace + (>= 0.1))) (tags (instrumentation tracing opentelemetry datadog jaeger))) @@ -29,50 +38,72 @@ (name opentelemetry-lwt) (synopsis "Lwt-compatible instrumentation for https://opentelemetry.io") (depends - (ocaml (>= "4.08")) - ambient-context - (opentelemetry (= :version)) - (cohttp-lwt-unix :with-test) - (odoc :with-doc) - (lwt (>= "5.3")) - (lwt_ppx (>= "2.0"))) + (ocaml + (>= "4.08")) + ambient-context + (opentelemetry + (= :version)) + (cohttp-lwt-unix :with-test) + (odoc :with-doc) + (lwt + (>= "5.3")) + (lwt_ppx + (>= "2.0"))) (tags (instrumentation tracing opentelemetry datadog lwt))) (package - (name opentelemetry-client-ocurl) - (depends - (ocaml (>= "4.08")) - (mtime (>= "1.4")) ; for spans - ; atomic ; vendored - (opentelemetry (= :version)) - (pbrt (>= 2.3)) - (odoc :with-doc) - (ezcurl (>= 0.2.3)) - ocurl) - (synopsis "Collector client for opentelemetry, using http + ezcurl")) + (name opentelemetry-client-ocurl) + (depends + (ocaml + (>= "4.08")) + (mtime + (>= "1.4")) + ; for spans + ; atomic ; vendored + (opentelemetry + (= :version)) + (pbrt + (>= 2.3)) + (odoc :with-doc) + (ezcurl + (>= 0.2.3)) + ocurl) + (synopsis "Collector client for opentelemetry, using http + ezcurl")) (package (name opentelemetry-cohttp-lwt) (depends - (ocaml (>= "4.08")) - (opentelemetry (= :version)) - (opentelemetry-lwt (= :version)) + (ocaml + (>= "4.08")) + (opentelemetry + (= :version)) + (opentelemetry-lwt + (= :version)) (odoc :with-doc) - (lwt (>= "5.3")) - (cohttp-lwt (>= "4.0.0"))) + (lwt + (>= "5.3")) + (cohttp-lwt + (>= "4.0.0"))) (synopsis "Opentelemetry tracing for Cohttp HTTP servers")) (package - (name opentelemetry-client-cohttp-lwt) - (depends - (ocaml (>= "4.08")) - (mtime (>= "1.4")) ; for spans - (opentelemetry (= :version)) - (pbrt (>= 2.2)) - (odoc :with-doc) - (lwt (>= "5.3")) - (lwt_ppx (>= "2.0")) - cohttp-lwt - cohttp-lwt-unix) - (synopsis "Collector client for opentelemetry, using cohttp + lwt")) + (name opentelemetry-client-cohttp-lwt) + (depends + (ocaml + (>= "4.08")) + (mtime + (>= "1.4")) + ; for spans + (opentelemetry + (= :version)) + (pbrt + (>= 2.2)) + (odoc :with-doc) + (lwt + (>= "5.3")) + (lwt_ppx + (>= "2.0")) + cohttp-lwt + cohttp-lwt-unix) + (synopsis "Collector client for opentelemetry, using cohttp + lwt")) From c82cd6d7981affe5267b8d003f84c10f067c5601 Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Thu, 3 Aug 2023 20:24:09 +0000 Subject: [PATCH 06/40] meta: Lock down the version of ocamlformat --- dune-project | 8 +++++++- opentelemetry.opam | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/dune-project b/dune-project index e8351e30..b4617e51 100644 --- a/dune-project +++ b/dune-project @@ -27,7 +27,13 @@ ambient-context (odoc :with-doc) (pbrt - (>= 2.3))) + (>= 2.3)) + (ocaml-lsp-server :with-dev-setup) + (ocamlformat + (and + :with-dev-setup + (>= 0.24) + (< 0.25)))) (depopts (trace (>= 0.1))) diff --git a/opentelemetry.opam b/opentelemetry.opam index e13b4a10..0e81945c 100644 --- a/opentelemetry.opam +++ b/opentelemetry.opam @@ -15,6 +15,8 @@ depends: [ "ambient-context" "odoc" {with-doc} "pbrt" {>= "2.3"} + "ocaml-lsp-server" {with-dev-setup} + "ocamlformat" {with-dev-setup & >= "0.24" & < "0.25"} ] depopts: [ "trace" {>= "0.1"} From de35c80799986cfa73fd87afec15f946298cc135 Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Thu, 3 Aug 2023 20:29:35 +0000 Subject: [PATCH 07/40] trace-collector: Match new Trace API --- src/trace/opentelemetry_trace.ml | 43 +++++++++++++++++++------------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/src/trace/opentelemetry_trace.ml b/src/trace/opentelemetry_trace.ml index b987829d..0699ef43 100644 --- a/src/trace/opentelemetry_trace.ml +++ b/src/trace/opentelemetry_trace.ml @@ -36,23 +36,26 @@ let collector () : Trace.collector = let end_time = Otel.Timestamp_ns.now_unix_ns () in let o_span : Otel.Span.t = - let last_dot = String.rindex __FUNCTION__ '.' in - let module_path = String.sub __FUNCTION__ 0 last_dot in - let function_name = - String.sub __FUNCTION__ (last_dot + 1) - (String.length __FUNCTION__ - last_dot - 1) - in let attrs = - [ - "code.filepath", `String __FILE__; - "code.lineno", `Int __LINE__; - "code.function", `String function_name; - "code.namespace", `String module_path; - ] - @ data + match __FUNCTION__ with + | None -> + [ "code.filepath", `String __FILE__; "code.lineno", `Int __LINE__ ] + | Some __FUNCTION__ -> + let last_dot = String.rindex __FUNCTION__ '.' in + let module_path = String.sub __FUNCTION__ 0 last_dot in + let function_name = + String.sub __FUNCTION__ (last_dot + 1) + (String.length __FUNCTION__ - last_dot - 1) + in + [ + "code.filepath", `String __FILE__; + "code.lineno", `Int __LINE__; + "code.function", `String function_name; + "code.namespace", `String module_path; + ] in Otel.Span.create ~trace_id:new_scope.trace_id ~id:span_id ~start_time - ~end_time ~attrs name + ~end_time ~attrs:(attrs @ data) name |> fst in @@ -60,11 +63,15 @@ let collector () : Trace.collector = rv - let enter_explicit_span ~surrounding:_ ?__FUNCTION__:_ ~__FILE__:_ - ~__LINE__:_ ~data:_ _name : Trace.explicit_span = - failwith "nyi" + let enter_manual_span ~parent:_ ~__FUNCTION__:_ ~__FILE__:_ ~__LINE__:_ + ~data:_ _name : Trace.explicit_span = + (* TODO: print debugging warning if OTEL_OCAML_DEBUG is enabled *) + Trace.Collector.dummy_explicit_span - let exit_explicit_span _sp = failwith "nyi" + let exit_manual_span es = + (* TODO: print debugging warning if OTEL_OCAML_DEBUG is enabled *) + assert (es == Trace.Collector.dummy_explicit_span); + () let message ?span ~data:_ msg : unit = (* gather information from context *) From 1822c1acaad58bb1ae1569fe70d4e72ce8b77085 Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Tue, 29 Aug 2023 00:11:48 +0000 Subject: [PATCH 08/40] trace-collector: Support manual spans --- src/trace/opentelemetry_trace.ml | 234 ++++++++++++++++++++++++------- 1 file changed, 180 insertions(+), 54 deletions(-) diff --git a/src/trace/opentelemetry_trace.ml b/src/trace/opentelemetry_trace.ml index 0699ef43..8b6b9da2 100644 --- a/src/trace/opentelemetry_trace.ml +++ b/src/trace/opentelemetry_trace.ml @@ -1,77 +1,203 @@ module Otel = Opentelemetry - -let conv_span_to_i64 (id : Otel.Span_id.t) : int64 = +module Otrace = Trace (* ocaml-trace *) +module TLS = Ambient_context_tls.Thread_local + +type span_begin = { + id: Otel.Span_id.t; + start_time: int64; + name: string; + data: (string * Otrace.user_data) list; + __FILE__: string; + __LINE__: int; + __FUNCTION__: string option; + trace_id: Otel.Trace_id.t; + scope: Otel.Scope.t; + parent_id: Otel.Span_id.t option; + parent_scope: Otel.Scope.t option; +} + +(** Table indexed by ocaml-trace spans *) +module Active_span_tbl = Hashtbl.Make (struct + include Int64 + + let hash : t -> int = Hashtbl.hash +end) + +(** Per-thread set of active spans. *) +module Active_spans = struct + type t = { tbl: span_begin Active_span_tbl.t } [@@unboxed] + + let create () : t = { tbl = Active_span_tbl.create 32 } + + let tls : t TLS.t = TLS.create () + + let[@inline] get () : t = TLS.get_or_create tls ~create +end + +let otrace_of_otel (id : Otel.Span_id.t) : int64 = let bs = Otel.Span_id.to_bytes id in (* lucky that it coincides! *) assert (Bytes.length bs = 8); Bytes.get_int64_le bs 0 -let span_of_i64 (id : int64) : Otel.Span_id.t = +let otel_of_otrace (id : int64) : Otel.Span_id.t = let bs = Bytes.create 8 in Bytes.set_int64_le bs 0 id; Otel.Span_id.of_bytes bs +let spankind_of_string = + let open Otel.Span in + function + | "INTERNAL" -> Span_kind_internal + | "SERVER" -> Span_kind_server + | "CLIENT" -> Span_kind_client + | "PRODUCER" -> Span_kind_producer + | "CONSUMER" -> Span_kind_consumer + | _ -> Span_kind_unspecified + +let otel_attrs_of_otrace_data (data : Otel.Span.key_value list) = + let kind : Otel.Span.kind ref = ref Otel.Span.Span_kind_unspecified in + let data = + List.filter_map + (function + | name, `String v when name = "otrace.spankind" -> + kind := spankind_of_string v; + None + | x -> Some x) + data + in + !kind, data + +let enter_span' ?explicit_parent ~__FUNCTION__ ~__FILE__ ~__LINE__ ~data name = + let open Otel in + let otel_id = Span_id.create () in + let otrace_id = otrace_of_otel otel_id in + + let parent_scope = Scope.get_ambient_scope () in + let trace_id = + match parent_scope with + | Some sc -> sc.trace_id + | None -> Trace_id.create () + in + let parent_id = + match explicit_parent, parent_scope with + | Some p, _ -> Some (otel_of_otrace p) + | None, Some parent -> Some parent.span_id + | None, None -> None + in + + let new_scope = + { Scope.span_id = otel_id; trace_id; events = []; attrs = [] } + in + + let start_time = Timestamp_ns.now_unix_ns () in + + let sb = + { + id = otel_id; + start_time; + name; + data; + __FILE__; + __LINE__; + __FUNCTION__; + trace_id; + scope = new_scope; + parent_id; + parent_scope; + } + in + + let active_spans = Active_spans.get () in + Active_span_tbl.add active_spans.tbl otrace_id sb; + + otrace_id, sb + +let exit_span' otrace_id + { + id = otel_id; + start_time; + name; + data; + __FILE__; + __LINE__; + __FUNCTION__; + trace_id; + scope = _; + parent_id; + parent_scope = _; + } = + let open Otel in + let active_spans = Active_spans.get () in + Active_span_tbl.remove active_spans.tbl otrace_id; + + let end_time = Timestamp_ns.now_unix_ns () in + + let kind, attrs = otel_attrs_of_otrace_data data in + + let attrs = + match __FUNCTION__ with + | None -> + [ "code.filepath", `String __FILE__; "code.lineno", `Int __LINE__ ] + @ attrs + | Some __FUNCTION__ -> + let last_dot = String.rindex __FUNCTION__ '.' in + let module_path = String.sub __FUNCTION__ 0 last_dot in + let function_name = + String.sub __FUNCTION__ (last_dot + 1) + (String.length __FUNCTION__ - last_dot - 1) + in + [ + "code.filepath", `String __FILE__; + "code.lineno", `Int __LINE__; + "code.function", `String function_name; + "code.namespace", `String module_path; + ] + @ attrs + in + Span.create ~kind ~trace_id ?parent:parent_id ~id:otel_id ~start_time + ~end_time ~attrs name + |> fst + let collector () : Trace.collector = let module M = struct let with_span ~__FUNCTION__ ~__FILE__ ~__LINE__ ~data name cb = - let span_id = Otel.Span_id.create () in - let span = conv_span_to_i64 span_id in + let otrace_id, sb = + enter_span' ~__FUNCTION__ ~__FILE__ ~__LINE__ ~data name + in - let start_time = Otel.Timestamp_ns.now_unix_ns () in + Otel.Scope.with_ambient_scope sb.scope @@ fun () -> + let rv = cb otrace_id in - let old_scope = Otel.Scope.get_ambient_scope () in - let trace_id = - match old_scope with - | None -> Otel.Trace_id.create () - | Some sc -> sc.trace_id - in + let otel_span = exit_span' otrace_id sb in + Otel.Trace.emit [ otel_span ]; - let new_scope = - { Otel.Scope.span_id; trace_id; events = []; attrs = [] } - in + rv - Otel.Scope.with_ambient_scope new_scope @@ fun () -> - let rv = cb span in - - let end_time = Otel.Timestamp_ns.now_unix_ns () in - - let o_span : Otel.Span.t = - let attrs = - match __FUNCTION__ with - | None -> - [ "code.filepath", `String __FILE__; "code.lineno", `Int __LINE__ ] - | Some __FUNCTION__ -> - let last_dot = String.rindex __FUNCTION__ '.' in - let module_path = String.sub __FUNCTION__ 0 last_dot in - let function_name = - String.sub __FUNCTION__ (last_dot + 1) - (String.length __FUNCTION__ - last_dot - 1) - in - [ - "code.filepath", `String __FILE__; - "code.lineno", `Int __LINE__; - "code.function", `String function_name; - "code.namespace", `String module_path; - ] - in - Otel.Span.create ~trace_id:new_scope.trace_id ~id:span_id ~start_time - ~end_time ~attrs:(attrs @ data) name - |> fst + let enter_manual_span ~(parent : Otrace.explicit_span option) ~flavor:_ + ~__FUNCTION__ ~__FILE__ ~__LINE__ ~data name : Otrace.explicit_span = + let otrace_id, sb = + match parent with + | None -> enter_span' ~__FUNCTION__ ~__FILE__ ~__LINE__ ~data name + | Some { span; _ } -> + enter_span' ~explicit_parent:span ~__FUNCTION__ ~__FILE__ ~__LINE__ + ~data name in - Otel.Trace.emit [ o_span ]; - - rv + let active_spans = Active_spans.get () in + Active_span_tbl.add active_spans.tbl otrace_id sb; - let enter_manual_span ~parent:_ ~__FUNCTION__:_ ~__FILE__:_ ~__LINE__:_ - ~data:_ _name : Trace.explicit_span = - (* TODO: print debugging warning if OTEL_OCAML_DEBUG is enabled *) - Trace.Collector.dummy_explicit_span + Otrace.{ span = otrace_id; meta = Meta_map.empty } - let exit_manual_span es = - (* TODO: print debugging warning if OTEL_OCAML_DEBUG is enabled *) - assert (es == Trace.Collector.dummy_explicit_span); - () + let exit_manual_span Otrace.{ span = otrace_id; _ } = + let active_spans = Active_spans.get () in + match Active_span_tbl.find_opt active_spans.tbl otrace_id with + | None -> + (* FIXME: some kind of error/debug logging *) + () + | Some sb -> + let otel_span = exit_span' otrace_id sb in + Otel.Trace.emit [ otel_span ] let message ?span ~data:_ msg : unit = (* gather information from context *) @@ -80,7 +206,7 @@ let collector () : Trace.collector = let span_id = match span with - | Some id -> Some (span_of_i64 id) + | Some id -> Some (otel_of_otrace id) | None -> Option.map (fun sc -> sc.Otel.Scope.span_id) old_scope in From 9a26bb5e8b068e20640362ed404d8d539951d89b Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Tue, 29 Aug 2023 01:33:01 +0000 Subject: [PATCH 09/40] deps: Require Trace >= 0.3 --- dune-project | 2 +- opentelemetry.opam | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dune-project b/dune-project index b4617e51..8040c2f8 100644 --- a/dune-project +++ b/dune-project @@ -36,7 +36,7 @@ (< 0.25)))) (depopts (trace - (>= 0.1))) + (>= 0.3))) (tags (instrumentation tracing opentelemetry datadog jaeger))) diff --git a/opentelemetry.opam b/opentelemetry.opam index 0e81945c..4ebb692e 100644 --- a/opentelemetry.opam +++ b/opentelemetry.opam @@ -19,7 +19,7 @@ depends: [ "ocamlformat" {with-dev-setup & >= "0.24" & < "0.25"} ] depopts: [ - "trace" {>= "0.1"} + "trace" {>= "0.3"} ] build: [ ["dune" "subst"] {dev} From 6bf59ee21eac113d87f973ee0d68b735ec57064f Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Tue, 29 Aug 2023 01:39:42 +0000 Subject: [PATCH 10/40] deps: Follow @kit-ty-kate's advice /see ocaml/opam-repository#24240 --- dune-project | 7 +++++-- opentelemetry.opam | 5 +++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/dune-project b/dune-project index 8040c2f8..a15d0426 100644 --- a/dune-project +++ b/dune-project @@ -34,9 +34,12 @@ :with-dev-setup (>= 0.24) (< 0.25)))) - (depopts + (depopts trace) + (conflicts (trace - (>= 0.3))) + (or + (< 0.3) + (>= 0.4)))) (tags (instrumentation tracing opentelemetry datadog jaeger))) diff --git a/opentelemetry.opam b/opentelemetry.opam index 4ebb692e..168a88e6 100644 --- a/opentelemetry.opam +++ b/opentelemetry.opam @@ -18,8 +18,9 @@ depends: [ "ocaml-lsp-server" {with-dev-setup} "ocamlformat" {with-dev-setup & >= "0.24" & < "0.25"} ] -depopts: [ - "trace" {>= "0.3"} +depopts: ["trace"] +conflicts: [ + "trace" {< "0.3" | >= "0.4"} ] build: [ ["dune" "subst"] {dev} From 2b3e3d733c1d66edd68d79578f67bf99f63a3eaf Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Wed, 30 Aug 2023 01:21:30 +0000 Subject: [PATCH 11/40] trace-collector: Expose Internal module --- src/trace/opentelemetry_trace.ml | 325 +++++++++++++++--------------- src/trace/opentelemetry_trace.mli | 97 ++++++++- 2 files changed, 259 insertions(+), 163 deletions(-) diff --git a/src/trace/opentelemetry_trace.ml b/src/trace/opentelemetry_trace.ml index 8b6b9da2..34010ef9 100644 --- a/src/trace/opentelemetry_trace.ml +++ b/src/trace/opentelemetry_trace.ml @@ -2,165 +2,166 @@ module Otel = Opentelemetry module Otrace = Trace (* ocaml-trace *) module TLS = Ambient_context_tls.Thread_local -type span_begin = { - id: Otel.Span_id.t; - start_time: int64; - name: string; - data: (string * Otrace.user_data) list; - __FILE__: string; - __LINE__: int; - __FUNCTION__: string option; - trace_id: Otel.Trace_id.t; - scope: Otel.Scope.t; - parent_id: Otel.Span_id.t option; - parent_scope: Otel.Scope.t option; -} - -(** Table indexed by ocaml-trace spans *) -module Active_span_tbl = Hashtbl.Make (struct - include Int64 - - let hash : t -> int = Hashtbl.hash -end) - -(** Per-thread set of active spans. *) -module Active_spans = struct - type t = { tbl: span_begin Active_span_tbl.t } [@@unboxed] - - let create () : t = { tbl = Active_span_tbl.create 32 } - - let tls : t TLS.t = TLS.create () - - let[@inline] get () : t = TLS.get_or_create tls ~create -end - -let otrace_of_otel (id : Otel.Span_id.t) : int64 = - let bs = Otel.Span_id.to_bytes id in - (* lucky that it coincides! *) - assert (Bytes.length bs = 8); - Bytes.get_int64_le bs 0 - -let otel_of_otrace (id : int64) : Otel.Span_id.t = - let bs = Bytes.create 8 in - Bytes.set_int64_le bs 0 id; - Otel.Span_id.of_bytes bs - -let spankind_of_string = - let open Otel.Span in - function - | "INTERNAL" -> Span_kind_internal - | "SERVER" -> Span_kind_server - | "CLIENT" -> Span_kind_client - | "PRODUCER" -> Span_kind_producer - | "CONSUMER" -> Span_kind_consumer - | _ -> Span_kind_unspecified - -let otel_attrs_of_otrace_data (data : Otel.Span.key_value list) = - let kind : Otel.Span.kind ref = ref Otel.Span.Span_kind_unspecified in - let data = - List.filter_map - (function - | name, `String v when name = "otrace.spankind" -> - kind := spankind_of_string v; - None - | x -> Some x) - data - in - !kind, data - -let enter_span' ?explicit_parent ~__FUNCTION__ ~__FILE__ ~__LINE__ ~data name = - let open Otel in - let otel_id = Span_id.create () in - let otrace_id = otrace_of_otel otel_id in - - let parent_scope = Scope.get_ambient_scope () in - let trace_id = - match parent_scope with - | Some sc -> sc.trace_id - | None -> Trace_id.create () - in - let parent_id = - match explicit_parent, parent_scope with - | Some p, _ -> Some (otel_of_otrace p) - | None, Some parent -> Some parent.span_id - | None, None -> None - in - - let new_scope = - { Scope.span_id = otel_id; trace_id; events = []; attrs = [] } - in - - let start_time = Timestamp_ns.now_unix_ns () in - - let sb = - { - id = otel_id; - start_time; - name; - data; - __FILE__; - __LINE__; - __FUNCTION__; - trace_id; - scope = new_scope; - parent_id; - parent_scope; - } - in - - let active_spans = Active_spans.get () in - Active_span_tbl.add active_spans.tbl otrace_id sb; - - otrace_id, sb - -let exit_span' otrace_id - { - id = otel_id; - start_time; - name; - data; - __FILE__; - __LINE__; - __FUNCTION__; - trace_id; - scope = _; - parent_id; - parent_scope = _; - } = - let open Otel in - let active_spans = Active_spans.get () in - Active_span_tbl.remove active_spans.tbl otrace_id; - - let end_time = Timestamp_ns.now_unix_ns () in - - let kind, attrs = otel_attrs_of_otrace_data data in - - let attrs = - match __FUNCTION__ with - | None -> - [ "code.filepath", `String __FILE__; "code.lineno", `Int __LINE__ ] - @ attrs - | Some __FUNCTION__ -> - let last_dot = String.rindex __FUNCTION__ '.' in - let module_path = String.sub __FUNCTION__ 0 last_dot in - let function_name = - String.sub __FUNCTION__ (last_dot + 1) - (String.length __FUNCTION__ - last_dot - 1) - in - [ - "code.filepath", `String __FILE__; - "code.lineno", `Int __LINE__; - "code.function", `String function_name; - "code.namespace", `String module_path; - ] - @ attrs - in - Span.create ~kind ~trace_id ?parent:parent_id ~id:otel_id ~start_time - ~end_time ~attrs name - |> fst - -let collector () : Trace.collector = - let module M = struct +module Internal = struct + type span_begin = { + id: Otel.Span_id.t; + start_time: int64; + name: string; + data: (string * Otrace.user_data) list; + __FILE__: string; + __LINE__: int; + __FUNCTION__: string option; + trace_id: Otel.Trace_id.t; + scope: Otel.Scope.t; + parent_id: Otel.Span_id.t option; + parent_scope: Otel.Scope.t option; + } + + (** Table indexed by ocaml-trace spans *) + module Active_span_tbl = Hashtbl.Make (struct + include Int64 + + let hash : t -> int = Hashtbl.hash + end) + + (** Per-thread set of active spans. *) + module Active_spans = struct + type t = { tbl: span_begin Active_span_tbl.t } [@@unboxed] + + let create () : t = { tbl = Active_span_tbl.create 32 } + + let tls : t TLS.t = TLS.create () + + let[@inline] get () : t = TLS.get_or_create tls ~create + end + + let otrace_of_otel (id : Otel.Span_id.t) : int64 = + let bs = Otel.Span_id.to_bytes id in + (* lucky that it coincides! *) + assert (Bytes.length bs = 8); + Bytes.get_int64_le bs 0 + + let otel_of_otrace (id : int64) : Otel.Span_id.t = + let bs = Bytes.create 8 in + Bytes.set_int64_le bs 0 id; + Otel.Span_id.of_bytes bs + + let spankind_of_string = + let open Otel.Span in + function + | "INTERNAL" -> Span_kind_internal + | "SERVER" -> Span_kind_server + | "CLIENT" -> Span_kind_client + | "PRODUCER" -> Span_kind_producer + | "CONSUMER" -> Span_kind_consumer + | _ -> Span_kind_unspecified + + let otel_attrs_of_otrace_data data = + let kind : Otel.Span.kind ref = ref Otel.Span.Span_kind_unspecified in + let data = + List.filter_map + (function + | name, `String v when name = "otrace.spankind" -> + kind := spankind_of_string v; + None + | x -> Some x) + data + in + !kind, data + + let enter_span' ?explicit_parent ~__FUNCTION__ ~__FILE__ ~__LINE__ ~data name + = + let open Otel in + let otel_id = Span_id.create () in + let otrace_id = otrace_of_otel otel_id in + + let parent_scope = Scope.get_ambient_scope () in + let trace_id = + match parent_scope with + | Some sc -> sc.trace_id + | None -> Trace_id.create () + in + let parent_id = + match explicit_parent, parent_scope with + | Some p, _ -> Some (otel_of_otrace p) + | None, Some parent -> Some parent.span_id + | None, None -> None + in + + let new_scope = + { Scope.span_id = otel_id; trace_id; events = []; attrs = [] } + in + + let start_time = Timestamp_ns.now_unix_ns () in + + let sb = + { + id = otel_id; + start_time; + name; + data; + __FILE__; + __LINE__; + __FUNCTION__; + trace_id; + scope = new_scope; + parent_id; + parent_scope; + } + in + + let active_spans = Active_spans.get () in + Active_span_tbl.add active_spans.tbl otrace_id sb; + + otrace_id, sb + + let exit_span' otrace_id + { + id = otel_id; + start_time; + name; + data; + __FILE__; + __LINE__; + __FUNCTION__; + trace_id; + scope = _; + parent_id; + parent_scope = _; + } = + let open Otel in + let active_spans = Active_spans.get () in + Active_span_tbl.remove active_spans.tbl otrace_id; + + let end_time = Timestamp_ns.now_unix_ns () in + + let kind, attrs = otel_attrs_of_otrace_data data in + + let attrs = + match __FUNCTION__ with + | None -> + [ "code.filepath", `String __FILE__; "code.lineno", `Int __LINE__ ] + @ attrs + | Some __FUNCTION__ -> + let last_dot = String.rindex __FUNCTION__ '.' in + let module_path = String.sub __FUNCTION__ 0 last_dot in + let function_name = + String.sub __FUNCTION__ (last_dot + 1) + (String.length __FUNCTION__ - last_dot - 1) + in + [ + "code.filepath", `String __FILE__; + "code.lineno", `Int __LINE__; + "code.function", `String function_name; + "code.namespace", `String module_path; + ] + @ attrs + in + Span.create ~kind ~trace_id ?parent:parent_id ~id:otel_id ~start_time + ~end_time ~attrs name + |> fst + + module M = struct let with_span ~__FUNCTION__ ~__FILE__ ~__LINE__ ~data name cb = let otrace_id, sb = enter_span' ~__FUNCTION__ ~__FILE__ ~__LINE__ ~data name @@ -226,8 +227,10 @@ let collector () : Trace.collector = let counter_float name cur_val : unit = let m = Otel.Metrics.(gauge ~name [ float cur_val ]) in Otel.Metrics.emit [ m ] - end in - (module M) + end +end + +let collector () : Trace.collector = (module Internal.M) let setup () = Trace.setup_collector @@ collector () diff --git a/src/trace/opentelemetry_trace.mli b/src/trace/opentelemetry_trace.mli index 8e99befb..e506d674 100644 --- a/src/trace/opentelemetry_trace.mli +++ b/src/trace/opentelemetry_trace.mli @@ -1,8 +1,101 @@ -val collector : unit -> Trace.collector -(** Make a Trace collector that uses the OTEL backend to send spans and logs *) +module Otel := Opentelemetry +module Otrace := Trace +module TLS := Ambient_context_tls.Thread_local val setup : unit -> unit (** Install the OTEL backend as a Trace collector *) val setup_with_otel_backend : Opentelemetry.Collector.backend -> unit (** Same as {!setup}, but also install the given backend as OTEL backend *) + +val collector : unit -> Trace.collector +(** Make a Trace collector that uses the OTEL backend to send spans and logs *) + +(** Internal implementation details; do not consider these stable. *) +module Internal : sig + module M : sig + val with_span : + __FUNCTION__:string option -> + __FILE__:string -> + __LINE__:int -> + data:(string * Otrace.user_data) list -> + string (* span name *) -> + (Otrace.span -> 'a) -> + 'a + + val enter_manual_span : + parent:Otrace.explicit_span option -> + flavor:'a -> + __FUNCTION__:string option -> + __FILE__:string -> + __LINE__:int -> + data:(string * Otrace.user_data) list -> + string (* span name *) -> + Otrace.explicit_span + + val exit_manual_span : Otrace.explicit_span -> unit + + val message : + ?span:Otrace.span -> + data:(string * Otrace.user_data) list -> + string -> + unit + + val shutdown : unit -> unit + + val name_process : string -> unit + + val name_thread : string -> unit + + val counter_int : string -> int -> unit + + val counter_float : string -> float -> unit + end + + type span_begin = { + id: Otel.Span_id.t; + start_time: int64; + name: string; + data: (string * Otrace.user_data) list; + __FILE__: string; + __LINE__: int; + __FUNCTION__: string option; + trace_id: Otel.Trace_id.t; + scope: Otel.Scope.t; + parent_id: Otel.Span_id.t option; + parent_scope: Otel.Scope.t option; + } + + module Active_span_tbl : Hashtbl.S with type key = Otrace.span + + module Active_spans : sig + type t = private { tbl: span_begin Active_span_tbl.t } [@@unboxed] + + val create : unit -> t + + val tls : t TLS.t + + val get : unit -> t + end + + val otrace_of_otel : Otel.Span_id.t -> Otrace.span + + val otel_of_otrace : Otrace.span -> Otel.Span_id.t + + val spankind_of_string : string -> Otel.Span.kind + + val otel_attrs_of_otrace_data : + (string * Otrace.user_data) list -> + Otel.Span.kind * Otel.Span.key_value list + + val enter_span' : + ?explicit_parent:Otrace.span -> + __FUNCTION__:string option -> + __FILE__:string -> + __LINE__:int -> + data:(string * Otrace.user_data) list -> + string -> + Otrace.span * span_begin + + val exit_span' : Otrace.span -> span_begin -> Otel.Span.t +end From 925c96294514c15fc9af1233437c67b25e5bbf5a Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Wed, 30 Aug 2023 01:50:04 +0000 Subject: [PATCH 12/40] trace-collector: Documentation --- README.md | 23 +++++++++++++-- src/opentelemetry.ml | 23 +++++++++++---- src/trace/opentelemetry_trace.ml | 1 - src/trace/opentelemetry_trace.mli | 48 +++++++++++++++++++++++++++++++ 4 files changed, 86 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 3b1233b5..24dd9af5 100644 --- a/README.md +++ b/README.md @@ -26,10 +26,11 @@ MIT * [x] batching, perf, etc. - [ ] async collector relying on ocurl-multi - [ ] interface with `logs` (carry context around) +- [x] implicit scope (via [ambient-context][]) ## Use -For now, instrument manually: +For now, instrument traces/spans, logs, and metrics manually: ```ocaml module Otel = Opentelemetry @@ -45,16 +46,34 @@ let foo () = ]); do_more_work(); () +``` +### Setup + +If you're writing a top-level application, you need to perform some initial configuration. + +1. Set the [`service_name`][]; +2. configure our [ambient-context][] dependency with the appropriate storage for your environment — TLS, Lwt, Eio ... (see [their docs][install-ambient-storage] for more details); +3. and install a [`Collector`][] (usually by calling your collector's `with_setup` function.) + +For example, if your application is using Lwt, and you're using `ocurl` as your collector, you might do something like this: + +```ocaml let main () = Otel.Globals.service_name := "my_service"; Otel.GC_metrics.basic_setup(); + Ambient_context.with_storage_provider (Ambient_context_lwt.storage ()) @@ fun () -> Opentelemetry_client_ocurl.with_setup () @@ fun () -> (* … *) foo (); (* … *) -``` +``` + + [`service_name`]: + [`Collector`]: + [ambient-context]: + [install-ambient-storage]: ## Configuration diff --git a/src/opentelemetry.ml b/src/opentelemetry.ml index 9994ba9b..fac821c9 100644 --- a/src/opentelemetry.ml +++ b/src/opentelemetry.ml @@ -528,8 +528,11 @@ module Scope = struct | Some _ -> scope | None -> Ambient_context.get ambient_scope_key - (** [with_ambient_scope sc f] calls [f()] in a context where [sc] is the - (thread)-local scope, then reverts to the previous local scope, if any. *) + (** [with_ambient_scope sc thunk] calls [thunk()] in a context where [sc] is + the (thread|continuation)-local scope, then reverts to the previous local + scope, if any. + + @see ambient-context docs *) let[@inline] with_ambient_scope (sc : t) (f : unit -> 'a) : 'a = Ambient_context.with_binding ambient_scope_key sc (fun _ -> f ()) end @@ -761,12 +764,20 @@ module Trace = struct (** Sync span guard. - @param force_new_trace_id if true (default false), the span will not use a - ambient scope, [scope], or [trace_id], but will always - create a fresh new trace ID. + Notably, this includes {e implicit} scope-tracking: if called without a + [~scope] argument (or [~parent]/[~trace_id]), it will check in the + {!Ambient_context} for a surrounding environment, and use that as the + scope. Similarly, it uses {!Scope.with_ambient_scope} to {e set} a new + scope in the ambient context, so that any logically-nested calls to + {!with_} will use this span as their parent. {b NOTE} be careful not to call this inside a Gc alarm, as it can - cause deadlocks. *) + cause deadlocks. + + @param force_new_trace_id if true (default false), the span will not use a + ambient scope, the [~scope] argument, nor [~trace_id], but will instead + always create fresh identifiers for this span *) + let with_ ?force_new_trace_id ?trace_state ?service_name ?attrs ?kind ?trace_id ?parent ?scope ?links name (cb : Scope.t -> 'a) : 'a = let thunk, finally = diff --git a/src/trace/opentelemetry_trace.ml b/src/trace/opentelemetry_trace.ml index 34010ef9..6873fdd7 100644 --- a/src/trace/opentelemetry_trace.ml +++ b/src/trace/opentelemetry_trace.ml @@ -17,7 +17,6 @@ module Internal = struct parent_scope: Otel.Scope.t option; } - (** Table indexed by ocaml-trace spans *) module Active_span_tbl = Hashtbl.Make (struct include Int64 diff --git a/src/trace/opentelemetry_trace.mli b/src/trace/opentelemetry_trace.mli index e506d674..ca41b29c 100644 --- a/src/trace/opentelemetry_trace.mli +++ b/src/trace/opentelemetry_trace.mli @@ -2,6 +2,16 @@ module Otel := Opentelemetry module Otrace := Trace module TLS := Ambient_context_tls.Thread_local +(** [ocaml-opentelemetry.trace] implements a {!Trace_core.Collector} for {{:https://v3.ocaml.org/p/trace} ocaml-trace}. + + After installing this collector with {!setup}, you can consume libraries + that use ocaml-trace, and they will automatically emit OpenTelemetry spans + and logs. + + Both explicit scope (in the [_manual] functions such as [enter_manual_span]) + and implicit scope (in {!Internal.M.with_span}, via {!Ambient_context}) are + supported; see the detailed notes on {!Internal.M.enter_manual_span}. *) + val setup : unit -> unit (** Install the OTEL backend as a Trace collector *) @@ -22,6 +32,14 @@ module Internal : sig string (* span name *) -> (Otrace.span -> 'a) -> 'a + (** Implements {!Trace_core.Collector.S.with_span}, with the OpenTelemetry + collector as the backend. Invoked via {!Trace.with_span}. + + Notably, this has the same implicit-scope semantics as + {!Opentelemetry.Trace.with_}, and requires configuration of + {!Ambient_context}. + + @see ambient-context docs *) val enter_manual_span : parent:Otrace.explicit_span option -> @@ -32,8 +50,37 @@ module Internal : sig data:(string * Otrace.user_data) list -> string (* span name *) -> Otrace.explicit_span + (** Implements {!Trace_core.Collector.S.enter_manual_span}, with the OpenTelemetry + collector as the backend. Invoked at {!Trace.enter_manual_toplevel_span} + and {!Trace.enter_manual_sub_span}; requires an eventual call to + {!Trace.exit_manual_span}. + + These 'manual span' functions {e do not} implement the same implicit- + scope semantics of {!with_span}; and thus don't need to wrap a single + stack-frame / callback; you can freely enter a span at any point, store + the returned {!Trace.explicit_span}, and exit it at any later point with + {!Trace.exit_manual_span}. + + However, for that same reason, they also cannot update the + {!Ambient_context} — that is, when you invoke the various [manual] + functions, if you then invoke other functions that use + {!Trace.with_span}, those callees {e will not} see the span you entered + manually as their [parent]. + + Generally, the best practice is to only use these [manual] functions at + the 'leaves' of your callstack: that is, don't invoke user callbacks + from within them; or if you do, make sure to pass the [explicit_span] + you recieve from this function onwards to the user callback, so they can create further + child-spans. *) val exit_manual_span : Otrace.explicit_span -> unit + (** Implements {!Trace_core.Collector.S.exit_manual_span}, with the + OpenTelemetry collector as the backend. Invoked at + {!Trace.exit_manual_span}. Expects the [explicit_span] returned from an + earlier call to {!Trace.enter_manual_toplevel_span} or + {!Trace.enter_manual_sub_span}. + + (See the notes at {!enter_manual_span} about {!Ambient_context}.) *) val message : ?span:Otrace.span -> @@ -68,6 +115,7 @@ module Internal : sig module Active_span_tbl : Hashtbl.S with type key = Otrace.span + (** Table indexed by ocaml-trace spans. *) module Active_spans : sig type t = private { tbl: span_begin Active_span_tbl.t } [@@unboxed] From 155ceae6ae62dfb9f9eb01d9e62ad5d6907b542e Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Wed, 30 Aug 2023 01:57:15 +0000 Subject: [PATCH 13/40] update changelog --- CHANGES.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index ba3b1b03..c9dcc095 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,9 +1,13 @@ +## next version + +- replace `Thread_local` with `ocaml-ambient-context`, allowing for implicit scope in Lwt/Eio contexts +- update `ocaml-trace` interface to use the new `trace.0.3`-style API (breaking) ## 0.5 - new implementation for ocurl backend, using ezcurl and queues - refactor lwt: Use `try%lwt` over `Lwt.catch` -- add `opentelemetry.trace` (optional, depends on `trace`) +- add `opentelemetry.trace` (optional, depends on `ocaml-trace`) ## 0.4 From 82e3e97f1572082cfb2ff0855415d0cdd2ba0036 Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Wed, 30 Aug 2023 01:57:50 +0000 Subject: [PATCH 14/40] add PR number in changelog --- CHANGES.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index c9dcc095..05aff23d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,7 +1,7 @@ ## next version -- replace `Thread_local` with `ocaml-ambient-context`, allowing for implicit scope in Lwt/Eio contexts -- update `ocaml-trace` interface to use the new `trace.0.3`-style API (breaking) +- replace `Thread_local` with `ocaml-ambient-context`, allowing for implicit scope in Lwt/Eio contexts (#34) +- update `ocaml-trace` interface to use the new `trace.0.3`-style API (breaking, see #34) ## 0.5 From a890876946b7e6c4a11498df4847260a0a5b4bdc Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Wed, 30 Aug 2023 02:20:38 +0000 Subject: [PATCH 15/40] Document otrace.spankind identifier --- src/trace/opentelemetry_trace.mli | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/trace/opentelemetry_trace.mli b/src/trace/opentelemetry_trace.mli index ca41b29c..02b2d28d 100644 --- a/src/trace/opentelemetry_trace.mli +++ b/src/trace/opentelemetry_trace.mli @@ -2,15 +2,35 @@ module Otel := Opentelemetry module Otrace := Trace module TLS := Ambient_context_tls.Thread_local -(** [ocaml-opentelemetry.trace] implements a {!Trace_core.Collector} for {{:https://v3.ocaml.org/p/trace} ocaml-trace}. +(** [ocaml-opentelemetry.trace] implements a {!Trace_core.Collector} for + {{:https://v3.ocaml.org/p/trace} ocaml-trace}. After installing this collector with {!setup}, you can consume libraries - that use ocaml-trace, and they will automatically emit OpenTelemetry spans + that use [ocaml-trace], and they will automatically emit OpenTelemetry spans and logs. Both explicit scope (in the [_manual] functions such as [enter_manual_span]) and implicit scope (in {!Internal.M.with_span}, via {!Ambient_context}) are - supported; see the detailed notes on {!Internal.M.enter_manual_span}. *) + supported; see the detailed notes on {!Internal.M.enter_manual_span}. + + {1 Well-known identifiers} + + Because [ocaml-trace]'s API is a subset of OpenTelemetry functionality, this + interface allows for a few 'well-known' identifiers to be used in + [Trace]-instrumented libraries that wish to further support OpenTelemetry + usage: + + - If a key of ["otrace.spankind"] is included in the {!Trace.user_data} + passed to [with_span] et al., it will be used as the + {!Opentelemetry.Span.kind} of the emitted span. (See + {!Internal.spankind_of_string} for the list of supported values.) + + {[ocaml + let describe () = [ "otrace.spankind", `String "CLIENT" ] in + Trace.with_span ~__FILE__ ~__LINE__ ~data:describe "my-span" @@ fun _ -> + (* ... *) + ]} + *) val setup : unit -> unit (** Install the OTEL backend as a Trace collector *) From 9ecd73cb26e63050627286abbe81a8ef326f15d6 Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Wed, 30 Aug 2023 02:28:34 +0000 Subject: [PATCH 16/40] trace-collector: Add static names for well-known strings --- src/trace/opentelemetry_trace.ml | 62 +++++++++++++++++++------------ src/trace/opentelemetry_trace.mli | 35 ++++++++++++----- 2 files changed, 64 insertions(+), 33 deletions(-) diff --git a/src/trace/opentelemetry_trace.ml b/src/trace/opentelemetry_trace.ml index 6873fdd7..bc9bb87b 100644 --- a/src/trace/opentelemetry_trace.ml +++ b/src/trace/opentelemetry_trace.ml @@ -2,6 +2,45 @@ module Otel = Opentelemetry module Otrace = Trace (* ocaml-trace *) module TLS = Ambient_context_tls.Thread_local +module Well_known = struct + let spankind_key = "otrace.spankind" + + let internal = `String "INTERNAL" + + let server = `String "SERVER" + + let client = `String "CLIENT" + + let producer = `String "PRODUCER" + + let consumer = `String "CONSUMER" + + let spankind_of_string = + let open Otel.Span in + function + | "INTERNAL" -> Span_kind_internal + | "SERVER" -> Span_kind_server + | "CLIENT" -> Span_kind_client + | "PRODUCER" -> Span_kind_producer + | "CONSUMER" -> Span_kind_consumer + | _ -> Span_kind_unspecified + + let otel_attrs_of_otrace_data data = + let kind : Otel.Span.kind ref = ref Otel.Span.Span_kind_unspecified in + let data = + List.filter_map + (function + | name, `String v when name = "otrace.spankind" -> + kind := spankind_of_string v; + None + | x -> Some x) + data + in + !kind, data +end + +open Well_known + module Internal = struct type span_begin = { id: Otel.Span_id.t; @@ -45,29 +84,6 @@ module Internal = struct Bytes.set_int64_le bs 0 id; Otel.Span_id.of_bytes bs - let spankind_of_string = - let open Otel.Span in - function - | "INTERNAL" -> Span_kind_internal - | "SERVER" -> Span_kind_server - | "CLIENT" -> Span_kind_client - | "PRODUCER" -> Span_kind_producer - | "CONSUMER" -> Span_kind_consumer - | _ -> Span_kind_unspecified - - let otel_attrs_of_otrace_data data = - let kind : Otel.Span.kind ref = ref Otel.Span.Span_kind_unspecified in - let data = - List.filter_map - (function - | name, `String v when name = "otrace.spankind" -> - kind := spankind_of_string v; - None - | x -> Some x) - data - in - !kind, data - let enter_span' ?explicit_parent ~__FUNCTION__ ~__FILE__ ~__LINE__ ~data name = let open Otel in diff --git a/src/trace/opentelemetry_trace.mli b/src/trace/opentelemetry_trace.mli index 02b2d28d..e7835195 100644 --- a/src/trace/opentelemetry_trace.mli +++ b/src/trace/opentelemetry_trace.mli @@ -13,20 +13,20 @@ module TLS := Ambient_context_tls.Thread_local and implicit scope (in {!Internal.M.with_span}, via {!Ambient_context}) are supported; see the detailed notes on {!Internal.M.enter_manual_span}. - {1 Well-known identifiers} + {1:wellknown Well-known identifiers} Because [ocaml-trace]'s API is a subset of OpenTelemetry functionality, this interface allows for a few 'well-known' identifiers to be used in [Trace]-instrumented libraries that wish to further support OpenTelemetry usage: - - If a key of ["otrace.spankind"] is included in the {!Trace.user_data} - passed to [with_span] et al., it will be used as the + - If a key of exactly ["otrace.spankind"] is included in the + {!Trace.user_data} passed to [with_span] et al., it will be used as the {!Opentelemetry.Span.kind} of the emitted span. (See {!Internal.spankind_of_string} for the list of supported values.) {[ocaml - let describe () = [ "otrace.spankind", `String "CLIENT" ] in + let describe () = [ Opentelemetry_trace.(spankind_key, client) ] in Trace.with_span ~__FILE__ ~__LINE__ ~data:describe "my-span" @@ fun _ -> (* ... *) ]} @@ -41,6 +41,27 @@ val setup_with_otel_backend : Opentelemetry.Collector.backend -> unit val collector : unit -> Trace.collector (** Make a Trace collector that uses the OTEL backend to send spans and logs *) +(** Static references for well-known identifiers; see {!label-wellknown}. *) +module Well_known : sig + val spankind_key : string + + val internal : Otrace.user_data + + val server : Otrace.user_data + + val client : Otrace.user_data + + val producer : Otrace.user_data + + val consumer : Otrace.user_data + + val spankind_of_string : string -> Otel.Span.kind + + val otel_attrs_of_otrace_data : + (string * Otrace.user_data) list -> + Otel.Span.kind * Otel.Span.key_value list +end + (** Internal implementation details; do not consider these stable. *) module Internal : sig module M : sig @@ -150,12 +171,6 @@ module Internal : sig val otel_of_otrace : Otrace.span -> Otel.Span_id.t - val spankind_of_string : string -> Otel.Span.kind - - val otel_attrs_of_otrace_data : - (string * Otrace.user_data) list -> - Otel.Span.kind * Otel.Span.key_value list - val enter_span' : ?explicit_parent:Otrace.span -> __FUNCTION__:string option -> From f9ea7043996717c20d6c49a2a523642f5c367207 Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Wed, 30 Aug 2023 02:30:14 +0000 Subject: [PATCH 17/40] docs: Add a note about well-known-id stability --- src/trace/opentelemetry_trace.mli | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/trace/opentelemetry_trace.mli b/src/trace/opentelemetry_trace.mli index e7835195..bbcb28d8 100644 --- a/src/trace/opentelemetry_trace.mli +++ b/src/trace/opentelemetry_trace.mli @@ -2,7 +2,7 @@ module Otel := Opentelemetry module Otrace := Trace module TLS := Ambient_context_tls.Thread_local -(** [ocaml-opentelemetry.trace] implements a {!Trace_core.Collector} for +(** [opentelemetry.trace] implements a {!Trace_core.Collector} for {{:https://v3.ocaml.org/p/trace} ocaml-trace}. After installing this collector with {!setup}, you can consume libraries @@ -18,7 +18,10 @@ module TLS := Ambient_context_tls.Thread_local Because [ocaml-trace]'s API is a subset of OpenTelemetry functionality, this interface allows for a few 'well-known' identifiers to be used in [Trace]-instrumented libraries that wish to further support OpenTelemetry - usage: + usage. + + (These strings will not change in subsequent versions of this library, so + you do not need to depend on [opentelemetry.trace] to use them.) - If a key of exactly ["otrace.spankind"] is included in the {!Trace.user_data} passed to [with_span] et al., it will be used as the From 03f6f69bdd747e8b504c1f44d2d490ccec99b147 Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Tue, 19 Sep 2023 21:35:09 +0000 Subject: [PATCH 18/40] collector: Add debug-wrapping backend --- .../opentelemetry_client_cohttp_lwt.ml | 16 +++-- .../opentelemetry_client_cohttp_lwt.mli | 6 ++ .../opentelemetry_client_ocurl.ml | 16 +++-- .../opentelemetry_client_ocurl.mli | 6 ++ src/opentelemetry.ml | 71 +++++++++++++++++++ 5 files changed, 102 insertions(+), 13 deletions(-) diff --git a/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml b/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml index 2320197c..4bae616f 100644 --- a/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml +++ b/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml @@ -108,8 +108,7 @@ end = struct try%lwt let+ r = Httpc.post ~headers ~body uri in Ok r - with e -> - Lwt.return @@ Error e + with e -> Lwt.return @@ Error e in match r with | Error e -> @@ -551,7 +550,7 @@ end) } end -let setup_ ?(stop = Atomic.make false) ~(config : Config.t) () = +let create_backend ?(stop = Atomic.make false) ?(config = Config.make ()) () = debug_ := config.debug; let module B = Backend @@ -562,12 +561,17 @@ let setup_ ?(stop = Atomic.make false) ~(config : Config.t) () = end) () in - Opentelemetry.Collector.set_backend (module B); + (module B : OT.Collector.BACKEND) + +let setup_ ?stop ?config () = + let backend = create_backend ?stop ?config () in + let (module B : OT.Collector.BACKEND) = backend in + OT.Collector.set_backend backend; B.cleanup -let setup ?stop ?(config = Config.make ()) ?(enable = true) () = +let setup ?stop ?config ?(enable = true) () = if enable then ( - let cleanup = setup_ ?stop ~config () in + let cleanup = setup_ ?stop ?config () in at_exit cleanup ) diff --git a/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.mli b/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.mli index 12e20fc7..fa25dcfe 100644 --- a/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.mli +++ b/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.mli @@ -18,6 +18,12 @@ val set_headers : (string * string) list -> unit module Config = Config +val create_backend : + ?stop:bool Atomic.t -> + ?config:Config.t -> + unit -> + (module Opentelemetry.Collector.BACKEND) + val setup : ?stop:bool Atomic.t -> ?config:Config.t -> ?enable:bool -> unit -> unit (** Setup endpoint. This modifies {!Opentelemetry.Collector.backend}. diff --git a/src/client-ocurl/opentelemetry_client_ocurl.ml b/src/client-ocurl/opentelemetry_client_ocurl.ml index e0d6a596..2ad72b95 100644 --- a/src/client-ocurl/opentelemetry_client_ocurl.ml +++ b/src/client-ocurl/opentelemetry_client_ocurl.ml @@ -325,7 +325,8 @@ end = struct ) end -let mk_backend ~stop ~config () : (module Collector.BACKEND) = +let create_backend ?(stop = Atomic.make false) + ?(config : Config.t = Config.make ()) () : (module Collector.BACKEND) = let module M = struct open Opentelemetry.Proto open Opentelemetry.Collector @@ -426,8 +427,9 @@ let setup_ticker_thread ~stop ~sleep_ms (module B : Collector.BACKEND) () = in start_bg_thread tick_loop -let setup_ ?(stop = Atomic.make false) ~(config : Config.t) () = - let ((module B) as backend) = mk_backend ~stop ~config () in +let setup_ ?(stop = Atomic.make false) ?(config : Config.t = Config.make ()) () + = + let ((module B) as backend) = create_backend ~stop ~config () in Opentelemetry.Collector.set_backend backend; if config.ticker_thread then ( @@ -437,15 +439,15 @@ let setup_ ?(stop = Atomic.make false) ~(config : Config.t) () = B.cleanup -let setup ?stop ?(config = Config.make ()) ?(enable = true) () = +let setup ?stop ?config ?(enable = true) () = if enable then ( - let cleanup = setup_ ?stop ~config () in + let cleanup = setup_ ?stop ?config () in at_exit cleanup ) -let with_setup ?stop ?(config = Config.make ()) ?(enable = true) () f = +let with_setup ?stop ?config ?(enable = true) () f = if enable then ( - let cleanup = setup_ ?stop ~config () in + let cleanup = setup_ ?stop ?config () in Fun.protect ~finally:cleanup f ) else f () diff --git a/src/client-ocurl/opentelemetry_client_ocurl.mli b/src/client-ocurl/opentelemetry_client_ocurl.mli index 7d3ccc0a..a2c01177 100644 --- a/src/client-ocurl/opentelemetry_client_ocurl.mli +++ b/src/client-ocurl/opentelemetry_client_ocurl.mli @@ -17,6 +17,12 @@ val set_headers : (string * string) list -> unit module Atomic = Opentelemetry_atomic.Atomic module Config = Config +val create_backend : + ?stop:bool Atomic.t -> + ?config:Config.t -> + unit -> + (module Opentelemetry.Collector.BACKEND) + val setup : ?stop:bool Atomic.t -> ?config:Config.t -> ?enable:bool -> unit -> unit (** Setup endpoint. This modifies {!Opentelemetry.Collector.backend}. diff --git a/src/opentelemetry.ml b/src/opentelemetry.ml index fac821c9..d22247d0 100644 --- a/src/opentelemetry.ml +++ b/src/opentelemetry.ml @@ -147,6 +147,69 @@ module Collector = struct type backend = (module BACKEND) + module Noop_backend : BACKEND = struct + let noop_sender _ ~ret = ret () + + let send_trace : Trace.resource_spans list sender = { send = noop_sender } + + let send_metrics : Metrics.resource_metrics list sender = + { send = noop_sender } + + let send_logs : Logs.resource_logs list sender = { send = noop_sender } + + let signal_emit_gc_metrics () = () + + let tick () = () + + let set_on_tick_callbacks _cbs = () + + let cleanup () = () + end + + module Debug_backend (B : BACKEND) : BACKEND = struct + open Proto + + let send_trace : Trace.resource_spans list sender = + { + send = + (fun l ~ret -> + Format.eprintf "SPANS: %a@." + (Format.pp_print_list Trace.pp_resource_spans) + l; + B.send_trace.send l ~ret); + } + + let send_metrics : Metrics.resource_metrics list sender = + { + send = + (fun l ~ret -> + Format.eprintf "METRICS: %a@." + (Format.pp_print_list Metrics.pp_resource_metrics) + l; + B.send_metrics.send l ~ret); + } + + let send_logs : Logs.resource_logs list sender = + { + send = + (fun l ~ret -> + Format.eprintf "LOGS: %a@." + (Format.pp_print_list Logs.pp_resource_logs) + l; + B.send_logs.send l ~ret); + } + + let signal_emit_gc_metrics () = B.signal_emit_gc_metrics () + + let tick () = B.tick () + + let set_on_tick_callbacks cbs = B.set_on_tick_callbacks cbs + + let cleanup () = B.cleanup () + end + + let debug_backend : backend = (module Debug_backend (Noop_backend)) + (* hidden *) open struct let on_tick_cbs_ = ref [] @@ -193,6 +256,14 @@ module Collector = struct match !backend with | None -> () | Some (module B) -> B.tick () + + let with_setup_debug_backend b ?(enable = true) () f = + let (module B : BACKEND) = b in + if enable then ( + set_backend b; + Fun.protect ~finally:B.cleanup f + ) else + f () end module Util_ = struct From 2be60c7ba614a8791c4d01cfae4392d9695520a8 Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Tue, 19 Sep 2023 23:57:42 +0000 Subject: [PATCH 19/40] tests: Add failing test for threaded implicit-scope --- dune-project | 1 + opentelemetry.opam | 1 + tests/implicit_scope/sync/dune | 3 + .../sync/test_implicit_scope_sync.ml | 74 +++++++++++++++++++ 4 files changed, 79 insertions(+) create mode 100644 tests/implicit_scope/sync/dune create mode 100644 tests/implicit_scope/sync/test_implicit_scope_sync.ml diff --git a/dune-project b/dune-project index a15d0426..082551c5 100644 --- a/dune-project +++ b/dune-project @@ -26,6 +26,7 @@ ptime ambient-context (odoc :with-doc) + (alcotest :with-test) (pbrt (>= 2.3)) (ocaml-lsp-server :with-dev-setup) diff --git a/opentelemetry.opam b/opentelemetry.opam index 168a88e6..d222450d 100644 --- a/opentelemetry.opam +++ b/opentelemetry.opam @@ -14,6 +14,7 @@ depends: [ "ptime" "ambient-context" "odoc" {with-doc} + "alcotest" {with-test} "pbrt" {>= "2.3"} "ocaml-lsp-server" {with-dev-setup} "ocamlformat" {with-dev-setup & >= "0.24" & < "0.25"} diff --git a/tests/implicit_scope/sync/dune b/tests/implicit_scope/sync/dune new file mode 100644 index 00000000..072eee77 --- /dev/null +++ b/tests/implicit_scope/sync/dune @@ -0,0 +1,3 @@ +(tests + (names test_implicit_scope_sync) + (libraries alcotest opentelemetry opentelemetry-client-cohttp-lwt)) diff --git a/tests/implicit_scope/sync/test_implicit_scope_sync.ml b/tests/implicit_scope/sync/test_implicit_scope_sync.ml new file mode 100644 index 00000000..d8bf632b --- /dev/null +++ b/tests/implicit_scope/sync/test_implicit_scope_sync.ml @@ -0,0 +1,74 @@ +open Alcotest +module Otel = Opentelemetry + +let spans_emitted : Otel.Proto.Trace.resource_spans list ref = ref [] + +module Test_backend = struct + open Otel.Collector + open Otel.Proto + include Noop_backend + + let record_emitted_spans (l : Trace.resource_spans list) ~ret = + spans_emitted := l @ !spans_emitted; + ret () + + let send_trace : Trace.resource_spans list sender = + { send = record_emitted_spans } +end + +let with_test_backend f = + (* uncomment for eprintf debugging: *) + (* let module Debug_and_test_backend = Otel.Collector.Debug_backend (Test_backend) in + let backend = (module Debug_and_test_backend : Otel.Collector.BACKEND) in *) + let backend = (module Test_backend : Otel.Collector.BACKEND) in + Otel.Collector.with_setup_debug_backend backend () f + +let bytes_to_hex = Otel.Util_.bytes_to_hex + +let test_stack_based_implicit_scope () = + let run () = + Otel.Trace.with_ "first trace" @@ fun _scope -> + Thread.delay 0.2; + Otel.Trace.with_ "second trace" @@ fun _scope -> + Thread.delay 0.2; + Otel.Trace.with_ "third trace" @@ fun _scope -> + Thread.delay 0.2; + () + in + with_test_backend @@ fun () -> + (* start *) + run (); + check' int ~msg:"count of spans emitted" + ~actual:(List.length !spans_emitted) + ~expected:3; + let open Otel.Proto.Trace in + let f prev_span_id { scope_spans; _ } = + Format.printf "\n%a@\n" (Format.pp_print_list pp_scope_spans) scope_spans; + check' int ~msg:"count of scope_spans in emitted span" + ~actual:(List.length scope_spans) ~expected:1; + let { scope; spans; _ } = List.hd scope_spans in + check' bool ~msg:"scope exists in emitted span" + ~actual:(Option.is_some scope) ~expected:true; + check' int ~msg:"count of spans in scope_span" ~actual:(List.length spans) + ~expected:1; + let { name; trace_id; span_id; parent_span_id; _ } = List.hd spans in + Printf.printf + "name='%s' trace_id='%s' span_id='%s' parent_span_id='%s' \ + prev_span_id='%s'\n" + name (bytes_to_hex trace_id) (bytes_to_hex span_id) + (bytes_to_hex parent_span_id) + (bytes_to_hex prev_span_id); + check' string ~msg:"previous span is parent" + ~actual:(bytes_to_hex parent_span_id) + ~expected:(bytes_to_hex prev_span_id); + span_id + in + List.fold_left f (Bytes.of_string "") !spans_emitted |> ignore + +let suite = + [ + test_case "stack-based implicit scope" `Quick + test_stack_based_implicit_scope; + ] + +let () = Alcotest.run "implicit scope" [ "sync", suite ] From caade960b6e454e5184fae6cd2508309b54f032a Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Tue, 19 Sep 2023 23:57:53 +0000 Subject: [PATCH 20/40] fix: Repair ambient scope --- src/opentelemetry.ml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/opentelemetry.ml b/src/opentelemetry.ml index d22247d0..c65133b8 100644 --- a/src/opentelemetry.ml +++ b/src/opentelemetry.ml @@ -810,8 +810,6 @@ module Trace = struct let start_time = Timestamp_ns.now_unix_ns () in let span_id = Span_id.create () in let scope = { trace_id; span_id; events = []; attrs } in - (* set global scope in this thread *) - Scope.with_ambient_scope scope @@ fun () -> (* called once we're done, to emit a span *) let finally res = let status = @@ -830,7 +828,10 @@ module Trace = struct in emit ?service_name [ span ] in - let thunk () = cb scope in + let thunk () = + (* set global scope in this thread *) + Scope.with_ambient_scope scope @@ fun () -> cb scope + in thunk, finally (** Sync span guard. From 057a27abe9bc0897888156137d05611ece82b9cc Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Wed, 20 Sep 2023 02:13:15 +0000 Subject: [PATCH 21/40] (- fix) Use new TLS-module naming from ac.0.1.0 --- src/trace/dune | 11 +++++------ src/trace/opentelemetry_trace.ml | 2 +- src/trace/opentelemetry_trace.mli | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/trace/dune b/src/trace/dune index 69d9e44f..6207563d 100644 --- a/src/trace/dune +++ b/src/trace/dune @@ -1,7 +1,6 @@ - (library - (name opentelemetry_trace) - (public_name opentelemetry.trace) - (synopsis "Use opentelemetry as a collector for trace") - (optional) - (libraries ambient-context trace opentelemetry)) + (name opentelemetry_trace) + (public_name opentelemetry.trace) + (synopsis "Use opentelemetry as a collector for trace") + (optional) + (libraries ambient-context ambient-context.tls trace opentelemetry)) diff --git a/src/trace/opentelemetry_trace.ml b/src/trace/opentelemetry_trace.ml index bc9bb87b..16990b73 100644 --- a/src/trace/opentelemetry_trace.ml +++ b/src/trace/opentelemetry_trace.ml @@ -1,6 +1,6 @@ module Otel = Opentelemetry module Otrace = Trace (* ocaml-trace *) -module TLS = Ambient_context_tls.Thread_local +module TLS = Ambient_context_tls.TLS module Well_known = struct let spankind_key = "otrace.spankind" diff --git a/src/trace/opentelemetry_trace.mli b/src/trace/opentelemetry_trace.mli index bbcb28d8..8d8e934d 100644 --- a/src/trace/opentelemetry_trace.mli +++ b/src/trace/opentelemetry_trace.mli @@ -1,6 +1,6 @@ module Otel := Opentelemetry module Otrace := Trace -module TLS := Ambient_context_tls.Thread_local +module TLS := Ambient_context_tls.TLS (** [opentelemetry.trace] implements a {!Trace_core.Collector} for {{:https://v3.ocaml.org/p/trace} ocaml-trace}. From 1809075095323281f653876256ff408e302474ce Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Wed, 20 Sep 2023 02:30:53 +0000 Subject: [PATCH 22/40] trace-collector: Support for floats, etc from trace --- src/opentelemetry.ml | 6 ++++-- src/trace/opentelemetry_trace.ml | 17 +++++++++++++++-- src/trace/opentelemetry_trace.mli | 12 ++++++++++-- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/opentelemetry.ml b/src/opentelemetry.ml index c65133b8..4ad36206 100644 --- a/src/opentelemetry.ml +++ b/src/opentelemetry.ml @@ -435,6 +435,7 @@ type value = [ `Int of int | `String of string | `Bool of bool + | `Float of float | `None ] @@ -448,6 +449,7 @@ let _conv_value = | `Int i -> Some (Int_value (Int64.of_int i)) | `String s -> Some (String_value s) | `Bool b -> Some (Bool_value b) + | `Float f -> Some (Double_value f) | `None -> None (**/**) @@ -679,7 +681,7 @@ module Span : sig val id : t -> Span_id.t type key_value = - string * [ `Int of int | `String of string | `Bool of bool | `None ] + string * [ `Int of int | `String of string | `Bool of bool | `Float of float | `None ] val create : ?kind:kind -> @@ -716,7 +718,7 @@ end = struct | Span_kind_consumer type key_value = - string * [ `Int of int | `String of string | `Bool of bool | `None ] + string * [ `Int of int | `String of string | `Bool of bool | `Float of float | `None ] type nonrec status_code = status_status_code = | Status_code_unset diff --git a/src/trace/opentelemetry_trace.ml b/src/trace/opentelemetry_trace.ml index 16990b73..b7a6162d 100644 --- a/src/trace/opentelemetry_trace.ml +++ b/src/trace/opentelemetry_trace.ml @@ -215,6 +215,19 @@ module Internal = struct let otel_span = exit_span' otrace_id sb in Otel.Trace.emit [ otel_span ] + let add_data_to_span otrace_id data = + let active_spans = Active_spans.get () in + match Active_span_tbl.find_opt active_spans.tbl otrace_id with + | None -> + (* FIXME: some kind of error/debug logging *) + () + | Some sb -> + Active_span_tbl.replace active_spans.tbl otrace_id + { sb with data = sb.data @ data } + + let add_data_to_manual_span Otrace.{ span = otrace_id; _ } data = + add_data_to_span otrace_id data + let message ?span ~data:_ msg : unit = (* gather information from context *) let old_scope = Otel.Scope.get_ambient_scope () in @@ -235,11 +248,11 @@ module Internal = struct let name_thread _name = () - let counter_int name cur_val : unit = + let counter_int ~data:_ name cur_val : unit = let m = Otel.Metrics.(gauge ~name [ int cur_val ]) in Otel.Metrics.emit [ m ] - let counter_float name cur_val : unit = + let counter_float ~data:_ name cur_val : unit = let m = Otel.Metrics.(gauge ~name [ float cur_val ]) in Otel.Metrics.emit [ m ] end diff --git a/src/trace/opentelemetry_trace.mli b/src/trace/opentelemetry_trace.mli index 8d8e934d..fd3aa91b 100644 --- a/src/trace/opentelemetry_trace.mli +++ b/src/trace/opentelemetry_trace.mli @@ -126,6 +126,12 @@ module Internal : sig (See the notes at {!enter_manual_span} about {!Ambient_context}.) *) + val add_data_to_span : + Otrace.span -> (string * Otrace.user_data) list -> unit + + val add_data_to_manual_span : + Otrace.explicit_span -> (string * Otrace.user_data) list -> unit + val message : ?span:Otrace.span -> data:(string * Otrace.user_data) list -> @@ -138,9 +144,11 @@ module Internal : sig val name_thread : string -> unit - val counter_int : string -> int -> unit + val counter_int : + data:(string * Otrace.user_data) list -> string -> int -> unit - val counter_float : string -> float -> unit + val counter_float : + data:(string * Otrace.user_data) list -> string -> float -> unit end type span_begin = { From 28f750056f7c330fd190e569ee837c687930c77b Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Wed, 20 Sep 2023 14:45:39 +0000 Subject: [PATCH 23/40] deps: Update ocaml-trace dep to 0.4 --- dune-project | 4 ++-- opentelemetry.opam | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dune-project b/dune-project index 082551c5..a6bb23ae 100644 --- a/dune-project +++ b/dune-project @@ -39,8 +39,8 @@ (conflicts (trace (or - (< 0.3) - (>= 0.4)))) + (< 0.4) + (>= 0.5)))) (tags (instrumentation tracing opentelemetry datadog jaeger))) diff --git a/opentelemetry.opam b/opentelemetry.opam index d222450d..b2721d44 100644 --- a/opentelemetry.opam +++ b/opentelemetry.opam @@ -21,7 +21,7 @@ depends: [ ] depopts: ["trace"] conflicts: [ - "trace" {< "0.3" | >= "0.4"} + "trace" {< "0.4" | >= "0.5"} ] build: [ ["dune" "subst"] {dev} From 76c18c55c2ed484766ac8693b9f3107e0e65bb1e Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Wed, 20 Sep 2023 15:14:10 +0000 Subject: [PATCH 24/40] trace-collector: Pass user-data to OTel metrics --- src/trace/opentelemetry_trace.ml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/trace/opentelemetry_trace.ml b/src/trace/opentelemetry_trace.ml index b7a6162d..892fdb9f 100644 --- a/src/trace/opentelemetry_trace.ml +++ b/src/trace/opentelemetry_trace.ml @@ -248,12 +248,14 @@ module Internal = struct let name_thread _name = () - let counter_int ~data:_ name cur_val : unit = - let m = Otel.Metrics.(gauge ~name [ int cur_val ]) in + let counter_int ~data name cur_val : unit = + let _kind, attrs = otel_attrs_of_otrace_data data in + let m = Otel.Metrics.(gauge ~name [ int ~attrs cur_val ]) in Otel.Metrics.emit [ m ] - let counter_float ~data:_ name cur_val : unit = - let m = Otel.Metrics.(gauge ~name [ float cur_val ]) in + let counter_float ~data name cur_val : unit = + let _kind, attrs = otel_attrs_of_otrace_data data in + let m = Otel.Metrics.(gauge ~name [ float ~attrs cur_val ]) in Otel.Metrics.emit [ m ] end end From 9a834b39f7478f7a55efae91caffa38a4f921e78 Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Wed, 20 Sep 2023 15:15:58 +0000 Subject: [PATCH 25/40] dune fmt --- dune | 3 ++- src/client-cohttp-lwt/dune | 3 ++- src/dune | 3 ++- src/opentelemetry.ml | 16 ++++++++++++++-- tests/bin/dune | 6 ++++-- tests/dune | 6 ++---- 6 files changed, 26 insertions(+), 11 deletions(-) diff --git a/dune b/dune index 575b5a09..6b9e175b 100644 --- a/dune +++ b/dune @@ -1,3 +1,4 @@ (env (_ - (flags :standard -warn-error -a+8 -w +a-4-30-40-41-42-44-48-70 -strict-sequence))) + (flags :standard -warn-error -a+8 -w +a-4-30-40-41-42-44-48-70 + -strict-sequence))) diff --git a/src/client-cohttp-lwt/dune b/src/client-cohttp-lwt/dune index 12d79702..f4198731 100644 --- a/src/client-cohttp-lwt/dune +++ b/src/client-cohttp-lwt/dune @@ -2,6 +2,7 @@ (name opentelemetry_client_cohttp_lwt) (public_name opentelemetry-client-cohttp-lwt) (synopsis "Opentelemetry collector using cohttp+lwt+unix") - (preprocess (pps lwt_ppx)) + (preprocess + (pps lwt_ppx)) (libraries opentelemetry lwt cohttp-lwt cohttp-lwt-unix pbrt mtime mtime.clock.os)) diff --git a/src/dune b/src/dune index 99867650..f91ee2aa 100644 --- a/src/dune +++ b/src/dune @@ -2,7 +2,8 @@ (name opentelemetry) (synopsis "API for opentelemetry instrumentation") (flags :standard -warn-error -a+8) - (libraries ambient-context ptime ptime.clock.os pbrt threads opentelemetry.atomic) + (libraries ambient-context ptime ptime.clock.os pbrt threads + opentelemetry.atomic) (public_name opentelemetry)) ; ### protobuf rules ### diff --git a/src/opentelemetry.ml b/src/opentelemetry.ml index 12f43f56..66ca27d2 100644 --- a/src/opentelemetry.ml +++ b/src/opentelemetry.ml @@ -682,7 +682,13 @@ module Span : sig val id : t -> Span_id.t type key_value = - string * [ `Int of int | `String of string | `Bool of bool | `Float of float | `None ] + string + * [ `Int of int + | `String of string + | `Bool of bool + | `Float of float + | `None + ] val create : ?kind:kind -> @@ -719,7 +725,13 @@ end = struct | Span_kind_consumer type key_value = - string * [ `Int of int | `String of string | `Bool of bool | `Float of float | `None ] + string + * [ `Int of int + | `String of string + | `Bool of bool + | `Float of float + | `None + ] type nonrec status_code = status_status_code = | Status_code_unset diff --git a/tests/bin/dune b/tests/bin/dune index 7ac29933..7d0ebe08 100644 --- a/tests/bin/dune +++ b/tests/bin/dune @@ -6,8 +6,10 @@ (executable (name emit1_cohttp) (modules emit1_cohttp) - (preprocess (pps lwt_ppx)) - (libraries unix opentelemetry opentelemetry-lwt opentelemetry-client-cohttp-lwt lwt.unix)) + (preprocess + (pps lwt_ppx)) + (libraries unix opentelemetry opentelemetry-lwt + opentelemetry-client-cohttp-lwt lwt.unix)) (executable (name cohttp_client) diff --git a/tests/dune b/tests/dune index 2d608045..c005f866 100644 --- a/tests/dune +++ b/tests/dune @@ -1,6 +1,4 @@ (tests (names test_trace_context test_get_url) - (libraries - opentelemetry - opentelemetry-client-ocurl - opentelemetry-client-cohttp-lwt)) + (libraries opentelemetry opentelemetry-client-ocurl + opentelemetry-client-cohttp-lwt)) From f5cd6e0bf0ac519a35c4518ab912fa49668acd03 Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Fri, 22 Sep 2023 20:22:11 +0000 Subject: [PATCH 26/40] chore: update CHANGES --- CHANGES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 05aff23d..ffbbeb24 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,7 @@ ## next version +- fix ticker thread shutdown +- migrated to OTEL proto files v1.0 - replace `Thread_local` with `ocaml-ambient-context`, allowing for implicit scope in Lwt/Eio contexts (#34) - update `ocaml-trace` interface to use the new `trace.0.3`-style API (breaking, see #34) From b0337f60274d0a13217fd8f17ac72e3079ab1577 Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Fri, 22 Sep 2023 20:22:43 +0000 Subject: [PATCH 27/40] chore: Add myself to maintainers --- dune-project | 5 ++++- opentelemetry-client-cohttp-lwt.opam | 6 +++++- opentelemetry-client-ocurl.opam | 6 +++++- opentelemetry-cohttp-lwt.opam | 6 +++++- opentelemetry-lwt.opam | 6 +++++- opentelemetry.opam | 6 +++++- 6 files changed, 29 insertions(+), 6 deletions(-) diff --git a/dune-project b/dune-project index a6bb23ae..ba9e66c5 100644 --- a/dune-project +++ b/dune-project @@ -11,7 +11,10 @@ (authors "the Imandra team and contributors") -(maintainers "the Imandra team and contributors") +(maintainers + "Simon Cruanes " + "Matt Bray " + "ELLIOTTCABLE ") (license MIT) diff --git a/opentelemetry-client-cohttp-lwt.opam b/opentelemetry-client-cohttp-lwt.opam index 91752b3f..ca6e02cb 100644 --- a/opentelemetry-client-cohttp-lwt.opam +++ b/opentelemetry-client-cohttp-lwt.opam @@ -2,7 +2,11 @@ opam-version: "2.0" version: "0.5" synopsis: "Collector client for opentelemetry, using cohttp + lwt" -maintainer: ["the Imandra team and contributors"] +maintainer: [ + "Simon Cruanes " + "Matt Bray " + "ELLIOTTCABLE " +] authors: ["the Imandra team and contributors"] license: "MIT" homepage: "https://github.com/imandra-ai/ocaml-opentelemetry" diff --git a/opentelemetry-client-ocurl.opam b/opentelemetry-client-ocurl.opam index e88b8a2a..0e0d5dd6 100644 --- a/opentelemetry-client-ocurl.opam +++ b/opentelemetry-client-ocurl.opam @@ -2,7 +2,11 @@ opam-version: "2.0" version: "0.5" synopsis: "Collector client for opentelemetry, using http + ezcurl" -maintainer: ["the Imandra team and contributors"] +maintainer: [ + "Simon Cruanes " + "Matt Bray " + "ELLIOTTCABLE " +] authors: ["the Imandra team and contributors"] license: "MIT" homepage: "https://github.com/imandra-ai/ocaml-opentelemetry" diff --git a/opentelemetry-cohttp-lwt.opam b/opentelemetry-cohttp-lwt.opam index 77221b9a..5ed49c39 100644 --- a/opentelemetry-cohttp-lwt.opam +++ b/opentelemetry-cohttp-lwt.opam @@ -2,7 +2,11 @@ opam-version: "2.0" version: "0.5" synopsis: "Opentelemetry tracing for Cohttp HTTP servers" -maintainer: ["the Imandra team and contributors"] +maintainer: [ + "Simon Cruanes " + "Matt Bray " + "ELLIOTTCABLE " +] authors: ["the Imandra team and contributors"] license: "MIT" homepage: "https://github.com/imandra-ai/ocaml-opentelemetry" diff --git a/opentelemetry-lwt.opam b/opentelemetry-lwt.opam index dc5f90d5..6435b9ed 100644 --- a/opentelemetry-lwt.opam +++ b/opentelemetry-lwt.opam @@ -2,7 +2,11 @@ opam-version: "2.0" version: "0.5" synopsis: "Lwt-compatible instrumentation for https://opentelemetry.io" -maintainer: ["the Imandra team and contributors"] +maintainer: [ + "Simon Cruanes " + "Matt Bray " + "ELLIOTTCABLE " +] authors: ["the Imandra team and contributors"] license: "MIT" tags: ["instrumentation" "tracing" "opentelemetry" "datadog" "lwt"] diff --git a/opentelemetry.opam b/opentelemetry.opam index b2721d44..3f67a696 100644 --- a/opentelemetry.opam +++ b/opentelemetry.opam @@ -2,7 +2,11 @@ opam-version: "2.0" version: "0.5" synopsis: "Instrumentation for https://opentelemetry.io" -maintainer: ["the Imandra team and contributors"] +maintainer: [ + "Simon Cruanes " + "Matt Bray " + "ELLIOTTCABLE " +] authors: ["the Imandra team and contributors"] license: "MIT" tags: ["instrumentation" "tracing" "opentelemetry" "datadog" "jaeger"] From fb1133be3dfe688b0dbe2de9bd81e848aecb7e05 Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Fri, 22 Sep 2023 20:25:30 +0000 Subject: [PATCH 28/40] chore: Prepare for v0.6 --- CHANGES.md | 2 ++ dune-project | 2 +- opentelemetry-client-cohttp-lwt.opam | 2 +- opentelemetry-client-ocurl.opam | 2 +- opentelemetry-cohttp-lwt.opam | 2 +- opentelemetry-lwt.opam | 2 +- opentelemetry.opam | 2 +- 7 files changed, 8 insertions(+), 6 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index ffbbeb24..31d6fb18 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,7 @@ ## next version +## 0.6 + - fix ticker thread shutdown - migrated to OTEL proto files v1.0 - replace `Thread_local` with `ocaml-ambient-context`, allowing for implicit scope in Lwt/Eio contexts (#34) diff --git a/dune-project b/dune-project index ba9e66c5..2c8f2b55 100644 --- a/dune-project +++ b/dune-project @@ -7,7 +7,7 @@ (source (github imandra-ai/ocaml-opentelemetry)) -(version 0.5) +(version 0.6) (authors "the Imandra team and contributors") diff --git a/opentelemetry-client-cohttp-lwt.opam b/opentelemetry-client-cohttp-lwt.opam index ca6e02cb..634ab161 100644 --- a/opentelemetry-client-cohttp-lwt.opam +++ b/opentelemetry-client-cohttp-lwt.opam @@ -1,6 +1,6 @@ # This file is generated by dune, edit dune-project instead opam-version: "2.0" -version: "0.5" +version: "0.6" synopsis: "Collector client for opentelemetry, using cohttp + lwt" maintainer: [ "Simon Cruanes " diff --git a/opentelemetry-client-ocurl.opam b/opentelemetry-client-ocurl.opam index 0e0d5dd6..d0ee4fbc 100644 --- a/opentelemetry-client-ocurl.opam +++ b/opentelemetry-client-ocurl.opam @@ -1,6 +1,6 @@ # This file is generated by dune, edit dune-project instead opam-version: "2.0" -version: "0.5" +version: "0.6" synopsis: "Collector client for opentelemetry, using http + ezcurl" maintainer: [ "Simon Cruanes " diff --git a/opentelemetry-cohttp-lwt.opam b/opentelemetry-cohttp-lwt.opam index 5ed49c39..bfd7e822 100644 --- a/opentelemetry-cohttp-lwt.opam +++ b/opentelemetry-cohttp-lwt.opam @@ -1,6 +1,6 @@ # This file is generated by dune, edit dune-project instead opam-version: "2.0" -version: "0.5" +version: "0.6" synopsis: "Opentelemetry tracing for Cohttp HTTP servers" maintainer: [ "Simon Cruanes " diff --git a/opentelemetry-lwt.opam b/opentelemetry-lwt.opam index 6435b9ed..0c02234c 100644 --- a/opentelemetry-lwt.opam +++ b/opentelemetry-lwt.opam @@ -1,6 +1,6 @@ # This file is generated by dune, edit dune-project instead opam-version: "2.0" -version: "0.5" +version: "0.6" synopsis: "Lwt-compatible instrumentation for https://opentelemetry.io" maintainer: [ "Simon Cruanes " diff --git a/opentelemetry.opam b/opentelemetry.opam index 3f67a696..cf4a98f3 100644 --- a/opentelemetry.opam +++ b/opentelemetry.opam @@ -1,6 +1,6 @@ # This file is generated by dune, edit dune-project instead opam-version: "2.0" -version: "0.5" +version: "0.6" synopsis: "Instrumentation for https://opentelemetry.io" maintainer: [ "Simon Cruanes " From eb5b6dffaff6ed951de30d37babd2bd4ef504991 Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Mon, 2 Oct 2023 17:48:55 +0000 Subject: [PATCH 29/40] tests: Add every test-dep to every package --- dune-project | 44 +++++++++++++++++++++++++--- opentelemetry-client-cohttp-lwt.opam | 2 ++ opentelemetry-client-ocurl.opam | 2 ++ opentelemetry-cohttp-lwt.opam | 3 ++ opentelemetry-lwt.opam | 3 ++ opentelemetry.opam | 2 ++ 6 files changed, 52 insertions(+), 4 deletions(-) diff --git a/dune-project b/dune-project index 2c8f2b55..c7d242e6 100644 --- a/dune-project +++ b/dune-project @@ -30,6 +30,14 @@ ambient-context (odoc :with-doc) (alcotest :with-test) + (opentelemetry-client-cohttp-lwt + (and + :with-test + (= :version))) + (opentelemetry-client-ocurl + (and + :with-test + (= :version))) (pbrt (>= 2.3)) (ocaml-lsp-server :with-dev-setup) @@ -61,7 +69,16 @@ (lwt (>= "5.3")) (lwt_ppx - (>= "2.0"))) + (>= "2.0")) + (alcotest :with-test) + (opentelemetry-client-cohttp-lwt + (and + :with-test + (= :version))) + (opentelemetry-client-ocurl + (and + :with-test + (= :version)))) (tags (instrumentation tracing opentelemetry datadog lwt))) @@ -81,7 +98,12 @@ (odoc :with-doc) (ezcurl (>= 0.2.3)) - ocurl) + ocurl + (alcotest :with-test) + (opentelemetry-client-cohttp-lwt + (and + :with-test + (= :version)))) (synopsis "Collector client for opentelemetry, using http + ezcurl")) (package @@ -97,7 +119,16 @@ (lwt (>= "5.3")) (cohttp-lwt - (>= "4.0.0"))) + (>= "4.0.0")) + (alcotest :with-test) + (opentelemetry-client-cohttp-lwt + (and + :with-test + (= :version))) + (opentelemetry-client-ocurl + (and + :with-test + (= :version)))) (synopsis "Opentelemetry tracing for Cohttp HTTP servers")) (package @@ -118,5 +149,10 @@ (lwt_ppx (>= "2.0")) cohttp-lwt - cohttp-lwt-unix) + cohttp-lwt-unix + (alcotest :with-test) + (opentelemetry-client-ocurl + (and + :with-test + (= :version)))) (synopsis "Collector client for opentelemetry, using cohttp + lwt")) diff --git a/opentelemetry-client-cohttp-lwt.opam b/opentelemetry-client-cohttp-lwt.opam index 634ab161..93b11939 100644 --- a/opentelemetry-client-cohttp-lwt.opam +++ b/opentelemetry-client-cohttp-lwt.opam @@ -22,6 +22,8 @@ depends: [ "lwt_ppx" {>= "2.0"} "cohttp-lwt" "cohttp-lwt-unix" + "alcotest" {with-test} + "opentelemetry-client-ocurl" {with-test & = version} ] build: [ ["dune" "subst"] {dev} diff --git a/opentelemetry-client-ocurl.opam b/opentelemetry-client-ocurl.opam index d0ee4fbc..0a32fc67 100644 --- a/opentelemetry-client-ocurl.opam +++ b/opentelemetry-client-ocurl.opam @@ -20,6 +20,8 @@ depends: [ "odoc" {with-doc} "ezcurl" {>= "0.2.3"} "ocurl" + "alcotest" {with-test} + "opentelemetry-client-cohttp-lwt" {with-test & = version} ] build: [ ["dune" "subst"] {dev} diff --git a/opentelemetry-cohttp-lwt.opam b/opentelemetry-cohttp-lwt.opam index bfd7e822..94ec245d 100644 --- a/opentelemetry-cohttp-lwt.opam +++ b/opentelemetry-cohttp-lwt.opam @@ -19,6 +19,9 @@ depends: [ "odoc" {with-doc} "lwt" {>= "5.3"} "cohttp-lwt" {>= "4.0.0"} + "alcotest" {with-test} + "opentelemetry-client-cohttp-lwt" {with-test & = version} + "opentelemetry-client-ocurl" {with-test & = version} ] build: [ ["dune" "subst"] {dev} diff --git a/opentelemetry-lwt.opam b/opentelemetry-lwt.opam index 0c02234c..ff13e0d6 100644 --- a/opentelemetry-lwt.opam +++ b/opentelemetry-lwt.opam @@ -21,6 +21,9 @@ depends: [ "odoc" {with-doc} "lwt" {>= "5.3"} "lwt_ppx" {>= "2.0"} + "alcotest" {with-test} + "opentelemetry-client-cohttp-lwt" {with-test & = version} + "opentelemetry-client-ocurl" {with-test & = version} ] build: [ ["dune" "subst"] {dev} diff --git a/opentelemetry.opam b/opentelemetry.opam index cf4a98f3..cfc11eeb 100644 --- a/opentelemetry.opam +++ b/opentelemetry.opam @@ -19,6 +19,8 @@ depends: [ "ambient-context" "odoc" {with-doc} "alcotest" {with-test} + "opentelemetry-client-cohttp-lwt" {with-test & = version} + "opentelemetry-client-ocurl" {with-test & = version} "pbrt" {>= "2.3"} "ocaml-lsp-server" {with-dev-setup} "ocamlformat" {with-dev-setup & >= "0.24" & < "0.25"} From 6362bc55eff6198fe0b4e5bdc13cbc439666e0c3 Mon Sep 17 00:00:00 2001 From: Elliott Cable Date: Mon, 2 Oct 2023 17:59:28 +0000 Subject: [PATCH 30/40] trace-collector: Use Trace_core instead of Trace for OCaml v5 --- src/trace/dune | 2 +- src/trace/opentelemetry_trace.ml | 6 +++--- src/trace/opentelemetry_trace.mli | 36 ++++++++++++++++--------------- 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/src/trace/dune b/src/trace/dune index 6207563d..c0ec819c 100644 --- a/src/trace/dune +++ b/src/trace/dune @@ -3,4 +3,4 @@ (public_name opentelemetry.trace) (synopsis "Use opentelemetry as a collector for trace") (optional) - (libraries ambient-context ambient-context.tls trace opentelemetry)) + (libraries ambient-context ambient-context.tls trace.core opentelemetry)) diff --git a/src/trace/opentelemetry_trace.ml b/src/trace/opentelemetry_trace.ml index 892fdb9f..1d727a57 100644 --- a/src/trace/opentelemetry_trace.ml +++ b/src/trace/opentelemetry_trace.ml @@ -1,5 +1,5 @@ module Otel = Opentelemetry -module Otrace = Trace (* ocaml-trace *) +module Otrace = Trace_core (* ocaml-trace *) module TLS = Ambient_context_tls.TLS module Well_known = struct @@ -260,9 +260,9 @@ module Internal = struct end end -let collector () : Trace.collector = (module Internal.M) +let collector () : Otrace.collector = (module Internal.M) -let setup () = Trace.setup_collector @@ collector () +let setup () = Otrace.setup_collector @@ collector () let setup_with_otel_backend b : unit = Otel.Collector.set_backend b; diff --git a/src/trace/opentelemetry_trace.mli b/src/trace/opentelemetry_trace.mli index fd3aa91b..c7bd6eb2 100644 --- a/src/trace/opentelemetry_trace.mli +++ b/src/trace/opentelemetry_trace.mli @@ -1,5 +1,5 @@ module Otel := Opentelemetry -module Otrace := Trace +module Otrace := Trace_core module TLS := Ambient_context_tls.TLS (** [opentelemetry.trace] implements a {!Trace_core.Collector} for @@ -24,13 +24,14 @@ module TLS := Ambient_context_tls.TLS you do not need to depend on [opentelemetry.trace] to use them.) - If a key of exactly ["otrace.spankind"] is included in the - {!Trace.user_data} passed to [with_span] et al., it will be used as the - {!Opentelemetry.Span.kind} of the emitted span. (See + {!Trace_core.user_data} passed to [with_span] et al., it will be used as + the {!Opentelemetry.Span.kind} of the emitted span. (See {!Internal.spankind_of_string} for the list of supported values.) {[ocaml let describe () = [ Opentelemetry_trace.(spankind_key, client) ] in - Trace.with_span ~__FILE__ ~__LINE__ ~data:describe "my-span" @@ fun _ -> + Trace_core.with_span ~__FILE__ ~__LINE__ ~data:describe "my-span" + @@ fun _ -> (* ... *) ]} *) @@ -41,7 +42,7 @@ val setup : unit -> unit val setup_with_otel_backend : Opentelemetry.Collector.backend -> unit (** Same as {!setup}, but also install the given backend as OTEL backend *) -val collector : unit -> Trace.collector +val collector : unit -> Trace_core.collector (** Make a Trace collector that uses the OTEL backend to send spans and logs *) (** Static references for well-known identifiers; see {!label-wellknown}. *) @@ -77,7 +78,7 @@ module Internal : sig (Otrace.span -> 'a) -> 'a (** Implements {!Trace_core.Collector.S.with_span}, with the OpenTelemetry - collector as the backend. Invoked via {!Trace.with_span}. + collector as the backend. Invoked via {!Trace_core.with_span}. Notably, this has the same implicit-scope semantics as {!Opentelemetry.Trace.with_}, and requires configuration of @@ -94,22 +95,23 @@ module Internal : sig data:(string * Otrace.user_data) list -> string (* span name *) -> Otrace.explicit_span - (** Implements {!Trace_core.Collector.S.enter_manual_span}, with the OpenTelemetry - collector as the backend. Invoked at {!Trace.enter_manual_toplevel_span} - and {!Trace.enter_manual_sub_span}; requires an eventual call to - {!Trace.exit_manual_span}. + (** Implements {!Trace_core.Collector.S.enter_manual_span}, with the + OpenTelemetry collector as the backend. Invoked at + {!Trace_core.enter_manual_toplevel_span} and + {!Trace_core.enter_manual_sub_span}; requires an eventual call to + {!Trace_core.exit_manual_span}. These 'manual span' functions {e do not} implement the same implicit- scope semantics of {!with_span}; and thus don't need to wrap a single stack-frame / callback; you can freely enter a span at any point, store - the returned {!Trace.explicit_span}, and exit it at any later point with - {!Trace.exit_manual_span}. + the returned {!Trace_core.explicit_span}, and exit it at any later point + with {!Trace_core.exit_manual_span}. However, for that same reason, they also cannot update the {!Ambient_context} — that is, when you invoke the various [manual] functions, if you then invoke other functions that use - {!Trace.with_span}, those callees {e will not} see the span you entered - manually as their [parent]. + {!Trace_core.with_span}, those callees {e will not} see the span you + entered manually as their [parent]. Generally, the best practice is to only use these [manual] functions at the 'leaves' of your callstack: that is, don't invoke user callbacks @@ -120,9 +122,9 @@ module Internal : sig val exit_manual_span : Otrace.explicit_span -> unit (** Implements {!Trace_core.Collector.S.exit_manual_span}, with the OpenTelemetry collector as the backend. Invoked at - {!Trace.exit_manual_span}. Expects the [explicit_span] returned from an - earlier call to {!Trace.enter_manual_toplevel_span} or - {!Trace.enter_manual_sub_span}. + {!Trace_core.exit_manual_span}. Expects the [explicit_span] returned + from an earlier call to {!Trace_core.enter_manual_toplevel_span} or + {!Trace_core.enter_manual_sub_span}. (See the notes at {!enter_manual_span} about {!Ambient_context}.) *) From b826f859774ba6598953ebdadf4951350599a68d Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Tue, 7 Nov 2023 15:33:05 -0500 Subject: [PATCH 31/40] move protobuf code to opentelemetry.proto --- src/common_pb.ml | 224 ------ src/common_pb.mli | 37 - src/common_pp.ml | 39 - src/common_pp.mli | 19 - src/common_types.ml | 65 -- src/common_types.mli | 68 -- src/core/dune | 7 + src/{ => core}/lock.ml | 0 src/{ => core}/lock.mli | 0 src/{ => core}/opentelemetry.ml | 0 src/{ => core}/rand_bytes.ml | 0 src/{ => core}/rand_bytes.mli | 0 src/dune | 125 --- src/logs_pb.ml | 348 --------- src/logs_pb.mli | 43 -- src/logs_pp.ml | 71 -- src/logs_pp.mli | 22 - src/logs_service_pb.ml | 112 --- src/logs_service_pb.mli | 25 - src/logs_service_pp.ml | 20 - src/logs_service_pp.mli | 13 - src/logs_service_types.ml | 35 - src/logs_service_types.mli | 40 - src/logs_types.ml | 116 --- src/logs_types.mli | 111 --- src/metrics_pb.ml | 1282 ------------------------------- src/metrics_pb.mli | 133 ---- src/metrics_pp.ml | 177 ----- src/metrics_pp.mli | 67 -- src/metrics_service_pb.ml | 112 --- src/metrics_service_pb.mli | 25 - src/metrics_service_pp.ml | 20 - src/metrics_service_pp.mli | 13 - src/metrics_service_types.ml | 35 - src/metrics_service_types.mli | 40 - src/metrics_types.ml | 349 --------- src/metrics_types.mli | 309 -------- src/resource_pb.ml | 46 -- src/resource_pb.mli | 13 - src/resource_pp.ml | 8 - src/resource_pp.mli | 7 - src/resource_types.ml | 15 - src/resource_types.mli | 20 - src/status.proto | 10 - src/status_pb.ml | 56 -- src/status_pb.mli | 13 - src/status_pp.ml | 9 - src/status_pp.mli | 7 - src/status_types.ml | 18 - src/status_types.mli | 22 - src/trace_pb.ml | 547 ------------- src/trace_pb.mli | 61 -- src/trace_pp.ml | 84 -- src/trace_pp.mli | 31 - src/trace_service_pb.ml | 112 --- src/trace_service_pb.mli | 25 - src/trace_service_pp.ml | 20 - src/trace_service_pp.mli | 13 - src/trace_service_types.ml | 35 - src/trace_service_types.mli | 40 - src/trace_types.ml | 167 ---- src/trace_types.mli | 149 ---- 62 files changed, 7 insertions(+), 5623 deletions(-) delete mode 100644 src/common_pb.ml delete mode 100644 src/common_pb.mli delete mode 100644 src/common_pp.ml delete mode 100644 src/common_pp.mli delete mode 100644 src/common_types.ml delete mode 100644 src/common_types.mli create mode 100644 src/core/dune rename src/{ => core}/lock.ml (100%) rename src/{ => core}/lock.mli (100%) rename src/{ => core}/opentelemetry.ml (100%) rename src/{ => core}/rand_bytes.ml (100%) rename src/{ => core}/rand_bytes.mli (100%) delete mode 100644 src/dune delete mode 100644 src/logs_pb.ml delete mode 100644 src/logs_pb.mli delete mode 100644 src/logs_pp.ml delete mode 100644 src/logs_pp.mli delete mode 100644 src/logs_service_pb.ml delete mode 100644 src/logs_service_pb.mli delete mode 100644 src/logs_service_pp.ml delete mode 100644 src/logs_service_pp.mli delete mode 100644 src/logs_service_types.ml delete mode 100644 src/logs_service_types.mli delete mode 100644 src/logs_types.ml delete mode 100644 src/logs_types.mli delete mode 100644 src/metrics_pb.ml delete mode 100644 src/metrics_pb.mli delete mode 100644 src/metrics_pp.ml delete mode 100644 src/metrics_pp.mli delete mode 100644 src/metrics_service_pb.ml delete mode 100644 src/metrics_service_pb.mli delete mode 100644 src/metrics_service_pp.ml delete mode 100644 src/metrics_service_pp.mli delete mode 100644 src/metrics_service_types.ml delete mode 100644 src/metrics_service_types.mli delete mode 100644 src/metrics_types.ml delete mode 100644 src/metrics_types.mli delete mode 100644 src/resource_pb.ml delete mode 100644 src/resource_pb.mli delete mode 100644 src/resource_pp.ml delete mode 100644 src/resource_pp.mli delete mode 100644 src/resource_types.ml delete mode 100644 src/resource_types.mli delete mode 100644 src/status.proto delete mode 100644 src/status_pb.ml delete mode 100644 src/status_pb.mli delete mode 100644 src/status_pp.ml delete mode 100644 src/status_pp.mli delete mode 100644 src/status_types.ml delete mode 100644 src/status_types.mli delete mode 100644 src/trace_pb.ml delete mode 100644 src/trace_pb.mli delete mode 100644 src/trace_pp.ml delete mode 100644 src/trace_pp.mli delete mode 100644 src/trace_service_pb.ml delete mode 100644 src/trace_service_pb.mli delete mode 100644 src/trace_service_pp.ml delete mode 100644 src/trace_service_pp.mli delete mode 100644 src/trace_service_types.ml delete mode 100644 src/trace_service_types.mli delete mode 100644 src/trace_types.ml delete mode 100644 src/trace_types.mli diff --git a/src/common_pb.ml b/src/common_pb.ml deleted file mode 100644 index 07425f0f..00000000 --- a/src/common_pb.ml +++ /dev/null @@ -1,224 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - -type array_value_mutable = { - mutable values : Common_types.any_value list; -} - -let default_array_value_mutable () : array_value_mutable = { - values = []; -} - -type key_value_list_mutable = { - mutable values : Common_types.key_value list; -} - -let default_key_value_list_mutable () : key_value_list_mutable = { - values = []; -} - -type key_value_mutable = { - mutable key : string; - mutable value : Common_types.any_value option; -} - -let default_key_value_mutable () : key_value_mutable = { - key = ""; - value = None; -} - -type instrumentation_scope_mutable = { - mutable name : string; - mutable version : string; - mutable attributes : Common_types.key_value list; - mutable dropped_attributes_count : int32; -} - -let default_instrumentation_scope_mutable () : instrumentation_scope_mutable = { - name = ""; - version = ""; - attributes = []; - dropped_attributes_count = 0l; -} - - -let rec decode_any_value d = - let rec loop () = - let ret:Common_types.any_value = match Pbrt.Decoder.key d with - | None -> Pbrt.Decoder.malformed_variant "any_value" - | Some (1, _) -> (Common_types.String_value (Pbrt.Decoder.string d) : Common_types.any_value) - | Some (2, _) -> (Common_types.Bool_value (Pbrt.Decoder.bool d) : Common_types.any_value) - | Some (3, _) -> (Common_types.Int_value (Pbrt.Decoder.int64_as_varint d) : Common_types.any_value) - | Some (4, _) -> (Common_types.Double_value (Pbrt.Decoder.float_as_bits64 d) : Common_types.any_value) - | Some (5, _) -> (Common_types.Array_value (decode_array_value (Pbrt.Decoder.nested d)) : Common_types.any_value) - | Some (6, _) -> (Common_types.Kvlist_value (decode_key_value_list (Pbrt.Decoder.nested d)) : Common_types.any_value) - | Some (7, _) -> (Common_types.Bytes_value (Pbrt.Decoder.bytes d) : Common_types.any_value) - | Some (n, payload_kind) -> ( - Pbrt.Decoder.skip d payload_kind; - loop () - ) - in - ret - in - loop () - -and decode_array_value d = - let v = default_array_value_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.values <- List.rev v.values; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.values <- (decode_any_value (Pbrt.Decoder.nested d)) :: v.values; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(array_value), field(1)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Common_types.values = v.values; - } : Common_types.array_value) - -and decode_key_value_list d = - let v = default_key_value_list_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.values <- List.rev v.values; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.values <- (decode_key_value (Pbrt.Decoder.nested d)) :: v.values; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(key_value_list), field(1)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Common_types.values = v.values; - } : Common_types.key_value_list) - -and decode_key_value d = - let v = default_key_value_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.key <- Pbrt.Decoder.string d; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(key_value), field(1)" pk - | Some (2, Pbrt.Bytes) -> begin - v.value <- Some (decode_any_value (Pbrt.Decoder.nested d)); - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(key_value), field(2)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Common_types.key = v.key; - Common_types.value = v.value; - } : Common_types.key_value) - -let rec decode_instrumentation_scope d = - let v = default_instrumentation_scope_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.attributes <- List.rev v.attributes; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.name <- Pbrt.Decoder.string d; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(instrumentation_scope), field(1)" pk - | Some (2, Pbrt.Bytes) -> begin - v.version <- Pbrt.Decoder.string d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(instrumentation_scope), field(2)" pk - | Some (3, Pbrt.Bytes) -> begin - v.attributes <- (decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(instrumentation_scope), field(3)" pk - | Some (4, Pbrt.Varint) -> begin - v.dropped_attributes_count <- Pbrt.Decoder.int32_as_varint d; - end - | Some (4, pk) -> - Pbrt.Decoder.unexpected_payload "Message(instrumentation_scope), field(4)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Common_types.name = v.name; - Common_types.version = v.version; - Common_types.attributes = v.attributes; - Common_types.dropped_attributes_count = v.dropped_attributes_count; - } : Common_types.instrumentation_scope) - -let rec encode_any_value (v:Common_types.any_value) encoder = - begin match v with - | Common_types.String_value x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.string x encoder; - | Common_types.Bool_value x -> - Pbrt.Encoder.key (2, Pbrt.Varint) encoder; - Pbrt.Encoder.bool x encoder; - | Common_types.Int_value x -> - Pbrt.Encoder.key (3, Pbrt.Varint) encoder; - Pbrt.Encoder.int64_as_varint x encoder; - | Common_types.Double_value x -> - Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 x encoder; - | Common_types.Array_value x -> - Pbrt.Encoder.key (5, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_array_value x) encoder; - | Common_types.Kvlist_value x -> - Pbrt.Encoder.key (6, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_key_value_list x) encoder; - | Common_types.Bytes_value x -> - Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; - Pbrt.Encoder.bytes x encoder; - end - -and encode_array_value (v:Common_types.array_value) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_any_value x) encoder; - ) v.Common_types.values; - () - -and encode_key_value_list (v:Common_types.key_value_list) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_key_value x) encoder; - ) v.Common_types.values; - () - -and encode_key_value (v:Common_types.key_value) encoder = - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.string v.Common_types.key encoder; - begin match v.Common_types.value with - | Some x -> - Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_any_value x) encoder; - | None -> (); - end; - () - -let rec encode_instrumentation_scope (v:Common_types.instrumentation_scope) encoder = - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.string v.Common_types.name encoder; - Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; - Pbrt.Encoder.string v.Common_types.version encoder; - List.iter (fun x -> - Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_key_value x) encoder; - ) v.Common_types.attributes; - Pbrt.Encoder.key (4, Pbrt.Varint) encoder; - Pbrt.Encoder.int32_as_varint v.Common_types.dropped_attributes_count encoder; - () diff --git a/src/common_pb.mli b/src/common_pb.mli deleted file mode 100644 index 7ece8615..00000000 --- a/src/common_pb.mli +++ /dev/null @@ -1,37 +0,0 @@ -(** common.proto Binary Encoding *) - - -(** {2 Protobuf Encoding} *) - -val encode_any_value : Common_types.any_value -> Pbrt.Encoder.t -> unit -(** [encode_any_value v encoder] encodes [v] with the given [encoder] *) - -val encode_array_value : Common_types.array_value -> Pbrt.Encoder.t -> unit -(** [encode_array_value v encoder] encodes [v] with the given [encoder] *) - -val encode_key_value_list : Common_types.key_value_list -> Pbrt.Encoder.t -> unit -(** [encode_key_value_list v encoder] encodes [v] with the given [encoder] *) - -val encode_key_value : Common_types.key_value -> Pbrt.Encoder.t -> unit -(** [encode_key_value v encoder] encodes [v] with the given [encoder] *) - -val encode_instrumentation_scope : Common_types.instrumentation_scope -> Pbrt.Encoder.t -> unit -(** [encode_instrumentation_scope v encoder] encodes [v] with the given [encoder] *) - - -(** {2 Protobuf Decoding} *) - -val decode_any_value : Pbrt.Decoder.t -> Common_types.any_value -(** [decode_any_value decoder] decodes a [any_value] value from [decoder] *) - -val decode_array_value : Pbrt.Decoder.t -> Common_types.array_value -(** [decode_array_value decoder] decodes a [array_value] value from [decoder] *) - -val decode_key_value_list : Pbrt.Decoder.t -> Common_types.key_value_list -(** [decode_key_value_list decoder] decodes a [key_value_list] value from [decoder] *) - -val decode_key_value : Pbrt.Decoder.t -> Common_types.key_value -(** [decode_key_value decoder] decodes a [key_value] value from [decoder] *) - -val decode_instrumentation_scope : Pbrt.Decoder.t -> Common_types.instrumentation_scope -(** [decode_instrumentation_scope decoder] decodes a [instrumentation_scope] value from [decoder] *) diff --git a/src/common_pp.ml b/src/common_pp.ml deleted file mode 100644 index e809bafc..00000000 --- a/src/common_pp.ml +++ /dev/null @@ -1,39 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - -let rec pp_any_value fmt (v:Common_types.any_value) = - match v with - | Common_types.String_value x -> Format.fprintf fmt "@[String_value(@,%a)@]" Pbrt.Pp.pp_string x - | Common_types.Bool_value x -> Format.fprintf fmt "@[Bool_value(@,%a)@]" Pbrt.Pp.pp_bool x - | Common_types.Int_value x -> Format.fprintf fmt "@[Int_value(@,%a)@]" Pbrt.Pp.pp_int64 x - | Common_types.Double_value x -> Format.fprintf fmt "@[Double_value(@,%a)@]" Pbrt.Pp.pp_float x - | Common_types.Array_value x -> Format.fprintf fmt "@[Array_value(@,%a)@]" pp_array_value x - | Common_types.Kvlist_value x -> Format.fprintf fmt "@[Kvlist_value(@,%a)@]" pp_key_value_list x - | Common_types.Bytes_value x -> Format.fprintf fmt "@[Bytes_value(@,%a)@]" Pbrt.Pp.pp_bytes x - -and pp_array_value fmt (v:Common_types.array_value) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "values" (Pbrt.Pp.pp_list pp_any_value) fmt v.Common_types.values; - in - Pbrt.Pp.pp_brk pp_i fmt () - -and pp_key_value_list fmt (v:Common_types.key_value_list) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "values" (Pbrt.Pp.pp_list pp_key_value) fmt v.Common_types.values; - in - Pbrt.Pp.pp_brk pp_i fmt () - -and pp_key_value fmt (v:Common_types.key_value) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "key" Pbrt.Pp.pp_string fmt v.Common_types.key; - Pbrt.Pp.pp_record_field ~first:false "value" (Pbrt.Pp.pp_option pp_any_value) fmt v.Common_types.value; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_instrumentation_scope fmt (v:Common_types.instrumentation_scope) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "name" Pbrt.Pp.pp_string fmt v.Common_types.name; - Pbrt.Pp.pp_record_field ~first:false "version" Pbrt.Pp.pp_string fmt v.Common_types.version; - Pbrt.Pp.pp_record_field ~first:false "attributes" (Pbrt.Pp.pp_list pp_key_value) fmt v.Common_types.attributes; - Pbrt.Pp.pp_record_field ~first:false "dropped_attributes_count" Pbrt.Pp.pp_int32 fmt v.Common_types.dropped_attributes_count; - in - Pbrt.Pp.pp_brk pp_i fmt () diff --git a/src/common_pp.mli b/src/common_pp.mli deleted file mode 100644 index 4c2fc14d..00000000 --- a/src/common_pp.mli +++ /dev/null @@ -1,19 +0,0 @@ -(** common.proto Pretty Printing *) - - -(** {2 Formatters} *) - -val pp_any_value : Format.formatter -> Common_types.any_value -> unit -(** [pp_any_value v] formats v *) - -val pp_array_value : Format.formatter -> Common_types.array_value -> unit -(** [pp_array_value v] formats v *) - -val pp_key_value_list : Format.formatter -> Common_types.key_value_list -> unit -(** [pp_key_value_list v] formats v *) - -val pp_key_value : Format.formatter -> Common_types.key_value -> unit -(** [pp_key_value v] formats v *) - -val pp_instrumentation_scope : Format.formatter -> Common_types.instrumentation_scope -> unit -(** [pp_instrumentation_scope v] formats v *) diff --git a/src/common_types.ml b/src/common_types.ml deleted file mode 100644 index bddc9354..00000000 --- a/src/common_types.ml +++ /dev/null @@ -1,65 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - - -type any_value = - | String_value of string - | Bool_value of bool - | Int_value of int64 - | Double_value of float - | Array_value of array_value - | Kvlist_value of key_value_list - | Bytes_value of bytes - -and array_value = { - values : any_value list; -} - -and key_value_list = { - values : key_value list; -} - -and key_value = { - key : string; - value : any_value option; -} - -type instrumentation_scope = { - name : string; - version : string; - attributes : key_value list; - dropped_attributes_count : int32; -} - -let rec default_any_value () : any_value = String_value ("") - -and default_array_value - ?values:((values:any_value list) = []) - () : array_value = { - values; -} - -and default_key_value_list - ?values:((values:key_value list) = []) - () : key_value_list = { - values; -} - -and default_key_value - ?key:((key:string) = "") - ?value:((value:any_value option) = None) - () : key_value = { - key; - value; -} - -let rec default_instrumentation_scope - ?name:((name:string) = "") - ?version:((version:string) = "") - ?attributes:((attributes:key_value list) = []) - ?dropped_attributes_count:((dropped_attributes_count:int32) = 0l) - () : instrumentation_scope = { - name; - version; - attributes; - dropped_attributes_count; -} diff --git a/src/common_types.mli b/src/common_types.mli deleted file mode 100644 index 8427638a..00000000 --- a/src/common_types.mli +++ /dev/null @@ -1,68 +0,0 @@ -(** common.proto Types *) - - - -(** {2 Types} *) - -type any_value = - | String_value of string - | Bool_value of bool - | Int_value of int64 - | Double_value of float - | Array_value of array_value - | Kvlist_value of key_value_list - | Bytes_value of bytes - -and array_value = { - values : any_value list; -} - -and key_value_list = { - values : key_value list; -} - -and key_value = { - key : string; - value : any_value option; -} - -type instrumentation_scope = { - name : string; - version : string; - attributes : key_value list; - dropped_attributes_count : int32; -} - - -(** {2 Default values} *) - -val default_any_value : unit -> any_value -(** [default_any_value ()] is the default value for type [any_value] *) - -val default_array_value : - ?values:any_value list -> - unit -> - array_value -(** [default_array_value ()] is the default value for type [array_value] *) - -val default_key_value_list : - ?values:key_value list -> - unit -> - key_value_list -(** [default_key_value_list ()] is the default value for type [key_value_list] *) - -val default_key_value : - ?key:string -> - ?value:any_value option -> - unit -> - key_value -(** [default_key_value ()] is the default value for type [key_value] *) - -val default_instrumentation_scope : - ?name:string -> - ?version:string -> - ?attributes:key_value list -> - ?dropped_attributes_count:int32 -> - unit -> - instrumentation_scope -(** [default_instrumentation_scope ()] is the default value for type [instrumentation_scope] *) diff --git a/src/core/dune b/src/core/dune new file mode 100644 index 00000000..f3dcfa4e --- /dev/null +++ b/src/core/dune @@ -0,0 +1,7 @@ +(library + (name opentelemetry) + (synopsis "API for opentelemetry instrumentation") + (flags :standard -warn-error -a+8 -open Opentelemetry_proto) + (libraries opentelemetry.proto ambient-context ptime ptime.clock.os pbrt threads + opentelemetry.atomic) + (public_name opentelemetry)) diff --git a/src/lock.ml b/src/core/lock.ml similarity index 100% rename from src/lock.ml rename to src/core/lock.ml diff --git a/src/lock.mli b/src/core/lock.mli similarity index 100% rename from src/lock.mli rename to src/core/lock.mli diff --git a/src/opentelemetry.ml b/src/core/opentelemetry.ml similarity index 100% rename from src/opentelemetry.ml rename to src/core/opentelemetry.ml diff --git a/src/rand_bytes.ml b/src/core/rand_bytes.ml similarity index 100% rename from src/rand_bytes.ml rename to src/core/rand_bytes.ml diff --git a/src/rand_bytes.mli b/src/core/rand_bytes.mli similarity index 100% rename from src/rand_bytes.mli rename to src/core/rand_bytes.mli diff --git a/src/dune b/src/dune deleted file mode 100644 index f91ee2aa..00000000 --- a/src/dune +++ /dev/null @@ -1,125 +0,0 @@ -(library - (name opentelemetry) - (synopsis "API for opentelemetry instrumentation") - (flags :standard -warn-error -a+8) - (libraries ambient-context ptime ptime.clock.os pbrt threads - opentelemetry.atomic) - (public_name opentelemetry)) - -; ### protobuf rules ### - -(rule - (alias lint) - (mode promote) - (targets status_types.ml status_types.mli status_pb.ml status_pb.mli - status_pp.ml status_pp.mli) - (deps - (:file status.proto) - (source_tree %{project_root}/vendor/opentelemetry-proto/)) - (action - (run ocaml-protoc %{file} -ml_out . -pp -binary))) - -(rule - (alias lint) - (mode promote) - (targets common_types.ml common_types.mli common_pb.ml common_pb.mli - common_pp.ml common_pp.mli) - (deps - (:file - %{project_root}/vendor/opentelemetry-proto/opentelemetry/proto/common/v1/common.proto) - (source_tree %{project_root}/vendor/opentelemetry-proto/)) - (action - (run ocaml-protoc %{file} -I %{project_root}/vendor/opentelemetry-proto/ - -ml_out . -pp -binary))) - -(rule - (alias lint) - (mode promote) - (targets resource_types.ml resource_types.mli resource_pb.ml resource_pb.mli - resource_pp.ml resource_pp.mli) - (deps - (:file - %{project_root}/vendor/opentelemetry-proto/opentelemetry/proto/resource/v1/resource.proto) - (source_tree %{project_root}/vendor/opentelemetry-proto/)) - (action - (run ocaml-protoc %{file} -I %{project_root}/vendor/opentelemetry-proto/ - -ml_out . -pp -binary))) - -(rule - (alias lint) - (mode promote) - (targets trace_types.ml trace_types.mli trace_pb.ml trace_pb.mli trace_pp.ml - trace_pp.mli) - (deps - (:file - %{project_root}/vendor/opentelemetry-proto/opentelemetry/proto/trace/v1/trace.proto) - (source_tree %{project_root}/vendor/opentelemetry-proto/)) - (action - (run ocaml-protoc %{file} -I %{project_root}/vendor/opentelemetry-proto/ - -ml_out . -pp -binary))) - -(rule - (alias lint) - (mode promote) - (targets metrics_types.ml metrics_types.mli metrics_pb.ml metrics_pb.mli - metrics_pp.ml metrics_pp.mli) - (deps - (:file - %{project_root}/vendor/opentelemetry-proto/opentelemetry/proto/metrics/v1/metrics.proto) - (source_tree %{project_root}/vendor/opentelemetry-proto/)) - (action - (run ocaml-protoc %{file} -I %{project_root}/vendor/opentelemetry-proto/ - -ml_out . -pp -binary))) - -(rule - (alias lint) - (mode promote) - (targets logs_types.ml logs_types.mli logs_pb.ml logs_pb.mli logs_pp.ml - logs_pp.mli) - (deps - (:file - %{project_root}/vendor/opentelemetry-proto/opentelemetry/proto/logs/v1/logs.proto) - (source_tree %{project_root}/vendor/opentelemetry-proto/)) - (action - (run ocaml-protoc %{file} -I %{project_root}/vendor/opentelemetry-proto/ - -ml_out . -pp -binary))) - -(rule - (alias lint) - (mode promote) - (targets metrics_service_types.ml metrics_service_types.mli - metrics_service_pp.ml metrics_service_pp.mli metrics_service_pb.ml - metrics_service_pb.mli) - (deps - (:file - %{project_root}/vendor/opentelemetry-proto/opentelemetry/proto/collector/metrics/v1/metrics_service.proto) - (source_tree %{project_root}/vendor/opentelemetry-proto/)) - (action - (run ocaml-protoc %{file} -I %{project_root}/vendor/opentelemetry-proto/ - -ml_out . -pp -binary))) - -(rule - (alias lint) - (mode promote) - (targets trace_service_types.ml trace_service_types.mli trace_service_pp.ml - trace_service_pp.mli trace_service_pb.ml trace_service_pb.mli) - (deps - (:file - %{project_root}/vendor/opentelemetry-proto/opentelemetry/proto/collector/trace/v1/trace_service.proto) - (source_tree %{project_root}/vendor/opentelemetry-proto/)) - (action - (run ocaml-protoc %{file} -I %{project_root}/vendor/opentelemetry-proto/ - -ml_out . -pp -binary))) - -(rule - (alias lint) - (mode promote) - (targets logs_service_types.ml logs_service_types.mli logs_service_pp.ml - logs_service_pp.mli logs_service_pb.ml logs_service_pb.mli) - (deps - (:file - %{project_root}/vendor/opentelemetry-proto/opentelemetry/proto/collector/logs/v1/logs_service.proto) - (source_tree %{project_root}/vendor/opentelemetry-proto/)) - (action - (run ocaml-protoc %{file} -I %{project_root}/vendor/opentelemetry-proto/ - -ml_out . -pp -binary))) diff --git a/src/logs_pb.ml b/src/logs_pb.ml deleted file mode 100644 index 2ad391c5..00000000 --- a/src/logs_pb.ml +++ /dev/null @@ -1,348 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - -type log_record_mutable = { - mutable time_unix_nano : int64; - mutable observed_time_unix_nano : int64; - mutable severity_number : Logs_types.severity_number; - mutable severity_text : string; - mutable body : Common_types.any_value option; - mutable attributes : Common_types.key_value list; - mutable dropped_attributes_count : int32; - mutable flags : int32; - mutable trace_id : bytes; - mutable span_id : bytes; -} - -let default_log_record_mutable () : log_record_mutable = { - time_unix_nano = 0L; - observed_time_unix_nano = 0L; - severity_number = Logs_types.default_severity_number (); - severity_text = ""; - body = None; - attributes = []; - dropped_attributes_count = 0l; - flags = 0l; - trace_id = Bytes.create 0; - span_id = Bytes.create 0; -} - -type scope_logs_mutable = { - mutable scope : Common_types.instrumentation_scope option; - mutable log_records : Logs_types.log_record list; - mutable schema_url : string; -} - -let default_scope_logs_mutable () : scope_logs_mutable = { - scope = None; - log_records = []; - schema_url = ""; -} - -type resource_logs_mutable = { - mutable resource : Resource_types.resource option; - mutable scope_logs : Logs_types.scope_logs list; - mutable schema_url : string; -} - -let default_resource_logs_mutable () : resource_logs_mutable = { - resource = None; - scope_logs = []; - schema_url = ""; -} - -type logs_data_mutable = { - mutable resource_logs : Logs_types.resource_logs list; -} - -let default_logs_data_mutable () : logs_data_mutable = { - resource_logs = []; -} - - -let rec decode_severity_number d = - match Pbrt.Decoder.int_as_varint d with - | 0 -> (Logs_types.Severity_number_unspecified:Logs_types.severity_number) - | 1 -> (Logs_types.Severity_number_trace:Logs_types.severity_number) - | 2 -> (Logs_types.Severity_number_trace2:Logs_types.severity_number) - | 3 -> (Logs_types.Severity_number_trace3:Logs_types.severity_number) - | 4 -> (Logs_types.Severity_number_trace4:Logs_types.severity_number) - | 5 -> (Logs_types.Severity_number_debug:Logs_types.severity_number) - | 6 -> (Logs_types.Severity_number_debug2:Logs_types.severity_number) - | 7 -> (Logs_types.Severity_number_debug3:Logs_types.severity_number) - | 8 -> (Logs_types.Severity_number_debug4:Logs_types.severity_number) - | 9 -> (Logs_types.Severity_number_info:Logs_types.severity_number) - | 10 -> (Logs_types.Severity_number_info2:Logs_types.severity_number) - | 11 -> (Logs_types.Severity_number_info3:Logs_types.severity_number) - | 12 -> (Logs_types.Severity_number_info4:Logs_types.severity_number) - | 13 -> (Logs_types.Severity_number_warn:Logs_types.severity_number) - | 14 -> (Logs_types.Severity_number_warn2:Logs_types.severity_number) - | 15 -> (Logs_types.Severity_number_warn3:Logs_types.severity_number) - | 16 -> (Logs_types.Severity_number_warn4:Logs_types.severity_number) - | 17 -> (Logs_types.Severity_number_error:Logs_types.severity_number) - | 18 -> (Logs_types.Severity_number_error2:Logs_types.severity_number) - | 19 -> (Logs_types.Severity_number_error3:Logs_types.severity_number) - | 20 -> (Logs_types.Severity_number_error4:Logs_types.severity_number) - | 21 -> (Logs_types.Severity_number_fatal:Logs_types.severity_number) - | 22 -> (Logs_types.Severity_number_fatal2:Logs_types.severity_number) - | 23 -> (Logs_types.Severity_number_fatal3:Logs_types.severity_number) - | 24 -> (Logs_types.Severity_number_fatal4:Logs_types.severity_number) - | _ -> Pbrt.Decoder.malformed_variant "severity_number" - -let rec decode_log_record d = - let v = default_log_record_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.attributes <- List.rev v.attributes; - ); continue__ := false - | Some (1, Pbrt.Bits64) -> begin - v.time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(log_record), field(1)" pk - | Some (11, Pbrt.Bits64) -> begin - v.observed_time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; - end - | Some (11, pk) -> - Pbrt.Decoder.unexpected_payload "Message(log_record), field(11)" pk - | Some (2, Pbrt.Varint) -> begin - v.severity_number <- decode_severity_number d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(log_record), field(2)" pk - | Some (3, Pbrt.Bytes) -> begin - v.severity_text <- Pbrt.Decoder.string d; - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(log_record), field(3)" pk - | Some (5, Pbrt.Bytes) -> begin - v.body <- Some (Common_pb.decode_any_value (Pbrt.Decoder.nested d)); - end - | Some (5, pk) -> - Pbrt.Decoder.unexpected_payload "Message(log_record), field(5)" pk - | Some (6, Pbrt.Bytes) -> begin - v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; - end - | Some (6, pk) -> - Pbrt.Decoder.unexpected_payload "Message(log_record), field(6)" pk - | Some (7, Pbrt.Varint) -> begin - v.dropped_attributes_count <- Pbrt.Decoder.int32_as_varint d; - end - | Some (7, pk) -> - Pbrt.Decoder.unexpected_payload "Message(log_record), field(7)" pk - | Some (8, Pbrt.Bits32) -> begin - v.flags <- Pbrt.Decoder.int32_as_bits32 d; - end - | Some (8, pk) -> - Pbrt.Decoder.unexpected_payload "Message(log_record), field(8)" pk - | Some (9, Pbrt.Bytes) -> begin - v.trace_id <- Pbrt.Decoder.bytes d; - end - | Some (9, pk) -> - Pbrt.Decoder.unexpected_payload "Message(log_record), field(9)" pk - | Some (10, Pbrt.Bytes) -> begin - v.span_id <- Pbrt.Decoder.bytes d; - end - | Some (10, pk) -> - Pbrt.Decoder.unexpected_payload "Message(log_record), field(10)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Logs_types.time_unix_nano = v.time_unix_nano; - Logs_types.observed_time_unix_nano = v.observed_time_unix_nano; - Logs_types.severity_number = v.severity_number; - Logs_types.severity_text = v.severity_text; - Logs_types.body = v.body; - Logs_types.attributes = v.attributes; - Logs_types.dropped_attributes_count = v.dropped_attributes_count; - Logs_types.flags = v.flags; - Logs_types.trace_id = v.trace_id; - Logs_types.span_id = v.span_id; - } : Logs_types.log_record) - -let rec decode_scope_logs d = - let v = default_scope_logs_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.log_records <- List.rev v.log_records; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.scope <- Some (Common_pb.decode_instrumentation_scope (Pbrt.Decoder.nested d)); - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(scope_logs), field(1)" pk - | Some (2, Pbrt.Bytes) -> begin - v.log_records <- (decode_log_record (Pbrt.Decoder.nested d)) :: v.log_records; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(scope_logs), field(2)" pk - | Some (3, Pbrt.Bytes) -> begin - v.schema_url <- Pbrt.Decoder.string d; - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(scope_logs), field(3)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Logs_types.scope = v.scope; - Logs_types.log_records = v.log_records; - Logs_types.schema_url = v.schema_url; - } : Logs_types.scope_logs) - -let rec decode_resource_logs d = - let v = default_resource_logs_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.scope_logs <- List.rev v.scope_logs; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.resource <- Some (Resource_pb.decode_resource (Pbrt.Decoder.nested d)); - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(resource_logs), field(1)" pk - | Some (2, Pbrt.Bytes) -> begin - v.scope_logs <- (decode_scope_logs (Pbrt.Decoder.nested d)) :: v.scope_logs; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(resource_logs), field(2)" pk - | Some (3, Pbrt.Bytes) -> begin - v.schema_url <- Pbrt.Decoder.string d; - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(resource_logs), field(3)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Logs_types.resource = v.resource; - Logs_types.scope_logs = v.scope_logs; - Logs_types.schema_url = v.schema_url; - } : Logs_types.resource_logs) - -let rec decode_logs_data d = - let v = default_logs_data_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.resource_logs <- List.rev v.resource_logs; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.resource_logs <- (decode_resource_logs (Pbrt.Decoder.nested d)) :: v.resource_logs; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(logs_data), field(1)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Logs_types.resource_logs = v.resource_logs; - } : Logs_types.logs_data) - -let rec decode_log_record_flags d = - match Pbrt.Decoder.int_as_varint d with - | 0 -> (Logs_types.Log_record_flags_do_not_use:Logs_types.log_record_flags) - | 255 -> (Logs_types.Log_record_flags_trace_flags_mask:Logs_types.log_record_flags) - | _ -> Pbrt.Decoder.malformed_variant "log_record_flags" - -let rec encode_severity_number (v:Logs_types.severity_number) encoder = - match v with - | Logs_types.Severity_number_unspecified -> Pbrt.Encoder.int_as_varint (0) encoder - | Logs_types.Severity_number_trace -> Pbrt.Encoder.int_as_varint 1 encoder - | Logs_types.Severity_number_trace2 -> Pbrt.Encoder.int_as_varint 2 encoder - | Logs_types.Severity_number_trace3 -> Pbrt.Encoder.int_as_varint 3 encoder - | Logs_types.Severity_number_trace4 -> Pbrt.Encoder.int_as_varint 4 encoder - | Logs_types.Severity_number_debug -> Pbrt.Encoder.int_as_varint 5 encoder - | Logs_types.Severity_number_debug2 -> Pbrt.Encoder.int_as_varint 6 encoder - | Logs_types.Severity_number_debug3 -> Pbrt.Encoder.int_as_varint 7 encoder - | Logs_types.Severity_number_debug4 -> Pbrt.Encoder.int_as_varint 8 encoder - | Logs_types.Severity_number_info -> Pbrt.Encoder.int_as_varint 9 encoder - | Logs_types.Severity_number_info2 -> Pbrt.Encoder.int_as_varint 10 encoder - | Logs_types.Severity_number_info3 -> Pbrt.Encoder.int_as_varint 11 encoder - | Logs_types.Severity_number_info4 -> Pbrt.Encoder.int_as_varint 12 encoder - | Logs_types.Severity_number_warn -> Pbrt.Encoder.int_as_varint 13 encoder - | Logs_types.Severity_number_warn2 -> Pbrt.Encoder.int_as_varint 14 encoder - | Logs_types.Severity_number_warn3 -> Pbrt.Encoder.int_as_varint 15 encoder - | Logs_types.Severity_number_warn4 -> Pbrt.Encoder.int_as_varint 16 encoder - | Logs_types.Severity_number_error -> Pbrt.Encoder.int_as_varint 17 encoder - | Logs_types.Severity_number_error2 -> Pbrt.Encoder.int_as_varint 18 encoder - | Logs_types.Severity_number_error3 -> Pbrt.Encoder.int_as_varint 19 encoder - | Logs_types.Severity_number_error4 -> Pbrt.Encoder.int_as_varint 20 encoder - | Logs_types.Severity_number_fatal -> Pbrt.Encoder.int_as_varint 21 encoder - | Logs_types.Severity_number_fatal2 -> Pbrt.Encoder.int_as_varint 22 encoder - | Logs_types.Severity_number_fatal3 -> Pbrt.Encoder.int_as_varint 23 encoder - | Logs_types.Severity_number_fatal4 -> Pbrt.Encoder.int_as_varint 24 encoder - -let rec encode_log_record (v:Logs_types.log_record) encoder = - Pbrt.Encoder.key (1, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Logs_types.time_unix_nano encoder; - Pbrt.Encoder.key (11, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Logs_types.observed_time_unix_nano encoder; - Pbrt.Encoder.key (2, Pbrt.Varint) encoder; - encode_severity_number v.Logs_types.severity_number encoder; - Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; - Pbrt.Encoder.string v.Logs_types.severity_text encoder; - begin match v.Logs_types.body with - | Some x -> - Pbrt.Encoder.key (5, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (Common_pb.encode_any_value x) encoder; - | None -> (); - end; - List.iter (fun x -> - Pbrt.Encoder.key (6, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; - ) v.Logs_types.attributes; - Pbrt.Encoder.key (7, Pbrt.Varint) encoder; - Pbrt.Encoder.int32_as_varint v.Logs_types.dropped_attributes_count encoder; - Pbrt.Encoder.key (8, Pbrt.Bits32) encoder; - Pbrt.Encoder.int32_as_bits32 v.Logs_types.flags encoder; - Pbrt.Encoder.key (9, Pbrt.Bytes) encoder; - Pbrt.Encoder.bytes v.Logs_types.trace_id encoder; - Pbrt.Encoder.key (10, Pbrt.Bytes) encoder; - Pbrt.Encoder.bytes v.Logs_types.span_id encoder; - () - -let rec encode_scope_logs (v:Logs_types.scope_logs) encoder = - begin match v.Logs_types.scope with - | Some x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (Common_pb.encode_instrumentation_scope x) encoder; - | None -> (); - end; - List.iter (fun x -> - Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_log_record x) encoder; - ) v.Logs_types.log_records; - Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; - Pbrt.Encoder.string v.Logs_types.schema_url encoder; - () - -let rec encode_resource_logs (v:Logs_types.resource_logs) encoder = - begin match v.Logs_types.resource with - | Some x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (Resource_pb.encode_resource x) encoder; - | None -> (); - end; - List.iter (fun x -> - Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_scope_logs x) encoder; - ) v.Logs_types.scope_logs; - Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; - Pbrt.Encoder.string v.Logs_types.schema_url encoder; - () - -let rec encode_logs_data (v:Logs_types.logs_data) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_resource_logs x) encoder; - ) v.Logs_types.resource_logs; - () - -let rec encode_log_record_flags (v:Logs_types.log_record_flags) encoder = - match v with - | Logs_types.Log_record_flags_do_not_use -> Pbrt.Encoder.int_as_varint (0) encoder - | Logs_types.Log_record_flags_trace_flags_mask -> Pbrt.Encoder.int_as_varint 255 encoder diff --git a/src/logs_pb.mli b/src/logs_pb.mli deleted file mode 100644 index 93e6d369..00000000 --- a/src/logs_pb.mli +++ /dev/null @@ -1,43 +0,0 @@ -(** logs.proto Binary Encoding *) - - -(** {2 Protobuf Encoding} *) - -val encode_severity_number : Logs_types.severity_number -> Pbrt.Encoder.t -> unit -(** [encode_severity_number v encoder] encodes [v] with the given [encoder] *) - -val encode_log_record : Logs_types.log_record -> Pbrt.Encoder.t -> unit -(** [encode_log_record v encoder] encodes [v] with the given [encoder] *) - -val encode_scope_logs : Logs_types.scope_logs -> Pbrt.Encoder.t -> unit -(** [encode_scope_logs v encoder] encodes [v] with the given [encoder] *) - -val encode_resource_logs : Logs_types.resource_logs -> Pbrt.Encoder.t -> unit -(** [encode_resource_logs v encoder] encodes [v] with the given [encoder] *) - -val encode_logs_data : Logs_types.logs_data -> Pbrt.Encoder.t -> unit -(** [encode_logs_data v encoder] encodes [v] with the given [encoder] *) - -val encode_log_record_flags : Logs_types.log_record_flags -> Pbrt.Encoder.t -> unit -(** [encode_log_record_flags v encoder] encodes [v] with the given [encoder] *) - - -(** {2 Protobuf Decoding} *) - -val decode_severity_number : Pbrt.Decoder.t -> Logs_types.severity_number -(** [decode_severity_number decoder] decodes a [severity_number] value from [decoder] *) - -val decode_log_record : Pbrt.Decoder.t -> Logs_types.log_record -(** [decode_log_record decoder] decodes a [log_record] value from [decoder] *) - -val decode_scope_logs : Pbrt.Decoder.t -> Logs_types.scope_logs -(** [decode_scope_logs decoder] decodes a [scope_logs] value from [decoder] *) - -val decode_resource_logs : Pbrt.Decoder.t -> Logs_types.resource_logs -(** [decode_resource_logs decoder] decodes a [resource_logs] value from [decoder] *) - -val decode_logs_data : Pbrt.Decoder.t -> Logs_types.logs_data -(** [decode_logs_data decoder] decodes a [logs_data] value from [decoder] *) - -val decode_log_record_flags : Pbrt.Decoder.t -> Logs_types.log_record_flags -(** [decode_log_record_flags decoder] decodes a [log_record_flags] value from [decoder] *) diff --git a/src/logs_pp.ml b/src/logs_pp.ml deleted file mode 100644 index 408f01d9..00000000 --- a/src/logs_pp.ml +++ /dev/null @@ -1,71 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - -let rec pp_severity_number fmt (v:Logs_types.severity_number) = - match v with - | Logs_types.Severity_number_unspecified -> Format.fprintf fmt "Severity_number_unspecified" - | Logs_types.Severity_number_trace -> Format.fprintf fmt "Severity_number_trace" - | Logs_types.Severity_number_trace2 -> Format.fprintf fmt "Severity_number_trace2" - | Logs_types.Severity_number_trace3 -> Format.fprintf fmt "Severity_number_trace3" - | Logs_types.Severity_number_trace4 -> Format.fprintf fmt "Severity_number_trace4" - | Logs_types.Severity_number_debug -> Format.fprintf fmt "Severity_number_debug" - | Logs_types.Severity_number_debug2 -> Format.fprintf fmt "Severity_number_debug2" - | Logs_types.Severity_number_debug3 -> Format.fprintf fmt "Severity_number_debug3" - | Logs_types.Severity_number_debug4 -> Format.fprintf fmt "Severity_number_debug4" - | Logs_types.Severity_number_info -> Format.fprintf fmt "Severity_number_info" - | Logs_types.Severity_number_info2 -> Format.fprintf fmt "Severity_number_info2" - | Logs_types.Severity_number_info3 -> Format.fprintf fmt "Severity_number_info3" - | Logs_types.Severity_number_info4 -> Format.fprintf fmt "Severity_number_info4" - | Logs_types.Severity_number_warn -> Format.fprintf fmt "Severity_number_warn" - | Logs_types.Severity_number_warn2 -> Format.fprintf fmt "Severity_number_warn2" - | Logs_types.Severity_number_warn3 -> Format.fprintf fmt "Severity_number_warn3" - | Logs_types.Severity_number_warn4 -> Format.fprintf fmt "Severity_number_warn4" - | Logs_types.Severity_number_error -> Format.fprintf fmt "Severity_number_error" - | Logs_types.Severity_number_error2 -> Format.fprintf fmt "Severity_number_error2" - | Logs_types.Severity_number_error3 -> Format.fprintf fmt "Severity_number_error3" - | Logs_types.Severity_number_error4 -> Format.fprintf fmt "Severity_number_error4" - | Logs_types.Severity_number_fatal -> Format.fprintf fmt "Severity_number_fatal" - | Logs_types.Severity_number_fatal2 -> Format.fprintf fmt "Severity_number_fatal2" - | Logs_types.Severity_number_fatal3 -> Format.fprintf fmt "Severity_number_fatal3" - | Logs_types.Severity_number_fatal4 -> Format.fprintf fmt "Severity_number_fatal4" - -let rec pp_log_record fmt (v:Logs_types.log_record) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Logs_types.time_unix_nano; - Pbrt.Pp.pp_record_field ~first:false "observed_time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Logs_types.observed_time_unix_nano; - Pbrt.Pp.pp_record_field ~first:false "severity_number" pp_severity_number fmt v.Logs_types.severity_number; - Pbrt.Pp.pp_record_field ~first:false "severity_text" Pbrt.Pp.pp_string fmt v.Logs_types.severity_text; - Pbrt.Pp.pp_record_field ~first:false "body" (Pbrt.Pp.pp_option Common_pp.pp_any_value) fmt v.Logs_types.body; - Pbrt.Pp.pp_record_field ~first:false "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Logs_types.attributes; - Pbrt.Pp.pp_record_field ~first:false "dropped_attributes_count" Pbrt.Pp.pp_int32 fmt v.Logs_types.dropped_attributes_count; - Pbrt.Pp.pp_record_field ~first:false "flags" Pbrt.Pp.pp_int32 fmt v.Logs_types.flags; - Pbrt.Pp.pp_record_field ~first:false "trace_id" Pbrt.Pp.pp_bytes fmt v.Logs_types.trace_id; - Pbrt.Pp.pp_record_field ~first:false "span_id" Pbrt.Pp.pp_bytes fmt v.Logs_types.span_id; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_scope_logs fmt (v:Logs_types.scope_logs) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "scope" (Pbrt.Pp.pp_option Common_pp.pp_instrumentation_scope) fmt v.Logs_types.scope; - Pbrt.Pp.pp_record_field ~first:false "log_records" (Pbrt.Pp.pp_list pp_log_record) fmt v.Logs_types.log_records; - Pbrt.Pp.pp_record_field ~first:false "schema_url" Pbrt.Pp.pp_string fmt v.Logs_types.schema_url; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_resource_logs fmt (v:Logs_types.resource_logs) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "resource" (Pbrt.Pp.pp_option Resource_pp.pp_resource) fmt v.Logs_types.resource; - Pbrt.Pp.pp_record_field ~first:false "scope_logs" (Pbrt.Pp.pp_list pp_scope_logs) fmt v.Logs_types.scope_logs; - Pbrt.Pp.pp_record_field ~first:false "schema_url" Pbrt.Pp.pp_string fmt v.Logs_types.schema_url; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_logs_data fmt (v:Logs_types.logs_data) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "resource_logs" (Pbrt.Pp.pp_list pp_resource_logs) fmt v.Logs_types.resource_logs; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_log_record_flags fmt (v:Logs_types.log_record_flags) = - match v with - | Logs_types.Log_record_flags_do_not_use -> Format.fprintf fmt "Log_record_flags_do_not_use" - | Logs_types.Log_record_flags_trace_flags_mask -> Format.fprintf fmt "Log_record_flags_trace_flags_mask" diff --git a/src/logs_pp.mli b/src/logs_pp.mli deleted file mode 100644 index fd952524..00000000 --- a/src/logs_pp.mli +++ /dev/null @@ -1,22 +0,0 @@ -(** logs.proto Pretty Printing *) - - -(** {2 Formatters} *) - -val pp_severity_number : Format.formatter -> Logs_types.severity_number -> unit -(** [pp_severity_number v] formats v *) - -val pp_log_record : Format.formatter -> Logs_types.log_record -> unit -(** [pp_log_record v] formats v *) - -val pp_scope_logs : Format.formatter -> Logs_types.scope_logs -> unit -(** [pp_scope_logs v] formats v *) - -val pp_resource_logs : Format.formatter -> Logs_types.resource_logs -> unit -(** [pp_resource_logs v] formats v *) - -val pp_logs_data : Format.formatter -> Logs_types.logs_data -> unit -(** [pp_logs_data v] formats v *) - -val pp_log_record_flags : Format.formatter -> Logs_types.log_record_flags -> unit -(** [pp_log_record_flags v] formats v *) diff --git a/src/logs_service_pb.ml b/src/logs_service_pb.ml deleted file mode 100644 index 64fde20f..00000000 --- a/src/logs_service_pb.ml +++ /dev/null @@ -1,112 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - -type export_logs_service_request_mutable = { - mutable resource_logs : Logs_types.resource_logs list; -} - -let default_export_logs_service_request_mutable () : export_logs_service_request_mutable = { - resource_logs = []; -} - -type export_logs_partial_success_mutable = { - mutable rejected_log_records : int64; - mutable error_message : string; -} - -let default_export_logs_partial_success_mutable () : export_logs_partial_success_mutable = { - rejected_log_records = 0L; - error_message = ""; -} - -type export_logs_service_response_mutable = { - mutable partial_success : Logs_service_types.export_logs_partial_success option; -} - -let default_export_logs_service_response_mutable () : export_logs_service_response_mutable = { - partial_success = None; -} - - -let rec decode_export_logs_service_request d = - let v = default_export_logs_service_request_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.resource_logs <- List.rev v.resource_logs; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.resource_logs <- (Logs_pb.decode_resource_logs (Pbrt.Decoder.nested d)) :: v.resource_logs; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(export_logs_service_request), field(1)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Logs_service_types.resource_logs = v.resource_logs; - } : Logs_service_types.export_logs_service_request) - -let rec decode_export_logs_partial_success d = - let v = default_export_logs_partial_success_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - ); continue__ := false - | Some (1, Pbrt.Varint) -> begin - v.rejected_log_records <- Pbrt.Decoder.int64_as_varint d; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(export_logs_partial_success), field(1)" pk - | Some (2, Pbrt.Bytes) -> begin - v.error_message <- Pbrt.Decoder.string d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(export_logs_partial_success), field(2)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Logs_service_types.rejected_log_records = v.rejected_log_records; - Logs_service_types.error_message = v.error_message; - } : Logs_service_types.export_logs_partial_success) - -let rec decode_export_logs_service_response d = - let v = default_export_logs_service_response_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.partial_success <- Some (decode_export_logs_partial_success (Pbrt.Decoder.nested d)); - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(export_logs_service_response), field(1)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Logs_service_types.partial_success = v.partial_success; - } : Logs_service_types.export_logs_service_response) - -let rec encode_export_logs_service_request (v:Logs_service_types.export_logs_service_request) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (Logs_pb.encode_resource_logs x) encoder; - ) v.Logs_service_types.resource_logs; - () - -let rec encode_export_logs_partial_success (v:Logs_service_types.export_logs_partial_success) encoder = - Pbrt.Encoder.key (1, Pbrt.Varint) encoder; - Pbrt.Encoder.int64_as_varint v.Logs_service_types.rejected_log_records encoder; - Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; - Pbrt.Encoder.string v.Logs_service_types.error_message encoder; - () - -let rec encode_export_logs_service_response (v:Logs_service_types.export_logs_service_response) encoder = - begin match v.Logs_service_types.partial_success with - | Some x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_export_logs_partial_success x) encoder; - | None -> (); - end; - () diff --git a/src/logs_service_pb.mli b/src/logs_service_pb.mli deleted file mode 100644 index db4d8c89..00000000 --- a/src/logs_service_pb.mli +++ /dev/null @@ -1,25 +0,0 @@ -(** logs_service.proto Binary Encoding *) - - -(** {2 Protobuf Encoding} *) - -val encode_export_logs_service_request : Logs_service_types.export_logs_service_request -> Pbrt.Encoder.t -> unit -(** [encode_export_logs_service_request v encoder] encodes [v] with the given [encoder] *) - -val encode_export_logs_partial_success : Logs_service_types.export_logs_partial_success -> Pbrt.Encoder.t -> unit -(** [encode_export_logs_partial_success v encoder] encodes [v] with the given [encoder] *) - -val encode_export_logs_service_response : Logs_service_types.export_logs_service_response -> Pbrt.Encoder.t -> unit -(** [encode_export_logs_service_response v encoder] encodes [v] with the given [encoder] *) - - -(** {2 Protobuf Decoding} *) - -val decode_export_logs_service_request : Pbrt.Decoder.t -> Logs_service_types.export_logs_service_request -(** [decode_export_logs_service_request decoder] decodes a [export_logs_service_request] value from [decoder] *) - -val decode_export_logs_partial_success : Pbrt.Decoder.t -> Logs_service_types.export_logs_partial_success -(** [decode_export_logs_partial_success decoder] decodes a [export_logs_partial_success] value from [decoder] *) - -val decode_export_logs_service_response : Pbrt.Decoder.t -> Logs_service_types.export_logs_service_response -(** [decode_export_logs_service_response decoder] decodes a [export_logs_service_response] value from [decoder] *) diff --git a/src/logs_service_pp.ml b/src/logs_service_pp.ml deleted file mode 100644 index 19830e4c..00000000 --- a/src/logs_service_pp.ml +++ /dev/null @@ -1,20 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - -let rec pp_export_logs_service_request fmt (v:Logs_service_types.export_logs_service_request) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "resource_logs" (Pbrt.Pp.pp_list Logs_pp.pp_resource_logs) fmt v.Logs_service_types.resource_logs; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_export_logs_partial_success fmt (v:Logs_service_types.export_logs_partial_success) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "rejected_log_records" Pbrt.Pp.pp_int64 fmt v.Logs_service_types.rejected_log_records; - Pbrt.Pp.pp_record_field ~first:false "error_message" Pbrt.Pp.pp_string fmt v.Logs_service_types.error_message; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_export_logs_service_response fmt (v:Logs_service_types.export_logs_service_response) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "partial_success" (Pbrt.Pp.pp_option pp_export_logs_partial_success) fmt v.Logs_service_types.partial_success; - in - Pbrt.Pp.pp_brk pp_i fmt () diff --git a/src/logs_service_pp.mli b/src/logs_service_pp.mli deleted file mode 100644 index 6aa6319f..00000000 --- a/src/logs_service_pp.mli +++ /dev/null @@ -1,13 +0,0 @@ -(** logs_service.proto Pretty Printing *) - - -(** {2 Formatters} *) - -val pp_export_logs_service_request : Format.formatter -> Logs_service_types.export_logs_service_request -> unit -(** [pp_export_logs_service_request v] formats v *) - -val pp_export_logs_partial_success : Format.formatter -> Logs_service_types.export_logs_partial_success -> unit -(** [pp_export_logs_partial_success v] formats v *) - -val pp_export_logs_service_response : Format.formatter -> Logs_service_types.export_logs_service_response -> unit -(** [pp_export_logs_service_response v] formats v *) diff --git a/src/logs_service_types.ml b/src/logs_service_types.ml deleted file mode 100644 index 9bf19974..00000000 --- a/src/logs_service_types.ml +++ /dev/null @@ -1,35 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - - -type export_logs_service_request = { - resource_logs : Logs_types.resource_logs list; -} - -type export_logs_partial_success = { - rejected_log_records : int64; - error_message : string; -} - -type export_logs_service_response = { - partial_success : export_logs_partial_success option; -} - -let rec default_export_logs_service_request - ?resource_logs:((resource_logs:Logs_types.resource_logs list) = []) - () : export_logs_service_request = { - resource_logs; -} - -let rec default_export_logs_partial_success - ?rejected_log_records:((rejected_log_records:int64) = 0L) - ?error_message:((error_message:string) = "") - () : export_logs_partial_success = { - rejected_log_records; - error_message; -} - -let rec default_export_logs_service_response - ?partial_success:((partial_success:export_logs_partial_success option) = None) - () : export_logs_service_response = { - partial_success; -} diff --git a/src/logs_service_types.mli b/src/logs_service_types.mli deleted file mode 100644 index beef4fd3..00000000 --- a/src/logs_service_types.mli +++ /dev/null @@ -1,40 +0,0 @@ -(** logs_service.proto Types *) - - - -(** {2 Types} *) - -type export_logs_service_request = { - resource_logs : Logs_types.resource_logs list; -} - -type export_logs_partial_success = { - rejected_log_records : int64; - error_message : string; -} - -type export_logs_service_response = { - partial_success : export_logs_partial_success option; -} - - -(** {2 Default values} *) - -val default_export_logs_service_request : - ?resource_logs:Logs_types.resource_logs list -> - unit -> - export_logs_service_request -(** [default_export_logs_service_request ()] is the default value for type [export_logs_service_request] *) - -val default_export_logs_partial_success : - ?rejected_log_records:int64 -> - ?error_message:string -> - unit -> - export_logs_partial_success -(** [default_export_logs_partial_success ()] is the default value for type [export_logs_partial_success] *) - -val default_export_logs_service_response : - ?partial_success:export_logs_partial_success option -> - unit -> - export_logs_service_response -(** [default_export_logs_service_response ()] is the default value for type [export_logs_service_response] *) diff --git a/src/logs_types.ml b/src/logs_types.ml deleted file mode 100644 index 4a383ff7..00000000 --- a/src/logs_types.ml +++ /dev/null @@ -1,116 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - - -type severity_number = - | Severity_number_unspecified - | Severity_number_trace - | Severity_number_trace2 - | Severity_number_trace3 - | Severity_number_trace4 - | Severity_number_debug - | Severity_number_debug2 - | Severity_number_debug3 - | Severity_number_debug4 - | Severity_number_info - | Severity_number_info2 - | Severity_number_info3 - | Severity_number_info4 - | Severity_number_warn - | Severity_number_warn2 - | Severity_number_warn3 - | Severity_number_warn4 - | Severity_number_error - | Severity_number_error2 - | Severity_number_error3 - | Severity_number_error4 - | Severity_number_fatal - | Severity_number_fatal2 - | Severity_number_fatal3 - | Severity_number_fatal4 - -type log_record = { - time_unix_nano : int64; - observed_time_unix_nano : int64; - severity_number : severity_number; - severity_text : string; - body : Common_types.any_value option; - attributes : Common_types.key_value list; - dropped_attributes_count : int32; - flags : int32; - trace_id : bytes; - span_id : bytes; -} - -type scope_logs = { - scope : Common_types.instrumentation_scope option; - log_records : log_record list; - schema_url : string; -} - -type resource_logs = { - resource : Resource_types.resource option; - scope_logs : scope_logs list; - schema_url : string; -} - -type logs_data = { - resource_logs : resource_logs list; -} - -type log_record_flags = - | Log_record_flags_do_not_use - | Log_record_flags_trace_flags_mask - -let rec default_severity_number () = (Severity_number_unspecified:severity_number) - -let rec default_log_record - ?time_unix_nano:((time_unix_nano:int64) = 0L) - ?observed_time_unix_nano:((observed_time_unix_nano:int64) = 0L) - ?severity_number:((severity_number:severity_number) = default_severity_number ()) - ?severity_text:((severity_text:string) = "") - ?body:((body:Common_types.any_value option) = None) - ?attributes:((attributes:Common_types.key_value list) = []) - ?dropped_attributes_count:((dropped_attributes_count:int32) = 0l) - ?flags:((flags:int32) = 0l) - ?trace_id:((trace_id:bytes) = Bytes.create 0) - ?span_id:((span_id:bytes) = Bytes.create 0) - () : log_record = { - time_unix_nano; - observed_time_unix_nano; - severity_number; - severity_text; - body; - attributes; - dropped_attributes_count; - flags; - trace_id; - span_id; -} - -let rec default_scope_logs - ?scope:((scope:Common_types.instrumentation_scope option) = None) - ?log_records:((log_records:log_record list) = []) - ?schema_url:((schema_url:string) = "") - () : scope_logs = { - scope; - log_records; - schema_url; -} - -let rec default_resource_logs - ?resource:((resource:Resource_types.resource option) = None) - ?scope_logs:((scope_logs:scope_logs list) = []) - ?schema_url:((schema_url:string) = "") - () : resource_logs = { - resource; - scope_logs; - schema_url; -} - -let rec default_logs_data - ?resource_logs:((resource_logs:resource_logs list) = []) - () : logs_data = { - resource_logs; -} - -let rec default_log_record_flags () = (Log_record_flags_do_not_use:log_record_flags) diff --git a/src/logs_types.mli b/src/logs_types.mli deleted file mode 100644 index 7a9cc1a3..00000000 --- a/src/logs_types.mli +++ /dev/null @@ -1,111 +0,0 @@ -(** logs.proto Types *) - - - -(** {2 Types} *) - -type severity_number = - | Severity_number_unspecified - | Severity_number_trace - | Severity_number_trace2 - | Severity_number_trace3 - | Severity_number_trace4 - | Severity_number_debug - | Severity_number_debug2 - | Severity_number_debug3 - | Severity_number_debug4 - | Severity_number_info - | Severity_number_info2 - | Severity_number_info3 - | Severity_number_info4 - | Severity_number_warn - | Severity_number_warn2 - | Severity_number_warn3 - | Severity_number_warn4 - | Severity_number_error - | Severity_number_error2 - | Severity_number_error3 - | Severity_number_error4 - | Severity_number_fatal - | Severity_number_fatal2 - | Severity_number_fatal3 - | Severity_number_fatal4 - -type log_record = { - time_unix_nano : int64; - observed_time_unix_nano : int64; - severity_number : severity_number; - severity_text : string; - body : Common_types.any_value option; - attributes : Common_types.key_value list; - dropped_attributes_count : int32; - flags : int32; - trace_id : bytes; - span_id : bytes; -} - -type scope_logs = { - scope : Common_types.instrumentation_scope option; - log_records : log_record list; - schema_url : string; -} - -type resource_logs = { - resource : Resource_types.resource option; - scope_logs : scope_logs list; - schema_url : string; -} - -type logs_data = { - resource_logs : resource_logs list; -} - -type log_record_flags = - | Log_record_flags_do_not_use - | Log_record_flags_trace_flags_mask - - -(** {2 Default values} *) - -val default_severity_number : unit -> severity_number -(** [default_severity_number ()] is the default value for type [severity_number] *) - -val default_log_record : - ?time_unix_nano:int64 -> - ?observed_time_unix_nano:int64 -> - ?severity_number:severity_number -> - ?severity_text:string -> - ?body:Common_types.any_value option -> - ?attributes:Common_types.key_value list -> - ?dropped_attributes_count:int32 -> - ?flags:int32 -> - ?trace_id:bytes -> - ?span_id:bytes -> - unit -> - log_record -(** [default_log_record ()] is the default value for type [log_record] *) - -val default_scope_logs : - ?scope:Common_types.instrumentation_scope option -> - ?log_records:log_record list -> - ?schema_url:string -> - unit -> - scope_logs -(** [default_scope_logs ()] is the default value for type [scope_logs] *) - -val default_resource_logs : - ?resource:Resource_types.resource option -> - ?scope_logs:scope_logs list -> - ?schema_url:string -> - unit -> - resource_logs -(** [default_resource_logs ()] is the default value for type [resource_logs] *) - -val default_logs_data : - ?resource_logs:resource_logs list -> - unit -> - logs_data -(** [default_logs_data ()] is the default value for type [logs_data] *) - -val default_log_record_flags : unit -> log_record_flags -(** [default_log_record_flags ()] is the default value for type [log_record_flags] *) diff --git a/src/metrics_pb.ml b/src/metrics_pb.ml deleted file mode 100644 index d85e1e72..00000000 --- a/src/metrics_pb.ml +++ /dev/null @@ -1,1282 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - -type exemplar_mutable = { - mutable filtered_attributes : Common_types.key_value list; - mutable time_unix_nano : int64; - mutable value : Metrics_types.exemplar_value; - mutable span_id : bytes; - mutable trace_id : bytes; -} - -let default_exemplar_mutable () : exemplar_mutable = { - filtered_attributes = []; - time_unix_nano = 0L; - value = Metrics_types.As_double (0.); - span_id = Bytes.create 0; - trace_id = Bytes.create 0; -} - -type number_data_point_mutable = { - mutable attributes : Common_types.key_value list; - mutable start_time_unix_nano : int64; - mutable time_unix_nano : int64; - mutable value : Metrics_types.number_data_point_value; - mutable exemplars : Metrics_types.exemplar list; - mutable flags : int32; -} - -let default_number_data_point_mutable () : number_data_point_mutable = { - attributes = []; - start_time_unix_nano = 0L; - time_unix_nano = 0L; - value = Metrics_types.As_double (0.); - exemplars = []; - flags = 0l; -} - -type gauge_mutable = { - mutable data_points : Metrics_types.number_data_point list; -} - -let default_gauge_mutable () : gauge_mutable = { - data_points = []; -} - -type sum_mutable = { - mutable data_points : Metrics_types.number_data_point list; - mutable aggregation_temporality : Metrics_types.aggregation_temporality; - mutable is_monotonic : bool; -} - -let default_sum_mutable () : sum_mutable = { - data_points = []; - aggregation_temporality = Metrics_types.default_aggregation_temporality (); - is_monotonic = false; -} - -type histogram_data_point_mutable = { - mutable attributes : Common_types.key_value list; - mutable start_time_unix_nano : int64; - mutable time_unix_nano : int64; - mutable count : int64; - mutable sum : float option; - mutable bucket_counts : int64 list; - mutable explicit_bounds : float list; - mutable exemplars : Metrics_types.exemplar list; - mutable flags : int32; - mutable min : float option; - mutable max : float option; -} - -let default_histogram_data_point_mutable () : histogram_data_point_mutable = { - attributes = []; - start_time_unix_nano = 0L; - time_unix_nano = 0L; - count = 0L; - sum = None; - bucket_counts = []; - explicit_bounds = []; - exemplars = []; - flags = 0l; - min = None; - max = None; -} - -type histogram_mutable = { - mutable data_points : Metrics_types.histogram_data_point list; - mutable aggregation_temporality : Metrics_types.aggregation_temporality; -} - -let default_histogram_mutable () : histogram_mutable = { - data_points = []; - aggregation_temporality = Metrics_types.default_aggregation_temporality (); -} - -type exponential_histogram_data_point_buckets_mutable = { - mutable offset : int32; - mutable bucket_counts : int64 list; -} - -let default_exponential_histogram_data_point_buckets_mutable () : exponential_histogram_data_point_buckets_mutable = { - offset = 0l; - bucket_counts = []; -} - -type exponential_histogram_data_point_mutable = { - mutable attributes : Common_types.key_value list; - mutable start_time_unix_nano : int64; - mutable time_unix_nano : int64; - mutable count : int64; - mutable sum : float option; - mutable scale : int32; - mutable zero_count : int64; - mutable positive : Metrics_types.exponential_histogram_data_point_buckets option; - mutable negative : Metrics_types.exponential_histogram_data_point_buckets option; - mutable flags : int32; - mutable exemplars : Metrics_types.exemplar list; - mutable min : float option; - mutable max : float option; - mutable zero_threshold : float; -} - -let default_exponential_histogram_data_point_mutable () : exponential_histogram_data_point_mutable = { - attributes = []; - start_time_unix_nano = 0L; - time_unix_nano = 0L; - count = 0L; - sum = None; - scale = 0l; - zero_count = 0L; - positive = None; - negative = None; - flags = 0l; - exemplars = []; - min = None; - max = None; - zero_threshold = 0.; -} - -type exponential_histogram_mutable = { - mutable data_points : Metrics_types.exponential_histogram_data_point list; - mutable aggregation_temporality : Metrics_types.aggregation_temporality; -} - -let default_exponential_histogram_mutable () : exponential_histogram_mutable = { - data_points = []; - aggregation_temporality = Metrics_types.default_aggregation_temporality (); -} - -type summary_data_point_value_at_quantile_mutable = { - mutable quantile : float; - mutable value : float; -} - -let default_summary_data_point_value_at_quantile_mutable () : summary_data_point_value_at_quantile_mutable = { - quantile = 0.; - value = 0.; -} - -type summary_data_point_mutable = { - mutable attributes : Common_types.key_value list; - mutable start_time_unix_nano : int64; - mutable time_unix_nano : int64; - mutable count : int64; - mutable sum : float; - mutable quantile_values : Metrics_types.summary_data_point_value_at_quantile list; - mutable flags : int32; -} - -let default_summary_data_point_mutable () : summary_data_point_mutable = { - attributes = []; - start_time_unix_nano = 0L; - time_unix_nano = 0L; - count = 0L; - sum = 0.; - quantile_values = []; - flags = 0l; -} - -type summary_mutable = { - mutable data_points : Metrics_types.summary_data_point list; -} - -let default_summary_mutable () : summary_mutable = { - data_points = []; -} - -type metric_mutable = { - mutable name : string; - mutable description : string; - mutable unit_ : string; - mutable data : Metrics_types.metric_data; -} - -let default_metric_mutable () : metric_mutable = { - name = ""; - description = ""; - unit_ = ""; - data = Metrics_types.Gauge (Metrics_types.default_gauge ()); -} - -type scope_metrics_mutable = { - mutable scope : Common_types.instrumentation_scope option; - mutable metrics : Metrics_types.metric list; - mutable schema_url : string; -} - -let default_scope_metrics_mutable () : scope_metrics_mutable = { - scope = None; - metrics = []; - schema_url = ""; -} - -type resource_metrics_mutable = { - mutable resource : Resource_types.resource option; - mutable scope_metrics : Metrics_types.scope_metrics list; - mutable schema_url : string; -} - -let default_resource_metrics_mutable () : resource_metrics_mutable = { - resource = None; - scope_metrics = []; - schema_url = ""; -} - -type metrics_data_mutable = { - mutable resource_metrics : Metrics_types.resource_metrics list; -} - -let default_metrics_data_mutable () : metrics_data_mutable = { - resource_metrics = []; -} - - -let rec decode_exemplar_value d = - let rec loop () = - let ret:Metrics_types.exemplar_value = match Pbrt.Decoder.key d with - | None -> Pbrt.Decoder.malformed_variant "exemplar_value" - | Some (3, _) -> (Metrics_types.As_double (Pbrt.Decoder.float_as_bits64 d) : Metrics_types.exemplar_value) - | Some (6, _) -> (Metrics_types.As_int (Pbrt.Decoder.int64_as_bits64 d) : Metrics_types.exemplar_value) - | Some (n, payload_kind) -> ( - Pbrt.Decoder.skip d payload_kind; - loop () - ) - in - ret - in - loop () - -and decode_exemplar d = - let v = default_exemplar_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.filtered_attributes <- List.rev v.filtered_attributes; - ); continue__ := false - | Some (7, Pbrt.Bytes) -> begin - v.filtered_attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.filtered_attributes; - end - | Some (7, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exemplar), field(7)" pk - | Some (2, Pbrt.Bits64) -> begin - v.time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exemplar), field(2)" pk - | Some (3, Pbrt.Bits64) -> begin - v.value <- Metrics_types.As_double (Pbrt.Decoder.float_as_bits64 d); - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exemplar), field(3)" pk - | Some (6, Pbrt.Bits64) -> begin - v.value <- Metrics_types.As_int (Pbrt.Decoder.int64_as_bits64 d); - end - | Some (6, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exemplar), field(6)" pk - | Some (4, Pbrt.Bytes) -> begin - v.span_id <- Pbrt.Decoder.bytes d; - end - | Some (4, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exemplar), field(4)" pk - | Some (5, Pbrt.Bytes) -> begin - v.trace_id <- Pbrt.Decoder.bytes d; - end - | Some (5, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exemplar), field(5)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Metrics_types.filtered_attributes = v.filtered_attributes; - Metrics_types.time_unix_nano = v.time_unix_nano; - Metrics_types.value = v.value; - Metrics_types.span_id = v.span_id; - Metrics_types.trace_id = v.trace_id; - } : Metrics_types.exemplar) - -let rec decode_number_data_point_value d = - let rec loop () = - let ret:Metrics_types.number_data_point_value = match Pbrt.Decoder.key d with - | None -> Pbrt.Decoder.malformed_variant "number_data_point_value" - | Some (4, _) -> (Metrics_types.As_double (Pbrt.Decoder.float_as_bits64 d) : Metrics_types.number_data_point_value) - | Some (6, _) -> (Metrics_types.As_int (Pbrt.Decoder.int64_as_bits64 d) : Metrics_types.number_data_point_value) - | Some (n, payload_kind) -> ( - Pbrt.Decoder.skip d payload_kind; - loop () - ) - in - ret - in - loop () - -and decode_number_data_point d = - let v = default_number_data_point_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.exemplars <- List.rev v.exemplars; - v.attributes <- List.rev v.attributes; - ); continue__ := false - | Some (7, Pbrt.Bytes) -> begin - v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; - end - | Some (7, pk) -> - Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(7)" pk - | Some (2, Pbrt.Bits64) -> begin - v.start_time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(2)" pk - | Some (3, Pbrt.Bits64) -> begin - v.time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(3)" pk - | Some (4, Pbrt.Bits64) -> begin - v.value <- Metrics_types.As_double (Pbrt.Decoder.float_as_bits64 d); - end - | Some (4, pk) -> - Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(4)" pk - | Some (6, Pbrt.Bits64) -> begin - v.value <- Metrics_types.As_int (Pbrt.Decoder.int64_as_bits64 d); - end - | Some (6, pk) -> - Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(6)" pk - | Some (5, Pbrt.Bytes) -> begin - v.exemplars <- (decode_exemplar (Pbrt.Decoder.nested d)) :: v.exemplars; - end - | Some (5, pk) -> - Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(5)" pk - | Some (8, Pbrt.Varint) -> begin - v.flags <- Pbrt.Decoder.int32_as_varint d; - end - | Some (8, pk) -> - Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(8)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Metrics_types.attributes = v.attributes; - Metrics_types.start_time_unix_nano = v.start_time_unix_nano; - Metrics_types.time_unix_nano = v.time_unix_nano; - Metrics_types.value = v.value; - Metrics_types.exemplars = v.exemplars; - Metrics_types.flags = v.flags; - } : Metrics_types.number_data_point) - -let rec decode_gauge d = - let v = default_gauge_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.data_points <- List.rev v.data_points; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.data_points <- (decode_number_data_point (Pbrt.Decoder.nested d)) :: v.data_points; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(gauge), field(1)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Metrics_types.data_points = v.data_points; - } : Metrics_types.gauge) - -let rec decode_aggregation_temporality d = - match Pbrt.Decoder.int_as_varint d with - | 0 -> (Metrics_types.Aggregation_temporality_unspecified:Metrics_types.aggregation_temporality) - | 1 -> (Metrics_types.Aggregation_temporality_delta:Metrics_types.aggregation_temporality) - | 2 -> (Metrics_types.Aggregation_temporality_cumulative:Metrics_types.aggregation_temporality) - | _ -> Pbrt.Decoder.malformed_variant "aggregation_temporality" - -let rec decode_sum d = - let v = default_sum_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.data_points <- List.rev v.data_points; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.data_points <- (decode_number_data_point (Pbrt.Decoder.nested d)) :: v.data_points; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(sum), field(1)" pk - | Some (2, Pbrt.Varint) -> begin - v.aggregation_temporality <- decode_aggregation_temporality d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(sum), field(2)" pk - | Some (3, Pbrt.Varint) -> begin - v.is_monotonic <- Pbrt.Decoder.bool d; - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(sum), field(3)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Metrics_types.data_points = v.data_points; - Metrics_types.aggregation_temporality = v.aggregation_temporality; - Metrics_types.is_monotonic = v.is_monotonic; - } : Metrics_types.sum) - -let rec decode_histogram_data_point d = - let v = default_histogram_data_point_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.exemplars <- List.rev v.exemplars; - v.explicit_bounds <- List.rev v.explicit_bounds; - v.bucket_counts <- List.rev v.bucket_counts; - v.attributes <- List.rev v.attributes; - ); continue__ := false - | Some (9, Pbrt.Bytes) -> begin - v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; - end - | Some (9, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(9)" pk - | Some (2, Pbrt.Bits64) -> begin - v.start_time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(2)" pk - | Some (3, Pbrt.Bits64) -> begin - v.time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(3)" pk - | Some (4, Pbrt.Bits64) -> begin - v.count <- Pbrt.Decoder.int64_as_bits64 d; - end - | Some (4, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(4)" pk - | Some (5, Pbrt.Bits64) -> begin - v.sum <- Some (Pbrt.Decoder.float_as_bits64 d); - end - | Some (5, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(5)" pk - | Some (6, Pbrt.Bytes) -> begin - v.bucket_counts <- Pbrt.Decoder.packed_fold (fun l d -> (Pbrt.Decoder.int64_as_bits64 d)::l) [] d; - end - | Some (6, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(6)" pk - | Some (7, Pbrt.Bytes) -> begin - v.explicit_bounds <- Pbrt.Decoder.packed_fold (fun l d -> (Pbrt.Decoder.float_as_bits64 d)::l) [] d; - end - | Some (7, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(7)" pk - | Some (8, Pbrt.Bytes) -> begin - v.exemplars <- (decode_exemplar (Pbrt.Decoder.nested d)) :: v.exemplars; - end - | Some (8, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(8)" pk - | Some (10, Pbrt.Varint) -> begin - v.flags <- Pbrt.Decoder.int32_as_varint d; - end - | Some (10, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(10)" pk - | Some (11, Pbrt.Bits64) -> begin - v.min <- Some (Pbrt.Decoder.float_as_bits64 d); - end - | Some (11, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(11)" pk - | Some (12, Pbrt.Bits64) -> begin - v.max <- Some (Pbrt.Decoder.float_as_bits64 d); - end - | Some (12, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(12)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Metrics_types.attributes = v.attributes; - Metrics_types.start_time_unix_nano = v.start_time_unix_nano; - Metrics_types.time_unix_nano = v.time_unix_nano; - Metrics_types.count = v.count; - Metrics_types.sum = v.sum; - Metrics_types.bucket_counts = v.bucket_counts; - Metrics_types.explicit_bounds = v.explicit_bounds; - Metrics_types.exemplars = v.exemplars; - Metrics_types.flags = v.flags; - Metrics_types.min = v.min; - Metrics_types.max = v.max; - } : Metrics_types.histogram_data_point) - -let rec decode_histogram d = - let v = default_histogram_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.data_points <- List.rev v.data_points; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.data_points <- (decode_histogram_data_point (Pbrt.Decoder.nested d)) :: v.data_points; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram), field(1)" pk - | Some (2, Pbrt.Varint) -> begin - v.aggregation_temporality <- decode_aggregation_temporality d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram), field(2)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Metrics_types.data_points = v.data_points; - Metrics_types.aggregation_temporality = v.aggregation_temporality; - } : Metrics_types.histogram) - -let rec decode_exponential_histogram_data_point_buckets d = - let v = default_exponential_histogram_data_point_buckets_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.bucket_counts <- List.rev v.bucket_counts; - ); continue__ := false - | Some (1, Pbrt.Varint) -> begin - v.offset <- Pbrt.Decoder.int32_as_zigzag d; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point_buckets), field(1)" pk - | Some (2, Pbrt.Bytes) -> begin - v.bucket_counts <- Pbrt.Decoder.packed_fold (fun l d -> (Pbrt.Decoder.int64_as_varint d)::l) [] d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point_buckets), field(2)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Metrics_types.offset = v.offset; - Metrics_types.bucket_counts = v.bucket_counts; - } : Metrics_types.exponential_histogram_data_point_buckets) - -let rec decode_exponential_histogram_data_point d = - let v = default_exponential_histogram_data_point_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.exemplars <- List.rev v.exemplars; - v.attributes <- List.rev v.attributes; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(1)" pk - | Some (2, Pbrt.Bits64) -> begin - v.start_time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(2)" pk - | Some (3, Pbrt.Bits64) -> begin - v.time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(3)" pk - | Some (4, Pbrt.Bits64) -> begin - v.count <- Pbrt.Decoder.int64_as_bits64 d; - end - | Some (4, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(4)" pk - | Some (5, Pbrt.Bits64) -> begin - v.sum <- Some (Pbrt.Decoder.float_as_bits64 d); - end - | Some (5, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(5)" pk - | Some (6, Pbrt.Varint) -> begin - v.scale <- Pbrt.Decoder.int32_as_zigzag d; - end - | Some (6, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(6)" pk - | Some (7, Pbrt.Bits64) -> begin - v.zero_count <- Pbrt.Decoder.int64_as_bits64 d; - end - | Some (7, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(7)" pk - | Some (8, Pbrt.Bytes) -> begin - v.positive <- Some (decode_exponential_histogram_data_point_buckets (Pbrt.Decoder.nested d)); - end - | Some (8, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(8)" pk - | Some (9, Pbrt.Bytes) -> begin - v.negative <- Some (decode_exponential_histogram_data_point_buckets (Pbrt.Decoder.nested d)); - end - | Some (9, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(9)" pk - | Some (10, Pbrt.Varint) -> begin - v.flags <- Pbrt.Decoder.int32_as_varint d; - end - | Some (10, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(10)" pk - | Some (11, Pbrt.Bytes) -> begin - v.exemplars <- (decode_exemplar (Pbrt.Decoder.nested d)) :: v.exemplars; - end - | Some (11, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(11)" pk - | Some (12, Pbrt.Bits64) -> begin - v.min <- Some (Pbrt.Decoder.float_as_bits64 d); - end - | Some (12, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(12)" pk - | Some (13, Pbrt.Bits64) -> begin - v.max <- Some (Pbrt.Decoder.float_as_bits64 d); - end - | Some (13, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(13)" pk - | Some (14, Pbrt.Bits64) -> begin - v.zero_threshold <- Pbrt.Decoder.float_as_bits64 d; - end - | Some (14, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(14)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Metrics_types.attributes = v.attributes; - Metrics_types.start_time_unix_nano = v.start_time_unix_nano; - Metrics_types.time_unix_nano = v.time_unix_nano; - Metrics_types.count = v.count; - Metrics_types.sum = v.sum; - Metrics_types.scale = v.scale; - Metrics_types.zero_count = v.zero_count; - Metrics_types.positive = v.positive; - Metrics_types.negative = v.negative; - Metrics_types.flags = v.flags; - Metrics_types.exemplars = v.exemplars; - Metrics_types.min = v.min; - Metrics_types.max = v.max; - Metrics_types.zero_threshold = v.zero_threshold; - } : Metrics_types.exponential_histogram_data_point) - -let rec decode_exponential_histogram d = - let v = default_exponential_histogram_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.data_points <- List.rev v.data_points; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.data_points <- (decode_exponential_histogram_data_point (Pbrt.Decoder.nested d)) :: v.data_points; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exponential_histogram), field(1)" pk - | Some (2, Pbrt.Varint) -> begin - v.aggregation_temporality <- decode_aggregation_temporality d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exponential_histogram), field(2)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Metrics_types.data_points = v.data_points; - Metrics_types.aggregation_temporality = v.aggregation_temporality; - } : Metrics_types.exponential_histogram) - -let rec decode_summary_data_point_value_at_quantile d = - let v = default_summary_data_point_value_at_quantile_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - ); continue__ := false - | Some (1, Pbrt.Bits64) -> begin - v.quantile <- Pbrt.Decoder.float_as_bits64 d; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(summary_data_point_value_at_quantile), field(1)" pk - | Some (2, Pbrt.Bits64) -> begin - v.value <- Pbrt.Decoder.float_as_bits64 d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(summary_data_point_value_at_quantile), field(2)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Metrics_types.quantile = v.quantile; - Metrics_types.value = v.value; - } : Metrics_types.summary_data_point_value_at_quantile) - -let rec decode_summary_data_point d = - let v = default_summary_data_point_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.quantile_values <- List.rev v.quantile_values; - v.attributes <- List.rev v.attributes; - ); continue__ := false - | Some (7, Pbrt.Bytes) -> begin - v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; - end - | Some (7, pk) -> - Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(7)" pk - | Some (2, Pbrt.Bits64) -> begin - v.start_time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(2)" pk - | Some (3, Pbrt.Bits64) -> begin - v.time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(3)" pk - | Some (4, Pbrt.Bits64) -> begin - v.count <- Pbrt.Decoder.int64_as_bits64 d; - end - | Some (4, pk) -> - Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(4)" pk - | Some (5, Pbrt.Bits64) -> begin - v.sum <- Pbrt.Decoder.float_as_bits64 d; - end - | Some (5, pk) -> - Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(5)" pk - | Some (6, Pbrt.Bytes) -> begin - v.quantile_values <- (decode_summary_data_point_value_at_quantile (Pbrt.Decoder.nested d)) :: v.quantile_values; - end - | Some (6, pk) -> - Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(6)" pk - | Some (8, Pbrt.Varint) -> begin - v.flags <- Pbrt.Decoder.int32_as_varint d; - end - | Some (8, pk) -> - Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(8)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Metrics_types.attributes = v.attributes; - Metrics_types.start_time_unix_nano = v.start_time_unix_nano; - Metrics_types.time_unix_nano = v.time_unix_nano; - Metrics_types.count = v.count; - Metrics_types.sum = v.sum; - Metrics_types.quantile_values = v.quantile_values; - Metrics_types.flags = v.flags; - } : Metrics_types.summary_data_point) - -let rec decode_summary d = - let v = default_summary_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.data_points <- List.rev v.data_points; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.data_points <- (decode_summary_data_point (Pbrt.Decoder.nested d)) :: v.data_points; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(summary), field(1)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Metrics_types.data_points = v.data_points; - } : Metrics_types.summary) - -let rec decode_metric_data d = - let rec loop () = - let ret:Metrics_types.metric_data = match Pbrt.Decoder.key d with - | None -> Pbrt.Decoder.malformed_variant "metric_data" - | Some (5, _) -> (Metrics_types.Gauge (decode_gauge (Pbrt.Decoder.nested d)) : Metrics_types.metric_data) - | Some (7, _) -> (Metrics_types.Sum (decode_sum (Pbrt.Decoder.nested d)) : Metrics_types.metric_data) - | Some (9, _) -> (Metrics_types.Histogram (decode_histogram (Pbrt.Decoder.nested d)) : Metrics_types.metric_data) - | Some (10, _) -> (Metrics_types.Exponential_histogram (decode_exponential_histogram (Pbrt.Decoder.nested d)) : Metrics_types.metric_data) - | Some (11, _) -> (Metrics_types.Summary (decode_summary (Pbrt.Decoder.nested d)) : Metrics_types.metric_data) - | Some (n, payload_kind) -> ( - Pbrt.Decoder.skip d payload_kind; - loop () - ) - in - ret - in - loop () - -and decode_metric d = - let v = default_metric_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.name <- Pbrt.Decoder.string d; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(metric), field(1)" pk - | Some (2, Pbrt.Bytes) -> begin - v.description <- Pbrt.Decoder.string d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(metric), field(2)" pk - | Some (3, Pbrt.Bytes) -> begin - v.unit_ <- Pbrt.Decoder.string d; - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(metric), field(3)" pk - | Some (5, Pbrt.Bytes) -> begin - v.data <- Metrics_types.Gauge (decode_gauge (Pbrt.Decoder.nested d)); - end - | Some (5, pk) -> - Pbrt.Decoder.unexpected_payload "Message(metric), field(5)" pk - | Some (7, Pbrt.Bytes) -> begin - v.data <- Metrics_types.Sum (decode_sum (Pbrt.Decoder.nested d)); - end - | Some (7, pk) -> - Pbrt.Decoder.unexpected_payload "Message(metric), field(7)" pk - | Some (9, Pbrt.Bytes) -> begin - v.data <- Metrics_types.Histogram (decode_histogram (Pbrt.Decoder.nested d)); - end - | Some (9, pk) -> - Pbrt.Decoder.unexpected_payload "Message(metric), field(9)" pk - | Some (10, Pbrt.Bytes) -> begin - v.data <- Metrics_types.Exponential_histogram (decode_exponential_histogram (Pbrt.Decoder.nested d)); - end - | Some (10, pk) -> - Pbrt.Decoder.unexpected_payload "Message(metric), field(10)" pk - | Some (11, Pbrt.Bytes) -> begin - v.data <- Metrics_types.Summary (decode_summary (Pbrt.Decoder.nested d)); - end - | Some (11, pk) -> - Pbrt.Decoder.unexpected_payload "Message(metric), field(11)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Metrics_types.name = v.name; - Metrics_types.description = v.description; - Metrics_types.unit_ = v.unit_; - Metrics_types.data = v.data; - } : Metrics_types.metric) - -let rec decode_scope_metrics d = - let v = default_scope_metrics_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.metrics <- List.rev v.metrics; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.scope <- Some (Common_pb.decode_instrumentation_scope (Pbrt.Decoder.nested d)); - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(scope_metrics), field(1)" pk - | Some (2, Pbrt.Bytes) -> begin - v.metrics <- (decode_metric (Pbrt.Decoder.nested d)) :: v.metrics; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(scope_metrics), field(2)" pk - | Some (3, Pbrt.Bytes) -> begin - v.schema_url <- Pbrt.Decoder.string d; - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(scope_metrics), field(3)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Metrics_types.scope = v.scope; - Metrics_types.metrics = v.metrics; - Metrics_types.schema_url = v.schema_url; - } : Metrics_types.scope_metrics) - -let rec decode_resource_metrics d = - let v = default_resource_metrics_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.scope_metrics <- List.rev v.scope_metrics; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.resource <- Some (Resource_pb.decode_resource (Pbrt.Decoder.nested d)); - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(resource_metrics), field(1)" pk - | Some (2, Pbrt.Bytes) -> begin - v.scope_metrics <- (decode_scope_metrics (Pbrt.Decoder.nested d)) :: v.scope_metrics; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(resource_metrics), field(2)" pk - | Some (3, Pbrt.Bytes) -> begin - v.schema_url <- Pbrt.Decoder.string d; - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(resource_metrics), field(3)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Metrics_types.resource = v.resource; - Metrics_types.scope_metrics = v.scope_metrics; - Metrics_types.schema_url = v.schema_url; - } : Metrics_types.resource_metrics) - -let rec decode_metrics_data d = - let v = default_metrics_data_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.resource_metrics <- List.rev v.resource_metrics; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.resource_metrics <- (decode_resource_metrics (Pbrt.Decoder.nested d)) :: v.resource_metrics; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(metrics_data), field(1)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Metrics_types.resource_metrics = v.resource_metrics; - } : Metrics_types.metrics_data) - -let rec decode_data_point_flags d = - match Pbrt.Decoder.int_as_varint d with - | 0 -> (Metrics_types.Data_point_flags_do_not_use:Metrics_types.data_point_flags) - | 1 -> (Metrics_types.Data_point_flags_no_recorded_value_mask:Metrics_types.data_point_flags) - | _ -> Pbrt.Decoder.malformed_variant "data_point_flags" - -let rec encode_exemplar_value (v:Metrics_types.exemplar_value) encoder = - begin match v with - | Metrics_types.As_double x -> - Pbrt.Encoder.key (3, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 x encoder; - | Metrics_types.As_int x -> - Pbrt.Encoder.key (6, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 x encoder; - end - -and encode_exemplar (v:Metrics_types.exemplar) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; - ) v.Metrics_types.filtered_attributes; - Pbrt.Encoder.key (2, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Metrics_types.time_unix_nano encoder; - begin match v.Metrics_types.value with - | Metrics_types.As_double x -> - Pbrt.Encoder.key (3, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 x encoder; - | Metrics_types.As_int x -> - Pbrt.Encoder.key (6, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 x encoder; - end; - Pbrt.Encoder.key (4, Pbrt.Bytes) encoder; - Pbrt.Encoder.bytes v.Metrics_types.span_id encoder; - Pbrt.Encoder.key (5, Pbrt.Bytes) encoder; - Pbrt.Encoder.bytes v.Metrics_types.trace_id encoder; - () - -let rec encode_number_data_point_value (v:Metrics_types.number_data_point_value) encoder = - begin match v with - | Metrics_types.As_double x -> - Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 x encoder; - | Metrics_types.As_int x -> - Pbrt.Encoder.key (6, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 x encoder; - end - -and encode_number_data_point (v:Metrics_types.number_data_point) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; - ) v.Metrics_types.attributes; - Pbrt.Encoder.key (2, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Metrics_types.start_time_unix_nano encoder; - Pbrt.Encoder.key (3, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Metrics_types.time_unix_nano encoder; - begin match v.Metrics_types.value with - | Metrics_types.As_double x -> - Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 x encoder; - | Metrics_types.As_int x -> - Pbrt.Encoder.key (6, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 x encoder; - end; - List.iter (fun x -> - Pbrt.Encoder.key (5, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_exemplar x) encoder; - ) v.Metrics_types.exemplars; - Pbrt.Encoder.key (8, Pbrt.Varint) encoder; - Pbrt.Encoder.int32_as_varint v.Metrics_types.flags encoder; - () - -let rec encode_gauge (v:Metrics_types.gauge) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_number_data_point x) encoder; - ) v.Metrics_types.data_points; - () - -let rec encode_aggregation_temporality (v:Metrics_types.aggregation_temporality) encoder = - match v with - | Metrics_types.Aggregation_temporality_unspecified -> Pbrt.Encoder.int_as_varint (0) encoder - | Metrics_types.Aggregation_temporality_delta -> Pbrt.Encoder.int_as_varint 1 encoder - | Metrics_types.Aggregation_temporality_cumulative -> Pbrt.Encoder.int_as_varint 2 encoder - -let rec encode_sum (v:Metrics_types.sum) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_number_data_point x) encoder; - ) v.Metrics_types.data_points; - Pbrt.Encoder.key (2, Pbrt.Varint) encoder; - encode_aggregation_temporality v.Metrics_types.aggregation_temporality encoder; - Pbrt.Encoder.key (3, Pbrt.Varint) encoder; - Pbrt.Encoder.bool v.Metrics_types.is_monotonic encoder; - () - -let rec encode_histogram_data_point (v:Metrics_types.histogram_data_point) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (9, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; - ) v.Metrics_types.attributes; - Pbrt.Encoder.key (2, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Metrics_types.start_time_unix_nano encoder; - Pbrt.Encoder.key (3, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Metrics_types.time_unix_nano encoder; - Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Metrics_types.count encoder; - begin match v.Metrics_types.sum with - | Some x -> - Pbrt.Encoder.key (5, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 x encoder; - | None -> (); - end; - Pbrt.Encoder.key (6, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (fun encoder -> - List.iter (fun x -> - Pbrt.Encoder.int64_as_bits64 x encoder; - ) v.Metrics_types.bucket_counts; - ) encoder; - Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (fun encoder -> - List.iter (fun x -> - Pbrt.Encoder.float_as_bits64 x encoder; - ) v.Metrics_types.explicit_bounds; - ) encoder; - List.iter (fun x -> - Pbrt.Encoder.key (8, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_exemplar x) encoder; - ) v.Metrics_types.exemplars; - Pbrt.Encoder.key (10, Pbrt.Varint) encoder; - Pbrt.Encoder.int32_as_varint v.Metrics_types.flags encoder; - begin match v.Metrics_types.min with - | Some x -> - Pbrt.Encoder.key (11, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 x encoder; - | None -> (); - end; - begin match v.Metrics_types.max with - | Some x -> - Pbrt.Encoder.key (12, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 x encoder; - | None -> (); - end; - () - -let rec encode_histogram (v:Metrics_types.histogram) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_histogram_data_point x) encoder; - ) v.Metrics_types.data_points; - Pbrt.Encoder.key (2, Pbrt.Varint) encoder; - encode_aggregation_temporality v.Metrics_types.aggregation_temporality encoder; - () - -let rec encode_exponential_histogram_data_point_buckets (v:Metrics_types.exponential_histogram_data_point_buckets) encoder = - Pbrt.Encoder.key (1, Pbrt.Varint) encoder; - Pbrt.Encoder.int32_as_zigzag v.Metrics_types.offset encoder; - Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (fun encoder -> - List.iter (fun x -> - Pbrt.Encoder.int64_as_varint x encoder; - ) v.Metrics_types.bucket_counts; - ) encoder; - () - -let rec encode_exponential_histogram_data_point (v:Metrics_types.exponential_histogram_data_point) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; - ) v.Metrics_types.attributes; - Pbrt.Encoder.key (2, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Metrics_types.start_time_unix_nano encoder; - Pbrt.Encoder.key (3, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Metrics_types.time_unix_nano encoder; - Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Metrics_types.count encoder; - begin match v.Metrics_types.sum with - | Some x -> - Pbrt.Encoder.key (5, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 x encoder; - | None -> (); - end; - Pbrt.Encoder.key (6, Pbrt.Varint) encoder; - Pbrt.Encoder.int32_as_zigzag v.Metrics_types.scale encoder; - Pbrt.Encoder.key (7, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Metrics_types.zero_count encoder; - begin match v.Metrics_types.positive with - | Some x -> - Pbrt.Encoder.key (8, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_exponential_histogram_data_point_buckets x) encoder; - | None -> (); - end; - begin match v.Metrics_types.negative with - | Some x -> - Pbrt.Encoder.key (9, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_exponential_histogram_data_point_buckets x) encoder; - | None -> (); - end; - Pbrt.Encoder.key (10, Pbrt.Varint) encoder; - Pbrt.Encoder.int32_as_varint v.Metrics_types.flags encoder; - List.iter (fun x -> - Pbrt.Encoder.key (11, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_exemplar x) encoder; - ) v.Metrics_types.exemplars; - begin match v.Metrics_types.min with - | Some x -> - Pbrt.Encoder.key (12, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 x encoder; - | None -> (); - end; - begin match v.Metrics_types.max with - | Some x -> - Pbrt.Encoder.key (13, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 x encoder; - | None -> (); - end; - Pbrt.Encoder.key (14, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 v.Metrics_types.zero_threshold encoder; - () - -let rec encode_exponential_histogram (v:Metrics_types.exponential_histogram) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_exponential_histogram_data_point x) encoder; - ) v.Metrics_types.data_points; - Pbrt.Encoder.key (2, Pbrt.Varint) encoder; - encode_aggregation_temporality v.Metrics_types.aggregation_temporality encoder; - () - -let rec encode_summary_data_point_value_at_quantile (v:Metrics_types.summary_data_point_value_at_quantile) encoder = - Pbrt.Encoder.key (1, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 v.Metrics_types.quantile encoder; - Pbrt.Encoder.key (2, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 v.Metrics_types.value encoder; - () - -let rec encode_summary_data_point (v:Metrics_types.summary_data_point) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; - ) v.Metrics_types.attributes; - Pbrt.Encoder.key (2, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Metrics_types.start_time_unix_nano encoder; - Pbrt.Encoder.key (3, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Metrics_types.time_unix_nano encoder; - Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Metrics_types.count encoder; - Pbrt.Encoder.key (5, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 v.Metrics_types.sum encoder; - List.iter (fun x -> - Pbrt.Encoder.key (6, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_summary_data_point_value_at_quantile x) encoder; - ) v.Metrics_types.quantile_values; - Pbrt.Encoder.key (8, Pbrt.Varint) encoder; - Pbrt.Encoder.int32_as_varint v.Metrics_types.flags encoder; - () - -let rec encode_summary (v:Metrics_types.summary) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_summary_data_point x) encoder; - ) v.Metrics_types.data_points; - () - -let rec encode_metric_data (v:Metrics_types.metric_data) encoder = - begin match v with - | Metrics_types.Gauge x -> - Pbrt.Encoder.key (5, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_gauge x) encoder; - | Metrics_types.Sum x -> - Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_sum x) encoder; - | Metrics_types.Histogram x -> - Pbrt.Encoder.key (9, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_histogram x) encoder; - | Metrics_types.Exponential_histogram x -> - Pbrt.Encoder.key (10, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_exponential_histogram x) encoder; - | Metrics_types.Summary x -> - Pbrt.Encoder.key (11, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_summary x) encoder; - end - -and encode_metric (v:Metrics_types.metric) encoder = - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.string v.Metrics_types.name encoder; - Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; - Pbrt.Encoder.string v.Metrics_types.description encoder; - Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; - Pbrt.Encoder.string v.Metrics_types.unit_ encoder; - begin match v.Metrics_types.data with - | Metrics_types.Gauge x -> - Pbrt.Encoder.key (5, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_gauge x) encoder; - | Metrics_types.Sum x -> - Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_sum x) encoder; - | Metrics_types.Histogram x -> - Pbrt.Encoder.key (9, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_histogram x) encoder; - | Metrics_types.Exponential_histogram x -> - Pbrt.Encoder.key (10, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_exponential_histogram x) encoder; - | Metrics_types.Summary x -> - Pbrt.Encoder.key (11, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_summary x) encoder; - end; - () - -let rec encode_scope_metrics (v:Metrics_types.scope_metrics) encoder = - begin match v.Metrics_types.scope with - | Some x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (Common_pb.encode_instrumentation_scope x) encoder; - | None -> (); - end; - List.iter (fun x -> - Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_metric x) encoder; - ) v.Metrics_types.metrics; - Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; - Pbrt.Encoder.string v.Metrics_types.schema_url encoder; - () - -let rec encode_resource_metrics (v:Metrics_types.resource_metrics) encoder = - begin match v.Metrics_types.resource with - | Some x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (Resource_pb.encode_resource x) encoder; - | None -> (); - end; - List.iter (fun x -> - Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_scope_metrics x) encoder; - ) v.Metrics_types.scope_metrics; - Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; - Pbrt.Encoder.string v.Metrics_types.schema_url encoder; - () - -let rec encode_metrics_data (v:Metrics_types.metrics_data) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_resource_metrics x) encoder; - ) v.Metrics_types.resource_metrics; - () - -let rec encode_data_point_flags (v:Metrics_types.data_point_flags) encoder = - match v with - | Metrics_types.Data_point_flags_do_not_use -> Pbrt.Encoder.int_as_varint (0) encoder - | Metrics_types.Data_point_flags_no_recorded_value_mask -> Pbrt.Encoder.int_as_varint 1 encoder diff --git a/src/metrics_pb.mli b/src/metrics_pb.mli deleted file mode 100644 index 6393cedd..00000000 --- a/src/metrics_pb.mli +++ /dev/null @@ -1,133 +0,0 @@ -(** metrics.proto Binary Encoding *) - - -(** {2 Protobuf Encoding} *) - -val encode_exemplar_value : Metrics_types.exemplar_value -> Pbrt.Encoder.t -> unit -(** [encode_exemplar_value v encoder] encodes [v] with the given [encoder] *) - -val encode_exemplar : Metrics_types.exemplar -> Pbrt.Encoder.t -> unit -(** [encode_exemplar v encoder] encodes [v] with the given [encoder] *) - -val encode_number_data_point_value : Metrics_types.number_data_point_value -> Pbrt.Encoder.t -> unit -(** [encode_number_data_point_value v encoder] encodes [v] with the given [encoder] *) - -val encode_number_data_point : Metrics_types.number_data_point -> Pbrt.Encoder.t -> unit -(** [encode_number_data_point v encoder] encodes [v] with the given [encoder] *) - -val encode_gauge : Metrics_types.gauge -> Pbrt.Encoder.t -> unit -(** [encode_gauge v encoder] encodes [v] with the given [encoder] *) - -val encode_aggregation_temporality : Metrics_types.aggregation_temporality -> Pbrt.Encoder.t -> unit -(** [encode_aggregation_temporality v encoder] encodes [v] with the given [encoder] *) - -val encode_sum : Metrics_types.sum -> Pbrt.Encoder.t -> unit -(** [encode_sum v encoder] encodes [v] with the given [encoder] *) - -val encode_histogram_data_point : Metrics_types.histogram_data_point -> Pbrt.Encoder.t -> unit -(** [encode_histogram_data_point v encoder] encodes [v] with the given [encoder] *) - -val encode_histogram : Metrics_types.histogram -> Pbrt.Encoder.t -> unit -(** [encode_histogram v encoder] encodes [v] with the given [encoder] *) - -val encode_exponential_histogram_data_point_buckets : Metrics_types.exponential_histogram_data_point_buckets -> Pbrt.Encoder.t -> unit -(** [encode_exponential_histogram_data_point_buckets v encoder] encodes [v] with the given [encoder] *) - -val encode_exponential_histogram_data_point : Metrics_types.exponential_histogram_data_point -> Pbrt.Encoder.t -> unit -(** [encode_exponential_histogram_data_point v encoder] encodes [v] with the given [encoder] *) - -val encode_exponential_histogram : Metrics_types.exponential_histogram -> Pbrt.Encoder.t -> unit -(** [encode_exponential_histogram v encoder] encodes [v] with the given [encoder] *) - -val encode_summary_data_point_value_at_quantile : Metrics_types.summary_data_point_value_at_quantile -> Pbrt.Encoder.t -> unit -(** [encode_summary_data_point_value_at_quantile v encoder] encodes [v] with the given [encoder] *) - -val encode_summary_data_point : Metrics_types.summary_data_point -> Pbrt.Encoder.t -> unit -(** [encode_summary_data_point v encoder] encodes [v] with the given [encoder] *) - -val encode_summary : Metrics_types.summary -> Pbrt.Encoder.t -> unit -(** [encode_summary v encoder] encodes [v] with the given [encoder] *) - -val encode_metric_data : Metrics_types.metric_data -> Pbrt.Encoder.t -> unit -(** [encode_metric_data v encoder] encodes [v] with the given [encoder] *) - -val encode_metric : Metrics_types.metric -> Pbrt.Encoder.t -> unit -(** [encode_metric v encoder] encodes [v] with the given [encoder] *) - -val encode_scope_metrics : Metrics_types.scope_metrics -> Pbrt.Encoder.t -> unit -(** [encode_scope_metrics v encoder] encodes [v] with the given [encoder] *) - -val encode_resource_metrics : Metrics_types.resource_metrics -> Pbrt.Encoder.t -> unit -(** [encode_resource_metrics v encoder] encodes [v] with the given [encoder] *) - -val encode_metrics_data : Metrics_types.metrics_data -> Pbrt.Encoder.t -> unit -(** [encode_metrics_data v encoder] encodes [v] with the given [encoder] *) - -val encode_data_point_flags : Metrics_types.data_point_flags -> Pbrt.Encoder.t -> unit -(** [encode_data_point_flags v encoder] encodes [v] with the given [encoder] *) - - -(** {2 Protobuf Decoding} *) - -val decode_exemplar_value : Pbrt.Decoder.t -> Metrics_types.exemplar_value -(** [decode_exemplar_value decoder] decodes a [exemplar_value] value from [decoder] *) - -val decode_exemplar : Pbrt.Decoder.t -> Metrics_types.exemplar -(** [decode_exemplar decoder] decodes a [exemplar] value from [decoder] *) - -val decode_number_data_point_value : Pbrt.Decoder.t -> Metrics_types.number_data_point_value -(** [decode_number_data_point_value decoder] decodes a [number_data_point_value] value from [decoder] *) - -val decode_number_data_point : Pbrt.Decoder.t -> Metrics_types.number_data_point -(** [decode_number_data_point decoder] decodes a [number_data_point] value from [decoder] *) - -val decode_gauge : Pbrt.Decoder.t -> Metrics_types.gauge -(** [decode_gauge decoder] decodes a [gauge] value from [decoder] *) - -val decode_aggregation_temporality : Pbrt.Decoder.t -> Metrics_types.aggregation_temporality -(** [decode_aggregation_temporality decoder] decodes a [aggregation_temporality] value from [decoder] *) - -val decode_sum : Pbrt.Decoder.t -> Metrics_types.sum -(** [decode_sum decoder] decodes a [sum] value from [decoder] *) - -val decode_histogram_data_point : Pbrt.Decoder.t -> Metrics_types.histogram_data_point -(** [decode_histogram_data_point decoder] decodes a [histogram_data_point] value from [decoder] *) - -val decode_histogram : Pbrt.Decoder.t -> Metrics_types.histogram -(** [decode_histogram decoder] decodes a [histogram] value from [decoder] *) - -val decode_exponential_histogram_data_point_buckets : Pbrt.Decoder.t -> Metrics_types.exponential_histogram_data_point_buckets -(** [decode_exponential_histogram_data_point_buckets decoder] decodes a [exponential_histogram_data_point_buckets] value from [decoder] *) - -val decode_exponential_histogram_data_point : Pbrt.Decoder.t -> Metrics_types.exponential_histogram_data_point -(** [decode_exponential_histogram_data_point decoder] decodes a [exponential_histogram_data_point] value from [decoder] *) - -val decode_exponential_histogram : Pbrt.Decoder.t -> Metrics_types.exponential_histogram -(** [decode_exponential_histogram decoder] decodes a [exponential_histogram] value from [decoder] *) - -val decode_summary_data_point_value_at_quantile : Pbrt.Decoder.t -> Metrics_types.summary_data_point_value_at_quantile -(** [decode_summary_data_point_value_at_quantile decoder] decodes a [summary_data_point_value_at_quantile] value from [decoder] *) - -val decode_summary_data_point : Pbrt.Decoder.t -> Metrics_types.summary_data_point -(** [decode_summary_data_point decoder] decodes a [summary_data_point] value from [decoder] *) - -val decode_summary : Pbrt.Decoder.t -> Metrics_types.summary -(** [decode_summary decoder] decodes a [summary] value from [decoder] *) - -val decode_metric_data : Pbrt.Decoder.t -> Metrics_types.metric_data -(** [decode_metric_data decoder] decodes a [metric_data] value from [decoder] *) - -val decode_metric : Pbrt.Decoder.t -> Metrics_types.metric -(** [decode_metric decoder] decodes a [metric] value from [decoder] *) - -val decode_scope_metrics : Pbrt.Decoder.t -> Metrics_types.scope_metrics -(** [decode_scope_metrics decoder] decodes a [scope_metrics] value from [decoder] *) - -val decode_resource_metrics : Pbrt.Decoder.t -> Metrics_types.resource_metrics -(** [decode_resource_metrics decoder] decodes a [resource_metrics] value from [decoder] *) - -val decode_metrics_data : Pbrt.Decoder.t -> Metrics_types.metrics_data -(** [decode_metrics_data decoder] decodes a [metrics_data] value from [decoder] *) - -val decode_data_point_flags : Pbrt.Decoder.t -> Metrics_types.data_point_flags -(** [decode_data_point_flags decoder] decodes a [data_point_flags] value from [decoder] *) diff --git a/src/metrics_pp.ml b/src/metrics_pp.ml deleted file mode 100644 index 838343ff..00000000 --- a/src/metrics_pp.ml +++ /dev/null @@ -1,177 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - -let rec pp_exemplar_value fmt (v:Metrics_types.exemplar_value) = - match v with - | Metrics_types.As_double x -> Format.fprintf fmt "@[As_double(@,%a)@]" Pbrt.Pp.pp_float x - | Metrics_types.As_int x -> Format.fprintf fmt "@[As_int(@,%a)@]" Pbrt.Pp.pp_int64 x - -and pp_exemplar fmt (v:Metrics_types.exemplar) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "filtered_attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Metrics_types.filtered_attributes; - Pbrt.Pp.pp_record_field ~first:false "time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.time_unix_nano; - Pbrt.Pp.pp_record_field ~first:false "value" pp_exemplar_value fmt v.Metrics_types.value; - Pbrt.Pp.pp_record_field ~first:false "span_id" Pbrt.Pp.pp_bytes fmt v.Metrics_types.span_id; - Pbrt.Pp.pp_record_field ~first:false "trace_id" Pbrt.Pp.pp_bytes fmt v.Metrics_types.trace_id; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_number_data_point_value fmt (v:Metrics_types.number_data_point_value) = - match v with - | Metrics_types.As_double x -> Format.fprintf fmt "@[As_double(@,%a)@]" Pbrt.Pp.pp_float x - | Metrics_types.As_int x -> Format.fprintf fmt "@[As_int(@,%a)@]" Pbrt.Pp.pp_int64 x - -and pp_number_data_point fmt (v:Metrics_types.number_data_point) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Metrics_types.attributes; - Pbrt.Pp.pp_record_field ~first:false "start_time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.start_time_unix_nano; - Pbrt.Pp.pp_record_field ~first:false "time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.time_unix_nano; - Pbrt.Pp.pp_record_field ~first:false "value" pp_number_data_point_value fmt v.Metrics_types.value; - Pbrt.Pp.pp_record_field ~first:false "exemplars" (Pbrt.Pp.pp_list pp_exemplar) fmt v.Metrics_types.exemplars; - Pbrt.Pp.pp_record_field ~first:false "flags" Pbrt.Pp.pp_int32 fmt v.Metrics_types.flags; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_gauge fmt (v:Metrics_types.gauge) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "data_points" (Pbrt.Pp.pp_list pp_number_data_point) fmt v.Metrics_types.data_points; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_aggregation_temporality fmt (v:Metrics_types.aggregation_temporality) = - match v with - | Metrics_types.Aggregation_temporality_unspecified -> Format.fprintf fmt "Aggregation_temporality_unspecified" - | Metrics_types.Aggregation_temporality_delta -> Format.fprintf fmt "Aggregation_temporality_delta" - | Metrics_types.Aggregation_temporality_cumulative -> Format.fprintf fmt "Aggregation_temporality_cumulative" - -let rec pp_sum fmt (v:Metrics_types.sum) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "data_points" (Pbrt.Pp.pp_list pp_number_data_point) fmt v.Metrics_types.data_points; - Pbrt.Pp.pp_record_field ~first:false "aggregation_temporality" pp_aggregation_temporality fmt v.Metrics_types.aggregation_temporality; - Pbrt.Pp.pp_record_field ~first:false "is_monotonic" Pbrt.Pp.pp_bool fmt v.Metrics_types.is_monotonic; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_histogram_data_point fmt (v:Metrics_types.histogram_data_point) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Metrics_types.attributes; - Pbrt.Pp.pp_record_field ~first:false "start_time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.start_time_unix_nano; - Pbrt.Pp.pp_record_field ~first:false "time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.time_unix_nano; - Pbrt.Pp.pp_record_field ~first:false "count" Pbrt.Pp.pp_int64 fmt v.Metrics_types.count; - Pbrt.Pp.pp_record_field ~first:false "sum" (Pbrt.Pp.pp_option Pbrt.Pp.pp_float) fmt v.Metrics_types.sum; - Pbrt.Pp.pp_record_field ~first:false "bucket_counts" (Pbrt.Pp.pp_list Pbrt.Pp.pp_int64) fmt v.Metrics_types.bucket_counts; - Pbrt.Pp.pp_record_field ~first:false "explicit_bounds" (Pbrt.Pp.pp_list Pbrt.Pp.pp_float) fmt v.Metrics_types.explicit_bounds; - Pbrt.Pp.pp_record_field ~first:false "exemplars" (Pbrt.Pp.pp_list pp_exemplar) fmt v.Metrics_types.exemplars; - Pbrt.Pp.pp_record_field ~first:false "flags" Pbrt.Pp.pp_int32 fmt v.Metrics_types.flags; - Pbrt.Pp.pp_record_field ~first:false "min" (Pbrt.Pp.pp_option Pbrt.Pp.pp_float) fmt v.Metrics_types.min; - Pbrt.Pp.pp_record_field ~first:false "max" (Pbrt.Pp.pp_option Pbrt.Pp.pp_float) fmt v.Metrics_types.max; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_histogram fmt (v:Metrics_types.histogram) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "data_points" (Pbrt.Pp.pp_list pp_histogram_data_point) fmt v.Metrics_types.data_points; - Pbrt.Pp.pp_record_field ~first:false "aggregation_temporality" pp_aggregation_temporality fmt v.Metrics_types.aggregation_temporality; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_exponential_histogram_data_point_buckets fmt (v:Metrics_types.exponential_histogram_data_point_buckets) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "offset" Pbrt.Pp.pp_int32 fmt v.Metrics_types.offset; - Pbrt.Pp.pp_record_field ~first:false "bucket_counts" (Pbrt.Pp.pp_list Pbrt.Pp.pp_int64) fmt v.Metrics_types.bucket_counts; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_exponential_histogram_data_point fmt (v:Metrics_types.exponential_histogram_data_point) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Metrics_types.attributes; - Pbrt.Pp.pp_record_field ~first:false "start_time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.start_time_unix_nano; - Pbrt.Pp.pp_record_field ~first:false "time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.time_unix_nano; - Pbrt.Pp.pp_record_field ~first:false "count" Pbrt.Pp.pp_int64 fmt v.Metrics_types.count; - Pbrt.Pp.pp_record_field ~first:false "sum" (Pbrt.Pp.pp_option Pbrt.Pp.pp_float) fmt v.Metrics_types.sum; - Pbrt.Pp.pp_record_field ~first:false "scale" Pbrt.Pp.pp_int32 fmt v.Metrics_types.scale; - Pbrt.Pp.pp_record_field ~first:false "zero_count" Pbrt.Pp.pp_int64 fmt v.Metrics_types.zero_count; - Pbrt.Pp.pp_record_field ~first:false "positive" (Pbrt.Pp.pp_option pp_exponential_histogram_data_point_buckets) fmt v.Metrics_types.positive; - Pbrt.Pp.pp_record_field ~first:false "negative" (Pbrt.Pp.pp_option pp_exponential_histogram_data_point_buckets) fmt v.Metrics_types.negative; - Pbrt.Pp.pp_record_field ~first:false "flags" Pbrt.Pp.pp_int32 fmt v.Metrics_types.flags; - Pbrt.Pp.pp_record_field ~first:false "exemplars" (Pbrt.Pp.pp_list pp_exemplar) fmt v.Metrics_types.exemplars; - Pbrt.Pp.pp_record_field ~first:false "min" (Pbrt.Pp.pp_option Pbrt.Pp.pp_float) fmt v.Metrics_types.min; - Pbrt.Pp.pp_record_field ~first:false "max" (Pbrt.Pp.pp_option Pbrt.Pp.pp_float) fmt v.Metrics_types.max; - Pbrt.Pp.pp_record_field ~first:false "zero_threshold" Pbrt.Pp.pp_float fmt v.Metrics_types.zero_threshold; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_exponential_histogram fmt (v:Metrics_types.exponential_histogram) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "data_points" (Pbrt.Pp.pp_list pp_exponential_histogram_data_point) fmt v.Metrics_types.data_points; - Pbrt.Pp.pp_record_field ~first:false "aggregation_temporality" pp_aggregation_temporality fmt v.Metrics_types.aggregation_temporality; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_summary_data_point_value_at_quantile fmt (v:Metrics_types.summary_data_point_value_at_quantile) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "quantile" Pbrt.Pp.pp_float fmt v.Metrics_types.quantile; - Pbrt.Pp.pp_record_field ~first:false "value" Pbrt.Pp.pp_float fmt v.Metrics_types.value; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_summary_data_point fmt (v:Metrics_types.summary_data_point) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Metrics_types.attributes; - Pbrt.Pp.pp_record_field ~first:false "start_time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.start_time_unix_nano; - Pbrt.Pp.pp_record_field ~first:false "time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.time_unix_nano; - Pbrt.Pp.pp_record_field ~first:false "count" Pbrt.Pp.pp_int64 fmt v.Metrics_types.count; - Pbrt.Pp.pp_record_field ~first:false "sum" Pbrt.Pp.pp_float fmt v.Metrics_types.sum; - Pbrt.Pp.pp_record_field ~first:false "quantile_values" (Pbrt.Pp.pp_list pp_summary_data_point_value_at_quantile) fmt v.Metrics_types.quantile_values; - Pbrt.Pp.pp_record_field ~first:false "flags" Pbrt.Pp.pp_int32 fmt v.Metrics_types.flags; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_summary fmt (v:Metrics_types.summary) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "data_points" (Pbrt.Pp.pp_list pp_summary_data_point) fmt v.Metrics_types.data_points; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_metric_data fmt (v:Metrics_types.metric_data) = - match v with - | Metrics_types.Gauge x -> Format.fprintf fmt "@[Gauge(@,%a)@]" pp_gauge x - | Metrics_types.Sum x -> Format.fprintf fmt "@[Sum(@,%a)@]" pp_sum x - | Metrics_types.Histogram x -> Format.fprintf fmt "@[Histogram(@,%a)@]" pp_histogram x - | Metrics_types.Exponential_histogram x -> Format.fprintf fmt "@[Exponential_histogram(@,%a)@]" pp_exponential_histogram x - | Metrics_types.Summary x -> Format.fprintf fmt "@[Summary(@,%a)@]" pp_summary x - -and pp_metric fmt (v:Metrics_types.metric) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "name" Pbrt.Pp.pp_string fmt v.Metrics_types.name; - Pbrt.Pp.pp_record_field ~first:false "description" Pbrt.Pp.pp_string fmt v.Metrics_types.description; - Pbrt.Pp.pp_record_field ~first:false "unit_" Pbrt.Pp.pp_string fmt v.Metrics_types.unit_; - Pbrt.Pp.pp_record_field ~first:false "data" pp_metric_data fmt v.Metrics_types.data; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_scope_metrics fmt (v:Metrics_types.scope_metrics) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "scope" (Pbrt.Pp.pp_option Common_pp.pp_instrumentation_scope) fmt v.Metrics_types.scope; - Pbrt.Pp.pp_record_field ~first:false "metrics" (Pbrt.Pp.pp_list pp_metric) fmt v.Metrics_types.metrics; - Pbrt.Pp.pp_record_field ~first:false "schema_url" Pbrt.Pp.pp_string fmt v.Metrics_types.schema_url; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_resource_metrics fmt (v:Metrics_types.resource_metrics) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "resource" (Pbrt.Pp.pp_option Resource_pp.pp_resource) fmt v.Metrics_types.resource; - Pbrt.Pp.pp_record_field ~first:false "scope_metrics" (Pbrt.Pp.pp_list pp_scope_metrics) fmt v.Metrics_types.scope_metrics; - Pbrt.Pp.pp_record_field ~first:false "schema_url" Pbrt.Pp.pp_string fmt v.Metrics_types.schema_url; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_metrics_data fmt (v:Metrics_types.metrics_data) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "resource_metrics" (Pbrt.Pp.pp_list pp_resource_metrics) fmt v.Metrics_types.resource_metrics; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_data_point_flags fmt (v:Metrics_types.data_point_flags) = - match v with - | Metrics_types.Data_point_flags_do_not_use -> Format.fprintf fmt "Data_point_flags_do_not_use" - | Metrics_types.Data_point_flags_no_recorded_value_mask -> Format.fprintf fmt "Data_point_flags_no_recorded_value_mask" diff --git a/src/metrics_pp.mli b/src/metrics_pp.mli deleted file mode 100644 index c506e897..00000000 --- a/src/metrics_pp.mli +++ /dev/null @@ -1,67 +0,0 @@ -(** metrics.proto Pretty Printing *) - - -(** {2 Formatters} *) - -val pp_exemplar_value : Format.formatter -> Metrics_types.exemplar_value -> unit -(** [pp_exemplar_value v] formats v *) - -val pp_exemplar : Format.formatter -> Metrics_types.exemplar -> unit -(** [pp_exemplar v] formats v *) - -val pp_number_data_point_value : Format.formatter -> Metrics_types.number_data_point_value -> unit -(** [pp_number_data_point_value v] formats v *) - -val pp_number_data_point : Format.formatter -> Metrics_types.number_data_point -> unit -(** [pp_number_data_point v] formats v *) - -val pp_gauge : Format.formatter -> Metrics_types.gauge -> unit -(** [pp_gauge v] formats v *) - -val pp_aggregation_temporality : Format.formatter -> Metrics_types.aggregation_temporality -> unit -(** [pp_aggregation_temporality v] formats v *) - -val pp_sum : Format.formatter -> Metrics_types.sum -> unit -(** [pp_sum v] formats v *) - -val pp_histogram_data_point : Format.formatter -> Metrics_types.histogram_data_point -> unit -(** [pp_histogram_data_point v] formats v *) - -val pp_histogram : Format.formatter -> Metrics_types.histogram -> unit -(** [pp_histogram v] formats v *) - -val pp_exponential_histogram_data_point_buckets : Format.formatter -> Metrics_types.exponential_histogram_data_point_buckets -> unit -(** [pp_exponential_histogram_data_point_buckets v] formats v *) - -val pp_exponential_histogram_data_point : Format.formatter -> Metrics_types.exponential_histogram_data_point -> unit -(** [pp_exponential_histogram_data_point v] formats v *) - -val pp_exponential_histogram : Format.formatter -> Metrics_types.exponential_histogram -> unit -(** [pp_exponential_histogram v] formats v *) - -val pp_summary_data_point_value_at_quantile : Format.formatter -> Metrics_types.summary_data_point_value_at_quantile -> unit -(** [pp_summary_data_point_value_at_quantile v] formats v *) - -val pp_summary_data_point : Format.formatter -> Metrics_types.summary_data_point -> unit -(** [pp_summary_data_point v] formats v *) - -val pp_summary : Format.formatter -> Metrics_types.summary -> unit -(** [pp_summary v] formats v *) - -val pp_metric_data : Format.formatter -> Metrics_types.metric_data -> unit -(** [pp_metric_data v] formats v *) - -val pp_metric : Format.formatter -> Metrics_types.metric -> unit -(** [pp_metric v] formats v *) - -val pp_scope_metrics : Format.formatter -> Metrics_types.scope_metrics -> unit -(** [pp_scope_metrics v] formats v *) - -val pp_resource_metrics : Format.formatter -> Metrics_types.resource_metrics -> unit -(** [pp_resource_metrics v] formats v *) - -val pp_metrics_data : Format.formatter -> Metrics_types.metrics_data -> unit -(** [pp_metrics_data v] formats v *) - -val pp_data_point_flags : Format.formatter -> Metrics_types.data_point_flags -> unit -(** [pp_data_point_flags v] formats v *) diff --git a/src/metrics_service_pb.ml b/src/metrics_service_pb.ml deleted file mode 100644 index dd839d9b..00000000 --- a/src/metrics_service_pb.ml +++ /dev/null @@ -1,112 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - -type export_metrics_service_request_mutable = { - mutable resource_metrics : Metrics_types.resource_metrics list; -} - -let default_export_metrics_service_request_mutable () : export_metrics_service_request_mutable = { - resource_metrics = []; -} - -type export_metrics_partial_success_mutable = { - mutable rejected_data_points : int64; - mutable error_message : string; -} - -let default_export_metrics_partial_success_mutable () : export_metrics_partial_success_mutable = { - rejected_data_points = 0L; - error_message = ""; -} - -type export_metrics_service_response_mutable = { - mutable partial_success : Metrics_service_types.export_metrics_partial_success option; -} - -let default_export_metrics_service_response_mutable () : export_metrics_service_response_mutable = { - partial_success = None; -} - - -let rec decode_export_metrics_service_request d = - let v = default_export_metrics_service_request_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.resource_metrics <- List.rev v.resource_metrics; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.resource_metrics <- (Metrics_pb.decode_resource_metrics (Pbrt.Decoder.nested d)) :: v.resource_metrics; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(export_metrics_service_request), field(1)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Metrics_service_types.resource_metrics = v.resource_metrics; - } : Metrics_service_types.export_metrics_service_request) - -let rec decode_export_metrics_partial_success d = - let v = default_export_metrics_partial_success_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - ); continue__ := false - | Some (1, Pbrt.Varint) -> begin - v.rejected_data_points <- Pbrt.Decoder.int64_as_varint d; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(export_metrics_partial_success), field(1)" pk - | Some (2, Pbrt.Bytes) -> begin - v.error_message <- Pbrt.Decoder.string d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(export_metrics_partial_success), field(2)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Metrics_service_types.rejected_data_points = v.rejected_data_points; - Metrics_service_types.error_message = v.error_message; - } : Metrics_service_types.export_metrics_partial_success) - -let rec decode_export_metrics_service_response d = - let v = default_export_metrics_service_response_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.partial_success <- Some (decode_export_metrics_partial_success (Pbrt.Decoder.nested d)); - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(export_metrics_service_response), field(1)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Metrics_service_types.partial_success = v.partial_success; - } : Metrics_service_types.export_metrics_service_response) - -let rec encode_export_metrics_service_request (v:Metrics_service_types.export_metrics_service_request) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (Metrics_pb.encode_resource_metrics x) encoder; - ) v.Metrics_service_types.resource_metrics; - () - -let rec encode_export_metrics_partial_success (v:Metrics_service_types.export_metrics_partial_success) encoder = - Pbrt.Encoder.key (1, Pbrt.Varint) encoder; - Pbrt.Encoder.int64_as_varint v.Metrics_service_types.rejected_data_points encoder; - Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; - Pbrt.Encoder.string v.Metrics_service_types.error_message encoder; - () - -let rec encode_export_metrics_service_response (v:Metrics_service_types.export_metrics_service_response) encoder = - begin match v.Metrics_service_types.partial_success with - | Some x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_export_metrics_partial_success x) encoder; - | None -> (); - end; - () diff --git a/src/metrics_service_pb.mli b/src/metrics_service_pb.mli deleted file mode 100644 index ed839b04..00000000 --- a/src/metrics_service_pb.mli +++ /dev/null @@ -1,25 +0,0 @@ -(** metrics_service.proto Binary Encoding *) - - -(** {2 Protobuf Encoding} *) - -val encode_export_metrics_service_request : Metrics_service_types.export_metrics_service_request -> Pbrt.Encoder.t -> unit -(** [encode_export_metrics_service_request v encoder] encodes [v] with the given [encoder] *) - -val encode_export_metrics_partial_success : Metrics_service_types.export_metrics_partial_success -> Pbrt.Encoder.t -> unit -(** [encode_export_metrics_partial_success v encoder] encodes [v] with the given [encoder] *) - -val encode_export_metrics_service_response : Metrics_service_types.export_metrics_service_response -> Pbrt.Encoder.t -> unit -(** [encode_export_metrics_service_response v encoder] encodes [v] with the given [encoder] *) - - -(** {2 Protobuf Decoding} *) - -val decode_export_metrics_service_request : Pbrt.Decoder.t -> Metrics_service_types.export_metrics_service_request -(** [decode_export_metrics_service_request decoder] decodes a [export_metrics_service_request] value from [decoder] *) - -val decode_export_metrics_partial_success : Pbrt.Decoder.t -> Metrics_service_types.export_metrics_partial_success -(** [decode_export_metrics_partial_success decoder] decodes a [export_metrics_partial_success] value from [decoder] *) - -val decode_export_metrics_service_response : Pbrt.Decoder.t -> Metrics_service_types.export_metrics_service_response -(** [decode_export_metrics_service_response decoder] decodes a [export_metrics_service_response] value from [decoder] *) diff --git a/src/metrics_service_pp.ml b/src/metrics_service_pp.ml deleted file mode 100644 index bb0f7a3b..00000000 --- a/src/metrics_service_pp.ml +++ /dev/null @@ -1,20 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - -let rec pp_export_metrics_service_request fmt (v:Metrics_service_types.export_metrics_service_request) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "resource_metrics" (Pbrt.Pp.pp_list Metrics_pp.pp_resource_metrics) fmt v.Metrics_service_types.resource_metrics; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_export_metrics_partial_success fmt (v:Metrics_service_types.export_metrics_partial_success) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "rejected_data_points" Pbrt.Pp.pp_int64 fmt v.Metrics_service_types.rejected_data_points; - Pbrt.Pp.pp_record_field ~first:false "error_message" Pbrt.Pp.pp_string fmt v.Metrics_service_types.error_message; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_export_metrics_service_response fmt (v:Metrics_service_types.export_metrics_service_response) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "partial_success" (Pbrt.Pp.pp_option pp_export_metrics_partial_success) fmt v.Metrics_service_types.partial_success; - in - Pbrt.Pp.pp_brk pp_i fmt () diff --git a/src/metrics_service_pp.mli b/src/metrics_service_pp.mli deleted file mode 100644 index 90301da8..00000000 --- a/src/metrics_service_pp.mli +++ /dev/null @@ -1,13 +0,0 @@ -(** metrics_service.proto Pretty Printing *) - - -(** {2 Formatters} *) - -val pp_export_metrics_service_request : Format.formatter -> Metrics_service_types.export_metrics_service_request -> unit -(** [pp_export_metrics_service_request v] formats v *) - -val pp_export_metrics_partial_success : Format.formatter -> Metrics_service_types.export_metrics_partial_success -> unit -(** [pp_export_metrics_partial_success v] formats v *) - -val pp_export_metrics_service_response : Format.formatter -> Metrics_service_types.export_metrics_service_response -> unit -(** [pp_export_metrics_service_response v] formats v *) diff --git a/src/metrics_service_types.ml b/src/metrics_service_types.ml deleted file mode 100644 index 8b252a24..00000000 --- a/src/metrics_service_types.ml +++ /dev/null @@ -1,35 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - - -type export_metrics_service_request = { - resource_metrics : Metrics_types.resource_metrics list; -} - -type export_metrics_partial_success = { - rejected_data_points : int64; - error_message : string; -} - -type export_metrics_service_response = { - partial_success : export_metrics_partial_success option; -} - -let rec default_export_metrics_service_request - ?resource_metrics:((resource_metrics:Metrics_types.resource_metrics list) = []) - () : export_metrics_service_request = { - resource_metrics; -} - -let rec default_export_metrics_partial_success - ?rejected_data_points:((rejected_data_points:int64) = 0L) - ?error_message:((error_message:string) = "") - () : export_metrics_partial_success = { - rejected_data_points; - error_message; -} - -let rec default_export_metrics_service_response - ?partial_success:((partial_success:export_metrics_partial_success option) = None) - () : export_metrics_service_response = { - partial_success; -} diff --git a/src/metrics_service_types.mli b/src/metrics_service_types.mli deleted file mode 100644 index cbcddfed..00000000 --- a/src/metrics_service_types.mli +++ /dev/null @@ -1,40 +0,0 @@ -(** metrics_service.proto Types *) - - - -(** {2 Types} *) - -type export_metrics_service_request = { - resource_metrics : Metrics_types.resource_metrics list; -} - -type export_metrics_partial_success = { - rejected_data_points : int64; - error_message : string; -} - -type export_metrics_service_response = { - partial_success : export_metrics_partial_success option; -} - - -(** {2 Default values} *) - -val default_export_metrics_service_request : - ?resource_metrics:Metrics_types.resource_metrics list -> - unit -> - export_metrics_service_request -(** [default_export_metrics_service_request ()] is the default value for type [export_metrics_service_request] *) - -val default_export_metrics_partial_success : - ?rejected_data_points:int64 -> - ?error_message:string -> - unit -> - export_metrics_partial_success -(** [default_export_metrics_partial_success ()] is the default value for type [export_metrics_partial_success] *) - -val default_export_metrics_service_response : - ?partial_success:export_metrics_partial_success option -> - unit -> - export_metrics_service_response -(** [default_export_metrics_service_response ()] is the default value for type [export_metrics_service_response] *) diff --git a/src/metrics_types.ml b/src/metrics_types.ml deleted file mode 100644 index 4cd9c09e..00000000 --- a/src/metrics_types.ml +++ /dev/null @@ -1,349 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - - -type exemplar_value = - | As_double of float - | As_int of int64 - -and exemplar = { - filtered_attributes : Common_types.key_value list; - time_unix_nano : int64; - value : exemplar_value; - span_id : bytes; - trace_id : bytes; -} - -type number_data_point_value = - | As_double of float - | As_int of int64 - -and number_data_point = { - attributes : Common_types.key_value list; - start_time_unix_nano : int64; - time_unix_nano : int64; - value : number_data_point_value; - exemplars : exemplar list; - flags : int32; -} - -type gauge = { - data_points : number_data_point list; -} - -type aggregation_temporality = - | Aggregation_temporality_unspecified - | Aggregation_temporality_delta - | Aggregation_temporality_cumulative - -type sum = { - data_points : number_data_point list; - aggregation_temporality : aggregation_temporality; - is_monotonic : bool; -} - -type histogram_data_point = { - attributes : Common_types.key_value list; - start_time_unix_nano : int64; - time_unix_nano : int64; - count : int64; - sum : float option; - bucket_counts : int64 list; - explicit_bounds : float list; - exemplars : exemplar list; - flags : int32; - min : float option; - max : float option; -} - -type histogram = { - data_points : histogram_data_point list; - aggregation_temporality : aggregation_temporality; -} - -type exponential_histogram_data_point_buckets = { - offset : int32; - bucket_counts : int64 list; -} - -type exponential_histogram_data_point = { - attributes : Common_types.key_value list; - start_time_unix_nano : int64; - time_unix_nano : int64; - count : int64; - sum : float option; - scale : int32; - zero_count : int64; - positive : exponential_histogram_data_point_buckets option; - negative : exponential_histogram_data_point_buckets option; - flags : int32; - exemplars : exemplar list; - min : float option; - max : float option; - zero_threshold : float; -} - -type exponential_histogram = { - data_points : exponential_histogram_data_point list; - aggregation_temporality : aggregation_temporality; -} - -type summary_data_point_value_at_quantile = { - quantile : float; - value : float; -} - -type summary_data_point = { - attributes : Common_types.key_value list; - start_time_unix_nano : int64; - time_unix_nano : int64; - count : int64; - sum : float; - quantile_values : summary_data_point_value_at_quantile list; - flags : int32; -} - -type summary = { - data_points : summary_data_point list; -} - -type metric_data = - | Gauge of gauge - | Sum of sum - | Histogram of histogram - | Exponential_histogram of exponential_histogram - | Summary of summary - -and metric = { - name : string; - description : string; - unit_ : string; - data : metric_data; -} - -type scope_metrics = { - scope : Common_types.instrumentation_scope option; - metrics : metric list; - schema_url : string; -} - -type resource_metrics = { - resource : Resource_types.resource option; - scope_metrics : scope_metrics list; - schema_url : string; -} - -type metrics_data = { - resource_metrics : resource_metrics list; -} - -type data_point_flags = - | Data_point_flags_do_not_use - | Data_point_flags_no_recorded_value_mask - -let rec default_exemplar_value () : exemplar_value = As_double (0.) - -and default_exemplar - ?filtered_attributes:((filtered_attributes:Common_types.key_value list) = []) - ?time_unix_nano:((time_unix_nano:int64) = 0L) - ?value:((value:exemplar_value) = As_double (0.)) - ?span_id:((span_id:bytes) = Bytes.create 0) - ?trace_id:((trace_id:bytes) = Bytes.create 0) - () : exemplar = { - filtered_attributes; - time_unix_nano; - value; - span_id; - trace_id; -} - -let rec default_number_data_point_value () : number_data_point_value = As_double (0.) - -and default_number_data_point - ?attributes:((attributes:Common_types.key_value list) = []) - ?start_time_unix_nano:((start_time_unix_nano:int64) = 0L) - ?time_unix_nano:((time_unix_nano:int64) = 0L) - ?value:((value:number_data_point_value) = As_double (0.)) - ?exemplars:((exemplars:exemplar list) = []) - ?flags:((flags:int32) = 0l) - () : number_data_point = { - attributes; - start_time_unix_nano; - time_unix_nano; - value; - exemplars; - flags; -} - -let rec default_gauge - ?data_points:((data_points:number_data_point list) = []) - () : gauge = { - data_points; -} - -let rec default_aggregation_temporality () = (Aggregation_temporality_unspecified:aggregation_temporality) - -let rec default_sum - ?data_points:((data_points:number_data_point list) = []) - ?aggregation_temporality:((aggregation_temporality:aggregation_temporality) = default_aggregation_temporality ()) - ?is_monotonic:((is_monotonic:bool) = false) - () : sum = { - data_points; - aggregation_temporality; - is_monotonic; -} - -let rec default_histogram_data_point - ?attributes:((attributes:Common_types.key_value list) = []) - ?start_time_unix_nano:((start_time_unix_nano:int64) = 0L) - ?time_unix_nano:((time_unix_nano:int64) = 0L) - ?count:((count:int64) = 0L) - ?sum:((sum:float option) = None) - ?bucket_counts:((bucket_counts:int64 list) = []) - ?explicit_bounds:((explicit_bounds:float list) = []) - ?exemplars:((exemplars:exemplar list) = []) - ?flags:((flags:int32) = 0l) - ?min:((min:float option) = None) - ?max:((max:float option) = None) - () : histogram_data_point = { - attributes; - start_time_unix_nano; - time_unix_nano; - count; - sum; - bucket_counts; - explicit_bounds; - exemplars; - flags; - min; - max; -} - -let rec default_histogram - ?data_points:((data_points:histogram_data_point list) = []) - ?aggregation_temporality:((aggregation_temporality:aggregation_temporality) = default_aggregation_temporality ()) - () : histogram = { - data_points; - aggregation_temporality; -} - -let rec default_exponential_histogram_data_point_buckets - ?offset:((offset:int32) = 0l) - ?bucket_counts:((bucket_counts:int64 list) = []) - () : exponential_histogram_data_point_buckets = { - offset; - bucket_counts; -} - -let rec default_exponential_histogram_data_point - ?attributes:((attributes:Common_types.key_value list) = []) - ?start_time_unix_nano:((start_time_unix_nano:int64) = 0L) - ?time_unix_nano:((time_unix_nano:int64) = 0L) - ?count:((count:int64) = 0L) - ?sum:((sum:float option) = None) - ?scale:((scale:int32) = 0l) - ?zero_count:((zero_count:int64) = 0L) - ?positive:((positive:exponential_histogram_data_point_buckets option) = None) - ?negative:((negative:exponential_histogram_data_point_buckets option) = None) - ?flags:((flags:int32) = 0l) - ?exemplars:((exemplars:exemplar list) = []) - ?min:((min:float option) = None) - ?max:((max:float option) = None) - ?zero_threshold:((zero_threshold:float) = 0.) - () : exponential_histogram_data_point = { - attributes; - start_time_unix_nano; - time_unix_nano; - count; - sum; - scale; - zero_count; - positive; - negative; - flags; - exemplars; - min; - max; - zero_threshold; -} - -let rec default_exponential_histogram - ?data_points:((data_points:exponential_histogram_data_point list) = []) - ?aggregation_temporality:((aggregation_temporality:aggregation_temporality) = default_aggregation_temporality ()) - () : exponential_histogram = { - data_points; - aggregation_temporality; -} - -let rec default_summary_data_point_value_at_quantile - ?quantile:((quantile:float) = 0.) - ?value:((value:float) = 0.) - () : summary_data_point_value_at_quantile = { - quantile; - value; -} - -let rec default_summary_data_point - ?attributes:((attributes:Common_types.key_value list) = []) - ?start_time_unix_nano:((start_time_unix_nano:int64) = 0L) - ?time_unix_nano:((time_unix_nano:int64) = 0L) - ?count:((count:int64) = 0L) - ?sum:((sum:float) = 0.) - ?quantile_values:((quantile_values:summary_data_point_value_at_quantile list) = []) - ?flags:((flags:int32) = 0l) - () : summary_data_point = { - attributes; - start_time_unix_nano; - time_unix_nano; - count; - sum; - quantile_values; - flags; -} - -let rec default_summary - ?data_points:((data_points:summary_data_point list) = []) - () : summary = { - data_points; -} - -let rec default_metric_data () : metric_data = Gauge (default_gauge ()) - -and default_metric - ?name:((name:string) = "") - ?description:((description:string) = "") - ?unit_:((unit_:string) = "") - ?data:((data:metric_data) = Gauge (default_gauge ())) - () : metric = { - name; - description; - unit_; - data; -} - -let rec default_scope_metrics - ?scope:((scope:Common_types.instrumentation_scope option) = None) - ?metrics:((metrics:metric list) = []) - ?schema_url:((schema_url:string) = "") - () : scope_metrics = { - scope; - metrics; - schema_url; -} - -let rec default_resource_metrics - ?resource:((resource:Resource_types.resource option) = None) - ?scope_metrics:((scope_metrics:scope_metrics list) = []) - ?schema_url:((schema_url:string) = "") - () : resource_metrics = { - resource; - scope_metrics; - schema_url; -} - -let rec default_metrics_data - ?resource_metrics:((resource_metrics:resource_metrics list) = []) - () : metrics_data = { - resource_metrics; -} - -let rec default_data_point_flags () = (Data_point_flags_do_not_use:data_point_flags) diff --git a/src/metrics_types.mli b/src/metrics_types.mli deleted file mode 100644 index 8cf43dbf..00000000 --- a/src/metrics_types.mli +++ /dev/null @@ -1,309 +0,0 @@ -(** metrics.proto Types *) - - - -(** {2 Types} *) - -type exemplar_value = - | As_double of float - | As_int of int64 - -and exemplar = { - filtered_attributes : Common_types.key_value list; - time_unix_nano : int64; - value : exemplar_value; - span_id : bytes; - trace_id : bytes; -} - -type number_data_point_value = - | As_double of float - | As_int of int64 - -and number_data_point = { - attributes : Common_types.key_value list; - start_time_unix_nano : int64; - time_unix_nano : int64; - value : number_data_point_value; - exemplars : exemplar list; - flags : int32; -} - -type gauge = { - data_points : number_data_point list; -} - -type aggregation_temporality = - | Aggregation_temporality_unspecified - | Aggregation_temporality_delta - | Aggregation_temporality_cumulative - -type sum = { - data_points : number_data_point list; - aggregation_temporality : aggregation_temporality; - is_monotonic : bool; -} - -type histogram_data_point = { - attributes : Common_types.key_value list; - start_time_unix_nano : int64; - time_unix_nano : int64; - count : int64; - sum : float option; - bucket_counts : int64 list; - explicit_bounds : float list; - exemplars : exemplar list; - flags : int32; - min : float option; - max : float option; -} - -type histogram = { - data_points : histogram_data_point list; - aggregation_temporality : aggregation_temporality; -} - -type exponential_histogram_data_point_buckets = { - offset : int32; - bucket_counts : int64 list; -} - -type exponential_histogram_data_point = { - attributes : Common_types.key_value list; - start_time_unix_nano : int64; - time_unix_nano : int64; - count : int64; - sum : float option; - scale : int32; - zero_count : int64; - positive : exponential_histogram_data_point_buckets option; - negative : exponential_histogram_data_point_buckets option; - flags : int32; - exemplars : exemplar list; - min : float option; - max : float option; - zero_threshold : float; -} - -type exponential_histogram = { - data_points : exponential_histogram_data_point list; - aggregation_temporality : aggregation_temporality; -} - -type summary_data_point_value_at_quantile = { - quantile : float; - value : float; -} - -type summary_data_point = { - attributes : Common_types.key_value list; - start_time_unix_nano : int64; - time_unix_nano : int64; - count : int64; - sum : float; - quantile_values : summary_data_point_value_at_quantile list; - flags : int32; -} - -type summary = { - data_points : summary_data_point list; -} - -type metric_data = - | Gauge of gauge - | Sum of sum - | Histogram of histogram - | Exponential_histogram of exponential_histogram - | Summary of summary - -and metric = { - name : string; - description : string; - unit_ : string; - data : metric_data; -} - -type scope_metrics = { - scope : Common_types.instrumentation_scope option; - metrics : metric list; - schema_url : string; -} - -type resource_metrics = { - resource : Resource_types.resource option; - scope_metrics : scope_metrics list; - schema_url : string; -} - -type metrics_data = { - resource_metrics : resource_metrics list; -} - -type data_point_flags = - | Data_point_flags_do_not_use - | Data_point_flags_no_recorded_value_mask - - -(** {2 Default values} *) - -val default_exemplar_value : unit -> exemplar_value -(** [default_exemplar_value ()] is the default value for type [exemplar_value] *) - -val default_exemplar : - ?filtered_attributes:Common_types.key_value list -> - ?time_unix_nano:int64 -> - ?value:exemplar_value -> - ?span_id:bytes -> - ?trace_id:bytes -> - unit -> - exemplar -(** [default_exemplar ()] is the default value for type [exemplar] *) - -val default_number_data_point_value : unit -> number_data_point_value -(** [default_number_data_point_value ()] is the default value for type [number_data_point_value] *) - -val default_number_data_point : - ?attributes:Common_types.key_value list -> - ?start_time_unix_nano:int64 -> - ?time_unix_nano:int64 -> - ?value:number_data_point_value -> - ?exemplars:exemplar list -> - ?flags:int32 -> - unit -> - number_data_point -(** [default_number_data_point ()] is the default value for type [number_data_point] *) - -val default_gauge : - ?data_points:number_data_point list -> - unit -> - gauge -(** [default_gauge ()] is the default value for type [gauge] *) - -val default_aggregation_temporality : unit -> aggregation_temporality -(** [default_aggregation_temporality ()] is the default value for type [aggregation_temporality] *) - -val default_sum : - ?data_points:number_data_point list -> - ?aggregation_temporality:aggregation_temporality -> - ?is_monotonic:bool -> - unit -> - sum -(** [default_sum ()] is the default value for type [sum] *) - -val default_histogram_data_point : - ?attributes:Common_types.key_value list -> - ?start_time_unix_nano:int64 -> - ?time_unix_nano:int64 -> - ?count:int64 -> - ?sum:float option -> - ?bucket_counts:int64 list -> - ?explicit_bounds:float list -> - ?exemplars:exemplar list -> - ?flags:int32 -> - ?min:float option -> - ?max:float option -> - unit -> - histogram_data_point -(** [default_histogram_data_point ()] is the default value for type [histogram_data_point] *) - -val default_histogram : - ?data_points:histogram_data_point list -> - ?aggregation_temporality:aggregation_temporality -> - unit -> - histogram -(** [default_histogram ()] is the default value for type [histogram] *) - -val default_exponential_histogram_data_point_buckets : - ?offset:int32 -> - ?bucket_counts:int64 list -> - unit -> - exponential_histogram_data_point_buckets -(** [default_exponential_histogram_data_point_buckets ()] is the default value for type [exponential_histogram_data_point_buckets] *) - -val default_exponential_histogram_data_point : - ?attributes:Common_types.key_value list -> - ?start_time_unix_nano:int64 -> - ?time_unix_nano:int64 -> - ?count:int64 -> - ?sum:float option -> - ?scale:int32 -> - ?zero_count:int64 -> - ?positive:exponential_histogram_data_point_buckets option -> - ?negative:exponential_histogram_data_point_buckets option -> - ?flags:int32 -> - ?exemplars:exemplar list -> - ?min:float option -> - ?max:float option -> - ?zero_threshold:float -> - unit -> - exponential_histogram_data_point -(** [default_exponential_histogram_data_point ()] is the default value for type [exponential_histogram_data_point] *) - -val default_exponential_histogram : - ?data_points:exponential_histogram_data_point list -> - ?aggregation_temporality:aggregation_temporality -> - unit -> - exponential_histogram -(** [default_exponential_histogram ()] is the default value for type [exponential_histogram] *) - -val default_summary_data_point_value_at_quantile : - ?quantile:float -> - ?value:float -> - unit -> - summary_data_point_value_at_quantile -(** [default_summary_data_point_value_at_quantile ()] is the default value for type [summary_data_point_value_at_quantile] *) - -val default_summary_data_point : - ?attributes:Common_types.key_value list -> - ?start_time_unix_nano:int64 -> - ?time_unix_nano:int64 -> - ?count:int64 -> - ?sum:float -> - ?quantile_values:summary_data_point_value_at_quantile list -> - ?flags:int32 -> - unit -> - summary_data_point -(** [default_summary_data_point ()] is the default value for type [summary_data_point] *) - -val default_summary : - ?data_points:summary_data_point list -> - unit -> - summary -(** [default_summary ()] is the default value for type [summary] *) - -val default_metric_data : unit -> metric_data -(** [default_metric_data ()] is the default value for type [metric_data] *) - -val default_metric : - ?name:string -> - ?description:string -> - ?unit_:string -> - ?data:metric_data -> - unit -> - metric -(** [default_metric ()] is the default value for type [metric] *) - -val default_scope_metrics : - ?scope:Common_types.instrumentation_scope option -> - ?metrics:metric list -> - ?schema_url:string -> - unit -> - scope_metrics -(** [default_scope_metrics ()] is the default value for type [scope_metrics] *) - -val default_resource_metrics : - ?resource:Resource_types.resource option -> - ?scope_metrics:scope_metrics list -> - ?schema_url:string -> - unit -> - resource_metrics -(** [default_resource_metrics ()] is the default value for type [resource_metrics] *) - -val default_metrics_data : - ?resource_metrics:resource_metrics list -> - unit -> - metrics_data -(** [default_metrics_data ()] is the default value for type [metrics_data] *) - -val default_data_point_flags : unit -> data_point_flags -(** [default_data_point_flags ()] is the default value for type [data_point_flags] *) diff --git a/src/resource_pb.ml b/src/resource_pb.ml deleted file mode 100644 index ac8a051f..00000000 --- a/src/resource_pb.ml +++ /dev/null @@ -1,46 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - -type resource_mutable = { - mutable attributes : Common_types.key_value list; - mutable dropped_attributes_count : int32; -} - -let default_resource_mutable () : resource_mutable = { - attributes = []; - dropped_attributes_count = 0l; -} - - -let rec decode_resource d = - let v = default_resource_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.attributes <- List.rev v.attributes; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(resource), field(1)" pk - | Some (2, Pbrt.Varint) -> begin - v.dropped_attributes_count <- Pbrt.Decoder.int32_as_varint d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(resource), field(2)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Resource_types.attributes = v.attributes; - Resource_types.dropped_attributes_count = v.dropped_attributes_count; - } : Resource_types.resource) - -let rec encode_resource (v:Resource_types.resource) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; - ) v.Resource_types.attributes; - Pbrt.Encoder.key (2, Pbrt.Varint) encoder; - Pbrt.Encoder.int32_as_varint v.Resource_types.dropped_attributes_count encoder; - () diff --git a/src/resource_pb.mli b/src/resource_pb.mli deleted file mode 100644 index 81136cbe..00000000 --- a/src/resource_pb.mli +++ /dev/null @@ -1,13 +0,0 @@ -(** resource.proto Binary Encoding *) - - -(** {2 Protobuf Encoding} *) - -val encode_resource : Resource_types.resource -> Pbrt.Encoder.t -> unit -(** [encode_resource v encoder] encodes [v] with the given [encoder] *) - - -(** {2 Protobuf Decoding} *) - -val decode_resource : Pbrt.Decoder.t -> Resource_types.resource -(** [decode_resource decoder] decodes a [resource] value from [decoder] *) diff --git a/src/resource_pp.ml b/src/resource_pp.ml deleted file mode 100644 index 299fcdfc..00000000 --- a/src/resource_pp.ml +++ /dev/null @@ -1,8 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - -let rec pp_resource fmt (v:Resource_types.resource) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Resource_types.attributes; - Pbrt.Pp.pp_record_field ~first:false "dropped_attributes_count" Pbrt.Pp.pp_int32 fmt v.Resource_types.dropped_attributes_count; - in - Pbrt.Pp.pp_brk pp_i fmt () diff --git a/src/resource_pp.mli b/src/resource_pp.mli deleted file mode 100644 index 60d1f43a..00000000 --- a/src/resource_pp.mli +++ /dev/null @@ -1,7 +0,0 @@ -(** resource.proto Pretty Printing *) - - -(** {2 Formatters} *) - -val pp_resource : Format.formatter -> Resource_types.resource -> unit -(** [pp_resource v] formats v *) diff --git a/src/resource_types.ml b/src/resource_types.ml deleted file mode 100644 index 74b42266..00000000 --- a/src/resource_types.ml +++ /dev/null @@ -1,15 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - - -type resource = { - attributes : Common_types.key_value list; - dropped_attributes_count : int32; -} - -let rec default_resource - ?attributes:((attributes:Common_types.key_value list) = []) - ?dropped_attributes_count:((dropped_attributes_count:int32) = 0l) - () : resource = { - attributes; - dropped_attributes_count; -} diff --git a/src/resource_types.mli b/src/resource_types.mli deleted file mode 100644 index ff01acd2..00000000 --- a/src/resource_types.mli +++ /dev/null @@ -1,20 +0,0 @@ -(** resource.proto Types *) - - - -(** {2 Types} *) - -type resource = { - attributes : Common_types.key_value list; - dropped_attributes_count : int32; -} - - -(** {2 Default values} *) - -val default_resource : - ?attributes:Common_types.key_value list -> - ?dropped_attributes_count:int32 -> - unit -> - resource -(** [default_resource ()] is the default value for type [resource] *) diff --git a/src/status.proto b/src/status.proto deleted file mode 100644 index 9812db51..00000000 --- a/src/status.proto +++ /dev/null @@ -1,10 +0,0 @@ - -syntax = "proto3"; - -// from https://pkg.go.dev/google.golang.org/genproto/googleapis/rpc/status?utm_source=godoc#Status - -message Status { - int32 code = 1; - bytes message = 2; - repeated bytes details = 3; -} diff --git a/src/status_pb.ml b/src/status_pb.ml deleted file mode 100644 index 3fba0000..00000000 --- a/src/status_pb.ml +++ /dev/null @@ -1,56 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - -type status_mutable = { - mutable code : int32; - mutable message : bytes; - mutable details : bytes list; -} - -let default_status_mutable () : status_mutable = { - code = 0l; - message = Bytes.create 0; - details = []; -} - - -let rec decode_status d = - let v = default_status_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.details <- List.rev v.details; - ); continue__ := false - | Some (1, Pbrt.Varint) -> begin - v.code <- Pbrt.Decoder.int32_as_varint d; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(status), field(1)" pk - | Some (2, Pbrt.Bytes) -> begin - v.message <- Pbrt.Decoder.bytes d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(status), field(2)" pk - | Some (3, Pbrt.Bytes) -> begin - v.details <- (Pbrt.Decoder.bytes d) :: v.details; - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(status), field(3)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Status_types.code = v.code; - Status_types.message = v.message; - Status_types.details = v.details; - } : Status_types.status) - -let rec encode_status (v:Status_types.status) encoder = - Pbrt.Encoder.key (1, Pbrt.Varint) encoder; - Pbrt.Encoder.int32_as_varint v.Status_types.code encoder; - Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; - Pbrt.Encoder.bytes v.Status_types.message encoder; - List.iter (fun x -> - Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; - Pbrt.Encoder.bytes x encoder; - ) v.Status_types.details; - () diff --git a/src/status_pb.mli b/src/status_pb.mli deleted file mode 100644 index e6bcfaed..00000000 --- a/src/status_pb.mli +++ /dev/null @@ -1,13 +0,0 @@ -(** status.proto Binary Encoding *) - - -(** {2 Protobuf Encoding} *) - -val encode_status : Status_types.status -> Pbrt.Encoder.t -> unit -(** [encode_status v encoder] encodes [v] with the given [encoder] *) - - -(** {2 Protobuf Decoding} *) - -val decode_status : Pbrt.Decoder.t -> Status_types.status -(** [decode_status decoder] decodes a [status] value from [decoder] *) diff --git a/src/status_pp.ml b/src/status_pp.ml deleted file mode 100644 index c5df29d9..00000000 --- a/src/status_pp.ml +++ /dev/null @@ -1,9 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - -let rec pp_status fmt (v:Status_types.status) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "code" Pbrt.Pp.pp_int32 fmt v.Status_types.code; - Pbrt.Pp.pp_record_field ~first:false "message" Pbrt.Pp.pp_bytes fmt v.Status_types.message; - Pbrt.Pp.pp_record_field ~first:false "details" (Pbrt.Pp.pp_list Pbrt.Pp.pp_bytes) fmt v.Status_types.details; - in - Pbrt.Pp.pp_brk pp_i fmt () diff --git a/src/status_pp.mli b/src/status_pp.mli deleted file mode 100644 index cb19e3bd..00000000 --- a/src/status_pp.mli +++ /dev/null @@ -1,7 +0,0 @@ -(** status.proto Pretty Printing *) - - -(** {2 Formatters} *) - -val pp_status : Format.formatter -> Status_types.status -> unit -(** [pp_status v] formats v *) diff --git a/src/status_types.ml b/src/status_types.ml deleted file mode 100644 index 14af622b..00000000 --- a/src/status_types.ml +++ /dev/null @@ -1,18 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - - -type status = { - code : int32; - message : bytes; - details : bytes list; -} - -let rec default_status - ?code:((code:int32) = 0l) - ?message:((message:bytes) = Bytes.create 0) - ?details:((details:bytes list) = []) - () : status = { - code; - message; - details; -} diff --git a/src/status_types.mli b/src/status_types.mli deleted file mode 100644 index 9947bc58..00000000 --- a/src/status_types.mli +++ /dev/null @@ -1,22 +0,0 @@ -(** status.proto Types *) - - - -(** {2 Types} *) - -type status = { - code : int32; - message : bytes; - details : bytes list; -} - - -(** {2 Default values} *) - -val default_status : - ?code:int32 -> - ?message:bytes -> - ?details:bytes list -> - unit -> - status -(** [default_status ()] is the default value for type [status] *) diff --git a/src/trace_pb.ml b/src/trace_pb.ml deleted file mode 100644 index 1d2acfd9..00000000 --- a/src/trace_pb.ml +++ /dev/null @@ -1,547 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - -type span_event_mutable = { - mutable time_unix_nano : int64; - mutable name : string; - mutable attributes : Common_types.key_value list; - mutable dropped_attributes_count : int32; -} - -let default_span_event_mutable () : span_event_mutable = { - time_unix_nano = 0L; - name = ""; - attributes = []; - dropped_attributes_count = 0l; -} - -type span_link_mutable = { - mutable trace_id : bytes; - mutable span_id : bytes; - mutable trace_state : string; - mutable attributes : Common_types.key_value list; - mutable dropped_attributes_count : int32; -} - -let default_span_link_mutable () : span_link_mutable = { - trace_id = Bytes.create 0; - span_id = Bytes.create 0; - trace_state = ""; - attributes = []; - dropped_attributes_count = 0l; -} - -type status_mutable = { - mutable message : string; - mutable code : Trace_types.status_status_code; -} - -let default_status_mutable () : status_mutable = { - message = ""; - code = Trace_types.default_status_status_code (); -} - -type span_mutable = { - mutable trace_id : bytes; - mutable span_id : bytes; - mutable trace_state : string; - mutable parent_span_id : bytes; - mutable name : string; - mutable kind : Trace_types.span_span_kind; - mutable start_time_unix_nano : int64; - mutable end_time_unix_nano : int64; - mutable attributes : Common_types.key_value list; - mutable dropped_attributes_count : int32; - mutable events : Trace_types.span_event list; - mutable dropped_events_count : int32; - mutable links : Trace_types.span_link list; - mutable dropped_links_count : int32; - mutable status : Trace_types.status option; -} - -let default_span_mutable () : span_mutable = { - trace_id = Bytes.create 0; - span_id = Bytes.create 0; - trace_state = ""; - parent_span_id = Bytes.create 0; - name = ""; - kind = Trace_types.default_span_span_kind (); - start_time_unix_nano = 0L; - end_time_unix_nano = 0L; - attributes = []; - dropped_attributes_count = 0l; - events = []; - dropped_events_count = 0l; - links = []; - dropped_links_count = 0l; - status = None; -} - -type scope_spans_mutable = { - mutable scope : Common_types.instrumentation_scope option; - mutable spans : Trace_types.span list; - mutable schema_url : string; -} - -let default_scope_spans_mutable () : scope_spans_mutable = { - scope = None; - spans = []; - schema_url = ""; -} - -type resource_spans_mutable = { - mutable resource : Resource_types.resource option; - mutable scope_spans : Trace_types.scope_spans list; - mutable schema_url : string; -} - -let default_resource_spans_mutable () : resource_spans_mutable = { - resource = None; - scope_spans = []; - schema_url = ""; -} - -type traces_data_mutable = { - mutable resource_spans : Trace_types.resource_spans list; -} - -let default_traces_data_mutable () : traces_data_mutable = { - resource_spans = []; -} - - -let rec decode_span_span_kind d = - match Pbrt.Decoder.int_as_varint d with - | 0 -> (Trace_types.Span_kind_unspecified:Trace_types.span_span_kind) - | 1 -> (Trace_types.Span_kind_internal:Trace_types.span_span_kind) - | 2 -> (Trace_types.Span_kind_server:Trace_types.span_span_kind) - | 3 -> (Trace_types.Span_kind_client:Trace_types.span_span_kind) - | 4 -> (Trace_types.Span_kind_producer:Trace_types.span_span_kind) - | 5 -> (Trace_types.Span_kind_consumer:Trace_types.span_span_kind) - | _ -> Pbrt.Decoder.malformed_variant "span_span_kind" - -let rec decode_span_event d = - let v = default_span_event_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.attributes <- List.rev v.attributes; - ); continue__ := false - | Some (1, Pbrt.Bits64) -> begin - v.time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span_event), field(1)" pk - | Some (2, Pbrt.Bytes) -> begin - v.name <- Pbrt.Decoder.string d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span_event), field(2)" pk - | Some (3, Pbrt.Bytes) -> begin - v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span_event), field(3)" pk - | Some (4, Pbrt.Varint) -> begin - v.dropped_attributes_count <- Pbrt.Decoder.int32_as_varint d; - end - | Some (4, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span_event), field(4)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Trace_types.time_unix_nano = v.time_unix_nano; - Trace_types.name = v.name; - Trace_types.attributes = v.attributes; - Trace_types.dropped_attributes_count = v.dropped_attributes_count; - } : Trace_types.span_event) - -let rec decode_span_link d = - let v = default_span_link_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.attributes <- List.rev v.attributes; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.trace_id <- Pbrt.Decoder.bytes d; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span_link), field(1)" pk - | Some (2, Pbrt.Bytes) -> begin - v.span_id <- Pbrt.Decoder.bytes d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span_link), field(2)" pk - | Some (3, Pbrt.Bytes) -> begin - v.trace_state <- Pbrt.Decoder.string d; - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span_link), field(3)" pk - | Some (4, Pbrt.Bytes) -> begin - v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; - end - | Some (4, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span_link), field(4)" pk - | Some (5, Pbrt.Varint) -> begin - v.dropped_attributes_count <- Pbrt.Decoder.int32_as_varint d; - end - | Some (5, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span_link), field(5)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Trace_types.trace_id = v.trace_id; - Trace_types.span_id = v.span_id; - Trace_types.trace_state = v.trace_state; - Trace_types.attributes = v.attributes; - Trace_types.dropped_attributes_count = v.dropped_attributes_count; - } : Trace_types.span_link) - -let rec decode_status_status_code d = - match Pbrt.Decoder.int_as_varint d with - | 0 -> (Trace_types.Status_code_unset:Trace_types.status_status_code) - | 1 -> (Trace_types.Status_code_ok:Trace_types.status_status_code) - | 2 -> (Trace_types.Status_code_error:Trace_types.status_status_code) - | _ -> Pbrt.Decoder.malformed_variant "status_status_code" - -let rec decode_status d = - let v = default_status_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - ); continue__ := false - | Some (2, Pbrt.Bytes) -> begin - v.message <- Pbrt.Decoder.string d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(status), field(2)" pk - | Some (3, Pbrt.Varint) -> begin - v.code <- decode_status_status_code d; - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(status), field(3)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Trace_types.message = v.message; - Trace_types.code = v.code; - } : Trace_types.status) - -let rec decode_span d = - let v = default_span_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.links <- List.rev v.links; - v.events <- List.rev v.events; - v.attributes <- List.rev v.attributes; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.trace_id <- Pbrt.Decoder.bytes d; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span), field(1)" pk - | Some (2, Pbrt.Bytes) -> begin - v.span_id <- Pbrt.Decoder.bytes d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span), field(2)" pk - | Some (3, Pbrt.Bytes) -> begin - v.trace_state <- Pbrt.Decoder.string d; - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span), field(3)" pk - | Some (4, Pbrt.Bytes) -> begin - v.parent_span_id <- Pbrt.Decoder.bytes d; - end - | Some (4, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span), field(4)" pk - | Some (5, Pbrt.Bytes) -> begin - v.name <- Pbrt.Decoder.string d; - end - | Some (5, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span), field(5)" pk - | Some (6, Pbrt.Varint) -> begin - v.kind <- decode_span_span_kind d; - end - | Some (6, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span), field(6)" pk - | Some (7, Pbrt.Bits64) -> begin - v.start_time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; - end - | Some (7, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span), field(7)" pk - | Some (8, Pbrt.Bits64) -> begin - v.end_time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; - end - | Some (8, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span), field(8)" pk - | Some (9, Pbrt.Bytes) -> begin - v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; - end - | Some (9, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span), field(9)" pk - | Some (10, Pbrt.Varint) -> begin - v.dropped_attributes_count <- Pbrt.Decoder.int32_as_varint d; - end - | Some (10, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span), field(10)" pk - | Some (11, Pbrt.Bytes) -> begin - v.events <- (decode_span_event (Pbrt.Decoder.nested d)) :: v.events; - end - | Some (11, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span), field(11)" pk - | Some (12, Pbrt.Varint) -> begin - v.dropped_events_count <- Pbrt.Decoder.int32_as_varint d; - end - | Some (12, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span), field(12)" pk - | Some (13, Pbrt.Bytes) -> begin - v.links <- (decode_span_link (Pbrt.Decoder.nested d)) :: v.links; - end - | Some (13, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span), field(13)" pk - | Some (14, Pbrt.Varint) -> begin - v.dropped_links_count <- Pbrt.Decoder.int32_as_varint d; - end - | Some (14, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span), field(14)" pk - | Some (15, Pbrt.Bytes) -> begin - v.status <- Some (decode_status (Pbrt.Decoder.nested d)); - end - | Some (15, pk) -> - Pbrt.Decoder.unexpected_payload "Message(span), field(15)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Trace_types.trace_id = v.trace_id; - Trace_types.span_id = v.span_id; - Trace_types.trace_state = v.trace_state; - Trace_types.parent_span_id = v.parent_span_id; - Trace_types.name = v.name; - Trace_types.kind = v.kind; - Trace_types.start_time_unix_nano = v.start_time_unix_nano; - Trace_types.end_time_unix_nano = v.end_time_unix_nano; - Trace_types.attributes = v.attributes; - Trace_types.dropped_attributes_count = v.dropped_attributes_count; - Trace_types.events = v.events; - Trace_types.dropped_events_count = v.dropped_events_count; - Trace_types.links = v.links; - Trace_types.dropped_links_count = v.dropped_links_count; - Trace_types.status = v.status; - } : Trace_types.span) - -let rec decode_scope_spans d = - let v = default_scope_spans_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.spans <- List.rev v.spans; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.scope <- Some (Common_pb.decode_instrumentation_scope (Pbrt.Decoder.nested d)); - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(scope_spans), field(1)" pk - | Some (2, Pbrt.Bytes) -> begin - v.spans <- (decode_span (Pbrt.Decoder.nested d)) :: v.spans; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(scope_spans), field(2)" pk - | Some (3, Pbrt.Bytes) -> begin - v.schema_url <- Pbrt.Decoder.string d; - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(scope_spans), field(3)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Trace_types.scope = v.scope; - Trace_types.spans = v.spans; - Trace_types.schema_url = v.schema_url; - } : Trace_types.scope_spans) - -let rec decode_resource_spans d = - let v = default_resource_spans_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.scope_spans <- List.rev v.scope_spans; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.resource <- Some (Resource_pb.decode_resource (Pbrt.Decoder.nested d)); - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(resource_spans), field(1)" pk - | Some (2, Pbrt.Bytes) -> begin - v.scope_spans <- (decode_scope_spans (Pbrt.Decoder.nested d)) :: v.scope_spans; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(resource_spans), field(2)" pk - | Some (3, Pbrt.Bytes) -> begin - v.schema_url <- Pbrt.Decoder.string d; - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(resource_spans), field(3)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Trace_types.resource = v.resource; - Trace_types.scope_spans = v.scope_spans; - Trace_types.schema_url = v.schema_url; - } : Trace_types.resource_spans) - -let rec decode_traces_data d = - let v = default_traces_data_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.resource_spans <- List.rev v.resource_spans; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.resource_spans <- (decode_resource_spans (Pbrt.Decoder.nested d)) :: v.resource_spans; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(traces_data), field(1)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Trace_types.resource_spans = v.resource_spans; - } : Trace_types.traces_data) - -let rec encode_span_span_kind (v:Trace_types.span_span_kind) encoder = - match v with - | Trace_types.Span_kind_unspecified -> Pbrt.Encoder.int_as_varint (0) encoder - | Trace_types.Span_kind_internal -> Pbrt.Encoder.int_as_varint 1 encoder - | Trace_types.Span_kind_server -> Pbrt.Encoder.int_as_varint 2 encoder - | Trace_types.Span_kind_client -> Pbrt.Encoder.int_as_varint 3 encoder - | Trace_types.Span_kind_producer -> Pbrt.Encoder.int_as_varint 4 encoder - | Trace_types.Span_kind_consumer -> Pbrt.Encoder.int_as_varint 5 encoder - -let rec encode_span_event (v:Trace_types.span_event) encoder = - Pbrt.Encoder.key (1, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Trace_types.time_unix_nano encoder; - Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; - Pbrt.Encoder.string v.Trace_types.name encoder; - List.iter (fun x -> - Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; - ) v.Trace_types.attributes; - Pbrt.Encoder.key (4, Pbrt.Varint) encoder; - Pbrt.Encoder.int32_as_varint v.Trace_types.dropped_attributes_count encoder; - () - -let rec encode_span_link (v:Trace_types.span_link) encoder = - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.bytes v.Trace_types.trace_id encoder; - Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; - Pbrt.Encoder.bytes v.Trace_types.span_id encoder; - Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; - Pbrt.Encoder.string v.Trace_types.trace_state encoder; - List.iter (fun x -> - Pbrt.Encoder.key (4, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; - ) v.Trace_types.attributes; - Pbrt.Encoder.key (5, Pbrt.Varint) encoder; - Pbrt.Encoder.int32_as_varint v.Trace_types.dropped_attributes_count encoder; - () - -let rec encode_status_status_code (v:Trace_types.status_status_code) encoder = - match v with - | Trace_types.Status_code_unset -> Pbrt.Encoder.int_as_varint (0) encoder - | Trace_types.Status_code_ok -> Pbrt.Encoder.int_as_varint 1 encoder - | Trace_types.Status_code_error -> Pbrt.Encoder.int_as_varint 2 encoder - -let rec encode_status (v:Trace_types.status) encoder = - Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; - Pbrt.Encoder.string v.Trace_types.message encoder; - Pbrt.Encoder.key (3, Pbrt.Varint) encoder; - encode_status_status_code v.Trace_types.code encoder; - () - -let rec encode_span (v:Trace_types.span) encoder = - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.bytes v.Trace_types.trace_id encoder; - Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; - Pbrt.Encoder.bytes v.Trace_types.span_id encoder; - Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; - Pbrt.Encoder.string v.Trace_types.trace_state encoder; - Pbrt.Encoder.key (4, Pbrt.Bytes) encoder; - Pbrt.Encoder.bytes v.Trace_types.parent_span_id encoder; - Pbrt.Encoder.key (5, Pbrt.Bytes) encoder; - Pbrt.Encoder.string v.Trace_types.name encoder; - Pbrt.Encoder.key (6, Pbrt.Varint) encoder; - encode_span_span_kind v.Trace_types.kind encoder; - Pbrt.Encoder.key (7, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Trace_types.start_time_unix_nano encoder; - Pbrt.Encoder.key (8, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Trace_types.end_time_unix_nano encoder; - List.iter (fun x -> - Pbrt.Encoder.key (9, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; - ) v.Trace_types.attributes; - Pbrt.Encoder.key (10, Pbrt.Varint) encoder; - Pbrt.Encoder.int32_as_varint v.Trace_types.dropped_attributes_count encoder; - List.iter (fun x -> - Pbrt.Encoder.key (11, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_span_event x) encoder; - ) v.Trace_types.events; - Pbrt.Encoder.key (12, Pbrt.Varint) encoder; - Pbrt.Encoder.int32_as_varint v.Trace_types.dropped_events_count encoder; - List.iter (fun x -> - Pbrt.Encoder.key (13, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_span_link x) encoder; - ) v.Trace_types.links; - Pbrt.Encoder.key (14, Pbrt.Varint) encoder; - Pbrt.Encoder.int32_as_varint v.Trace_types.dropped_links_count encoder; - begin match v.Trace_types.status with - | Some x -> - Pbrt.Encoder.key (15, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_status x) encoder; - | None -> (); - end; - () - -let rec encode_scope_spans (v:Trace_types.scope_spans) encoder = - begin match v.Trace_types.scope with - | Some x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (Common_pb.encode_instrumentation_scope x) encoder; - | None -> (); - end; - List.iter (fun x -> - Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_span x) encoder; - ) v.Trace_types.spans; - Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; - Pbrt.Encoder.string v.Trace_types.schema_url encoder; - () - -let rec encode_resource_spans (v:Trace_types.resource_spans) encoder = - begin match v.Trace_types.resource with - | Some x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (Resource_pb.encode_resource x) encoder; - | None -> (); - end; - List.iter (fun x -> - Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_scope_spans x) encoder; - ) v.Trace_types.scope_spans; - Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; - Pbrt.Encoder.string v.Trace_types.schema_url encoder; - () - -let rec encode_traces_data (v:Trace_types.traces_data) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_resource_spans x) encoder; - ) v.Trace_types.resource_spans; - () diff --git a/src/trace_pb.mli b/src/trace_pb.mli deleted file mode 100644 index 8e93dba6..00000000 --- a/src/trace_pb.mli +++ /dev/null @@ -1,61 +0,0 @@ -(** trace.proto Binary Encoding *) - - -(** {2 Protobuf Encoding} *) - -val encode_span_span_kind : Trace_types.span_span_kind -> Pbrt.Encoder.t -> unit -(** [encode_span_span_kind v encoder] encodes [v] with the given [encoder] *) - -val encode_span_event : Trace_types.span_event -> Pbrt.Encoder.t -> unit -(** [encode_span_event v encoder] encodes [v] with the given [encoder] *) - -val encode_span_link : Trace_types.span_link -> Pbrt.Encoder.t -> unit -(** [encode_span_link v encoder] encodes [v] with the given [encoder] *) - -val encode_status_status_code : Trace_types.status_status_code -> Pbrt.Encoder.t -> unit -(** [encode_status_status_code v encoder] encodes [v] with the given [encoder] *) - -val encode_status : Trace_types.status -> Pbrt.Encoder.t -> unit -(** [encode_status v encoder] encodes [v] with the given [encoder] *) - -val encode_span : Trace_types.span -> Pbrt.Encoder.t -> unit -(** [encode_span v encoder] encodes [v] with the given [encoder] *) - -val encode_scope_spans : Trace_types.scope_spans -> Pbrt.Encoder.t -> unit -(** [encode_scope_spans v encoder] encodes [v] with the given [encoder] *) - -val encode_resource_spans : Trace_types.resource_spans -> Pbrt.Encoder.t -> unit -(** [encode_resource_spans v encoder] encodes [v] with the given [encoder] *) - -val encode_traces_data : Trace_types.traces_data -> Pbrt.Encoder.t -> unit -(** [encode_traces_data v encoder] encodes [v] with the given [encoder] *) - - -(** {2 Protobuf Decoding} *) - -val decode_span_span_kind : Pbrt.Decoder.t -> Trace_types.span_span_kind -(** [decode_span_span_kind decoder] decodes a [span_span_kind] value from [decoder] *) - -val decode_span_event : Pbrt.Decoder.t -> Trace_types.span_event -(** [decode_span_event decoder] decodes a [span_event] value from [decoder] *) - -val decode_span_link : Pbrt.Decoder.t -> Trace_types.span_link -(** [decode_span_link decoder] decodes a [span_link] value from [decoder] *) - -val decode_status_status_code : Pbrt.Decoder.t -> Trace_types.status_status_code -(** [decode_status_status_code decoder] decodes a [status_status_code] value from [decoder] *) - -val decode_status : Pbrt.Decoder.t -> Trace_types.status -(** [decode_status decoder] decodes a [status] value from [decoder] *) - -val decode_span : Pbrt.Decoder.t -> Trace_types.span -(** [decode_span decoder] decodes a [span] value from [decoder] *) - -val decode_scope_spans : Pbrt.Decoder.t -> Trace_types.scope_spans -(** [decode_scope_spans decoder] decodes a [scope_spans] value from [decoder] *) - -val decode_resource_spans : Pbrt.Decoder.t -> Trace_types.resource_spans -(** [decode_resource_spans decoder] decodes a [resource_spans] value from [decoder] *) - -val decode_traces_data : Pbrt.Decoder.t -> Trace_types.traces_data -(** [decode_traces_data decoder] decodes a [traces_data] value from [decoder] *) diff --git a/src/trace_pp.ml b/src/trace_pp.ml deleted file mode 100644 index 97faa78b..00000000 --- a/src/trace_pp.ml +++ /dev/null @@ -1,84 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - -let rec pp_span_span_kind fmt (v:Trace_types.span_span_kind) = - match v with - | Trace_types.Span_kind_unspecified -> Format.fprintf fmt "Span_kind_unspecified" - | Trace_types.Span_kind_internal -> Format.fprintf fmt "Span_kind_internal" - | Trace_types.Span_kind_server -> Format.fprintf fmt "Span_kind_server" - | Trace_types.Span_kind_client -> Format.fprintf fmt "Span_kind_client" - | Trace_types.Span_kind_producer -> Format.fprintf fmt "Span_kind_producer" - | Trace_types.Span_kind_consumer -> Format.fprintf fmt "Span_kind_consumer" - -let rec pp_span_event fmt (v:Trace_types.span_event) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Trace_types.time_unix_nano; - Pbrt.Pp.pp_record_field ~first:false "name" Pbrt.Pp.pp_string fmt v.Trace_types.name; - Pbrt.Pp.pp_record_field ~first:false "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Trace_types.attributes; - Pbrt.Pp.pp_record_field ~first:false "dropped_attributes_count" Pbrt.Pp.pp_int32 fmt v.Trace_types.dropped_attributes_count; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_span_link fmt (v:Trace_types.span_link) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "trace_id" Pbrt.Pp.pp_bytes fmt v.Trace_types.trace_id; - Pbrt.Pp.pp_record_field ~first:false "span_id" Pbrt.Pp.pp_bytes fmt v.Trace_types.span_id; - Pbrt.Pp.pp_record_field ~first:false "trace_state" Pbrt.Pp.pp_string fmt v.Trace_types.trace_state; - Pbrt.Pp.pp_record_field ~first:false "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Trace_types.attributes; - Pbrt.Pp.pp_record_field ~first:false "dropped_attributes_count" Pbrt.Pp.pp_int32 fmt v.Trace_types.dropped_attributes_count; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_status_status_code fmt (v:Trace_types.status_status_code) = - match v with - | Trace_types.Status_code_unset -> Format.fprintf fmt "Status_code_unset" - | Trace_types.Status_code_ok -> Format.fprintf fmt "Status_code_ok" - | Trace_types.Status_code_error -> Format.fprintf fmt "Status_code_error" - -let rec pp_status fmt (v:Trace_types.status) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "message" Pbrt.Pp.pp_string fmt v.Trace_types.message; - Pbrt.Pp.pp_record_field ~first:false "code" pp_status_status_code fmt v.Trace_types.code; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_span fmt (v:Trace_types.span) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "trace_id" Pbrt.Pp.pp_bytes fmt v.Trace_types.trace_id; - Pbrt.Pp.pp_record_field ~first:false "span_id" Pbrt.Pp.pp_bytes fmt v.Trace_types.span_id; - Pbrt.Pp.pp_record_field ~first:false "trace_state" Pbrt.Pp.pp_string fmt v.Trace_types.trace_state; - Pbrt.Pp.pp_record_field ~first:false "parent_span_id" Pbrt.Pp.pp_bytes fmt v.Trace_types.parent_span_id; - Pbrt.Pp.pp_record_field ~first:false "name" Pbrt.Pp.pp_string fmt v.Trace_types.name; - Pbrt.Pp.pp_record_field ~first:false "kind" pp_span_span_kind fmt v.Trace_types.kind; - Pbrt.Pp.pp_record_field ~first:false "start_time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Trace_types.start_time_unix_nano; - Pbrt.Pp.pp_record_field ~first:false "end_time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Trace_types.end_time_unix_nano; - Pbrt.Pp.pp_record_field ~first:false "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Trace_types.attributes; - Pbrt.Pp.pp_record_field ~first:false "dropped_attributes_count" Pbrt.Pp.pp_int32 fmt v.Trace_types.dropped_attributes_count; - Pbrt.Pp.pp_record_field ~first:false "events" (Pbrt.Pp.pp_list pp_span_event) fmt v.Trace_types.events; - Pbrt.Pp.pp_record_field ~first:false "dropped_events_count" Pbrt.Pp.pp_int32 fmt v.Trace_types.dropped_events_count; - Pbrt.Pp.pp_record_field ~first:false "links" (Pbrt.Pp.pp_list pp_span_link) fmt v.Trace_types.links; - Pbrt.Pp.pp_record_field ~first:false "dropped_links_count" Pbrt.Pp.pp_int32 fmt v.Trace_types.dropped_links_count; - Pbrt.Pp.pp_record_field ~first:false "status" (Pbrt.Pp.pp_option pp_status) fmt v.Trace_types.status; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_scope_spans fmt (v:Trace_types.scope_spans) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "scope" (Pbrt.Pp.pp_option Common_pp.pp_instrumentation_scope) fmt v.Trace_types.scope; - Pbrt.Pp.pp_record_field ~first:false "spans" (Pbrt.Pp.pp_list pp_span) fmt v.Trace_types.spans; - Pbrt.Pp.pp_record_field ~first:false "schema_url" Pbrt.Pp.pp_string fmt v.Trace_types.schema_url; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_resource_spans fmt (v:Trace_types.resource_spans) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "resource" (Pbrt.Pp.pp_option Resource_pp.pp_resource) fmt v.Trace_types.resource; - Pbrt.Pp.pp_record_field ~first:false "scope_spans" (Pbrt.Pp.pp_list pp_scope_spans) fmt v.Trace_types.scope_spans; - Pbrt.Pp.pp_record_field ~first:false "schema_url" Pbrt.Pp.pp_string fmt v.Trace_types.schema_url; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_traces_data fmt (v:Trace_types.traces_data) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "resource_spans" (Pbrt.Pp.pp_list pp_resource_spans) fmt v.Trace_types.resource_spans; - in - Pbrt.Pp.pp_brk pp_i fmt () diff --git a/src/trace_pp.mli b/src/trace_pp.mli deleted file mode 100644 index 047f5207..00000000 --- a/src/trace_pp.mli +++ /dev/null @@ -1,31 +0,0 @@ -(** trace.proto Pretty Printing *) - - -(** {2 Formatters} *) - -val pp_span_span_kind : Format.formatter -> Trace_types.span_span_kind -> unit -(** [pp_span_span_kind v] formats v *) - -val pp_span_event : Format.formatter -> Trace_types.span_event -> unit -(** [pp_span_event v] formats v *) - -val pp_span_link : Format.formatter -> Trace_types.span_link -> unit -(** [pp_span_link v] formats v *) - -val pp_status_status_code : Format.formatter -> Trace_types.status_status_code -> unit -(** [pp_status_status_code v] formats v *) - -val pp_status : Format.formatter -> Trace_types.status -> unit -(** [pp_status v] formats v *) - -val pp_span : Format.formatter -> Trace_types.span -> unit -(** [pp_span v] formats v *) - -val pp_scope_spans : Format.formatter -> Trace_types.scope_spans -> unit -(** [pp_scope_spans v] formats v *) - -val pp_resource_spans : Format.formatter -> Trace_types.resource_spans -> unit -(** [pp_resource_spans v] formats v *) - -val pp_traces_data : Format.formatter -> Trace_types.traces_data -> unit -(** [pp_traces_data v] formats v *) diff --git a/src/trace_service_pb.ml b/src/trace_service_pb.ml deleted file mode 100644 index 68733bcf..00000000 --- a/src/trace_service_pb.ml +++ /dev/null @@ -1,112 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - -type export_trace_service_request_mutable = { - mutable resource_spans : Trace_types.resource_spans list; -} - -let default_export_trace_service_request_mutable () : export_trace_service_request_mutable = { - resource_spans = []; -} - -type export_trace_partial_success_mutable = { - mutable rejected_spans : int64; - mutable error_message : string; -} - -let default_export_trace_partial_success_mutable () : export_trace_partial_success_mutable = { - rejected_spans = 0L; - error_message = ""; -} - -type export_trace_service_response_mutable = { - mutable partial_success : Trace_service_types.export_trace_partial_success option; -} - -let default_export_trace_service_response_mutable () : export_trace_service_response_mutable = { - partial_success = None; -} - - -let rec decode_export_trace_service_request d = - let v = default_export_trace_service_request_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.resource_spans <- List.rev v.resource_spans; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.resource_spans <- (Trace_pb.decode_resource_spans (Pbrt.Decoder.nested d)) :: v.resource_spans; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(export_trace_service_request), field(1)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Trace_service_types.resource_spans = v.resource_spans; - } : Trace_service_types.export_trace_service_request) - -let rec decode_export_trace_partial_success d = - let v = default_export_trace_partial_success_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - ); continue__ := false - | Some (1, Pbrt.Varint) -> begin - v.rejected_spans <- Pbrt.Decoder.int64_as_varint d; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(export_trace_partial_success), field(1)" pk - | Some (2, Pbrt.Bytes) -> begin - v.error_message <- Pbrt.Decoder.string d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(export_trace_partial_success), field(2)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Trace_service_types.rejected_spans = v.rejected_spans; - Trace_service_types.error_message = v.error_message; - } : Trace_service_types.export_trace_partial_success) - -let rec decode_export_trace_service_response d = - let v = default_export_trace_service_response_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.partial_success <- Some (decode_export_trace_partial_success (Pbrt.Decoder.nested d)); - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(export_trace_service_response), field(1)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Trace_service_types.partial_success = v.partial_success; - } : Trace_service_types.export_trace_service_response) - -let rec encode_export_trace_service_request (v:Trace_service_types.export_trace_service_request) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (Trace_pb.encode_resource_spans x) encoder; - ) v.Trace_service_types.resource_spans; - () - -let rec encode_export_trace_partial_success (v:Trace_service_types.export_trace_partial_success) encoder = - Pbrt.Encoder.key (1, Pbrt.Varint) encoder; - Pbrt.Encoder.int64_as_varint v.Trace_service_types.rejected_spans encoder; - Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; - Pbrt.Encoder.string v.Trace_service_types.error_message encoder; - () - -let rec encode_export_trace_service_response (v:Trace_service_types.export_trace_service_response) encoder = - begin match v.Trace_service_types.partial_success with - | Some x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_export_trace_partial_success x) encoder; - | None -> (); - end; - () diff --git a/src/trace_service_pb.mli b/src/trace_service_pb.mli deleted file mode 100644 index afd94a31..00000000 --- a/src/trace_service_pb.mli +++ /dev/null @@ -1,25 +0,0 @@ -(** trace_service.proto Binary Encoding *) - - -(** {2 Protobuf Encoding} *) - -val encode_export_trace_service_request : Trace_service_types.export_trace_service_request -> Pbrt.Encoder.t -> unit -(** [encode_export_trace_service_request v encoder] encodes [v] with the given [encoder] *) - -val encode_export_trace_partial_success : Trace_service_types.export_trace_partial_success -> Pbrt.Encoder.t -> unit -(** [encode_export_trace_partial_success v encoder] encodes [v] with the given [encoder] *) - -val encode_export_trace_service_response : Trace_service_types.export_trace_service_response -> Pbrt.Encoder.t -> unit -(** [encode_export_trace_service_response v encoder] encodes [v] with the given [encoder] *) - - -(** {2 Protobuf Decoding} *) - -val decode_export_trace_service_request : Pbrt.Decoder.t -> Trace_service_types.export_trace_service_request -(** [decode_export_trace_service_request decoder] decodes a [export_trace_service_request] value from [decoder] *) - -val decode_export_trace_partial_success : Pbrt.Decoder.t -> Trace_service_types.export_trace_partial_success -(** [decode_export_trace_partial_success decoder] decodes a [export_trace_partial_success] value from [decoder] *) - -val decode_export_trace_service_response : Pbrt.Decoder.t -> Trace_service_types.export_trace_service_response -(** [decode_export_trace_service_response decoder] decodes a [export_trace_service_response] value from [decoder] *) diff --git a/src/trace_service_pp.ml b/src/trace_service_pp.ml deleted file mode 100644 index edc069f2..00000000 --- a/src/trace_service_pp.ml +++ /dev/null @@ -1,20 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - -let rec pp_export_trace_service_request fmt (v:Trace_service_types.export_trace_service_request) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "resource_spans" (Pbrt.Pp.pp_list Trace_pp.pp_resource_spans) fmt v.Trace_service_types.resource_spans; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_export_trace_partial_success fmt (v:Trace_service_types.export_trace_partial_success) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "rejected_spans" Pbrt.Pp.pp_int64 fmt v.Trace_service_types.rejected_spans; - Pbrt.Pp.pp_record_field ~first:false "error_message" Pbrt.Pp.pp_string fmt v.Trace_service_types.error_message; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_export_trace_service_response fmt (v:Trace_service_types.export_trace_service_response) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "partial_success" (Pbrt.Pp.pp_option pp_export_trace_partial_success) fmt v.Trace_service_types.partial_success; - in - Pbrt.Pp.pp_brk pp_i fmt () diff --git a/src/trace_service_pp.mli b/src/trace_service_pp.mli deleted file mode 100644 index d7d52f99..00000000 --- a/src/trace_service_pp.mli +++ /dev/null @@ -1,13 +0,0 @@ -(** trace_service.proto Pretty Printing *) - - -(** {2 Formatters} *) - -val pp_export_trace_service_request : Format.formatter -> Trace_service_types.export_trace_service_request -> unit -(** [pp_export_trace_service_request v] formats v *) - -val pp_export_trace_partial_success : Format.formatter -> Trace_service_types.export_trace_partial_success -> unit -(** [pp_export_trace_partial_success v] formats v *) - -val pp_export_trace_service_response : Format.formatter -> Trace_service_types.export_trace_service_response -> unit -(** [pp_export_trace_service_response v] formats v *) diff --git a/src/trace_service_types.ml b/src/trace_service_types.ml deleted file mode 100644 index 6476d53c..00000000 --- a/src/trace_service_types.ml +++ /dev/null @@ -1,35 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - - -type export_trace_service_request = { - resource_spans : Trace_types.resource_spans list; -} - -type export_trace_partial_success = { - rejected_spans : int64; - error_message : string; -} - -type export_trace_service_response = { - partial_success : export_trace_partial_success option; -} - -let rec default_export_trace_service_request - ?resource_spans:((resource_spans:Trace_types.resource_spans list) = []) - () : export_trace_service_request = { - resource_spans; -} - -let rec default_export_trace_partial_success - ?rejected_spans:((rejected_spans:int64) = 0L) - ?error_message:((error_message:string) = "") - () : export_trace_partial_success = { - rejected_spans; - error_message; -} - -let rec default_export_trace_service_response - ?partial_success:((partial_success:export_trace_partial_success option) = None) - () : export_trace_service_response = { - partial_success; -} diff --git a/src/trace_service_types.mli b/src/trace_service_types.mli deleted file mode 100644 index e7480e77..00000000 --- a/src/trace_service_types.mli +++ /dev/null @@ -1,40 +0,0 @@ -(** trace_service.proto Types *) - - - -(** {2 Types} *) - -type export_trace_service_request = { - resource_spans : Trace_types.resource_spans list; -} - -type export_trace_partial_success = { - rejected_spans : int64; - error_message : string; -} - -type export_trace_service_response = { - partial_success : export_trace_partial_success option; -} - - -(** {2 Default values} *) - -val default_export_trace_service_request : - ?resource_spans:Trace_types.resource_spans list -> - unit -> - export_trace_service_request -(** [default_export_trace_service_request ()] is the default value for type [export_trace_service_request] *) - -val default_export_trace_partial_success : - ?rejected_spans:int64 -> - ?error_message:string -> - unit -> - export_trace_partial_success -(** [default_export_trace_partial_success ()] is the default value for type [export_trace_partial_success] *) - -val default_export_trace_service_response : - ?partial_success:export_trace_partial_success option -> - unit -> - export_trace_service_response -(** [default_export_trace_service_response ()] is the default value for type [export_trace_service_response] *) diff --git a/src/trace_types.ml b/src/trace_types.ml deleted file mode 100644 index 3e51df35..00000000 --- a/src/trace_types.ml +++ /dev/null @@ -1,167 +0,0 @@ -[@@@ocaml.warning "-27-30-39"] - - -type span_span_kind = - | Span_kind_unspecified - | Span_kind_internal - | Span_kind_server - | Span_kind_client - | Span_kind_producer - | Span_kind_consumer - -type span_event = { - time_unix_nano : int64; - name : string; - attributes : Common_types.key_value list; - dropped_attributes_count : int32; -} - -type span_link = { - trace_id : bytes; - span_id : bytes; - trace_state : string; - attributes : Common_types.key_value list; - dropped_attributes_count : int32; -} - -type status_status_code = - | Status_code_unset - | Status_code_ok - | Status_code_error - -type status = { - message : string; - code : status_status_code; -} - -type span = { - trace_id : bytes; - span_id : bytes; - trace_state : string; - parent_span_id : bytes; - name : string; - kind : span_span_kind; - start_time_unix_nano : int64; - end_time_unix_nano : int64; - attributes : Common_types.key_value list; - dropped_attributes_count : int32; - events : span_event list; - dropped_events_count : int32; - links : span_link list; - dropped_links_count : int32; - status : status option; -} - -type scope_spans = { - scope : Common_types.instrumentation_scope option; - spans : span list; - schema_url : string; -} - -type resource_spans = { - resource : Resource_types.resource option; - scope_spans : scope_spans list; - schema_url : string; -} - -type traces_data = { - resource_spans : resource_spans list; -} - -let rec default_span_span_kind () = (Span_kind_unspecified:span_span_kind) - -let rec default_span_event - ?time_unix_nano:((time_unix_nano:int64) = 0L) - ?name:((name:string) = "") - ?attributes:((attributes:Common_types.key_value list) = []) - ?dropped_attributes_count:((dropped_attributes_count:int32) = 0l) - () : span_event = { - time_unix_nano; - name; - attributes; - dropped_attributes_count; -} - -let rec default_span_link - ?trace_id:((trace_id:bytes) = Bytes.create 0) - ?span_id:((span_id:bytes) = Bytes.create 0) - ?trace_state:((trace_state:string) = "") - ?attributes:((attributes:Common_types.key_value list) = []) - ?dropped_attributes_count:((dropped_attributes_count:int32) = 0l) - () : span_link = { - trace_id; - span_id; - trace_state; - attributes; - dropped_attributes_count; -} - -let rec default_status_status_code () = (Status_code_unset:status_status_code) - -let rec default_status - ?message:((message:string) = "") - ?code:((code:status_status_code) = default_status_status_code ()) - () : status = { - message; - code; -} - -let rec default_span - ?trace_id:((trace_id:bytes) = Bytes.create 0) - ?span_id:((span_id:bytes) = Bytes.create 0) - ?trace_state:((trace_state:string) = "") - ?parent_span_id:((parent_span_id:bytes) = Bytes.create 0) - ?name:((name:string) = "") - ?kind:((kind:span_span_kind) = default_span_span_kind ()) - ?start_time_unix_nano:((start_time_unix_nano:int64) = 0L) - ?end_time_unix_nano:((end_time_unix_nano:int64) = 0L) - ?attributes:((attributes:Common_types.key_value list) = []) - ?dropped_attributes_count:((dropped_attributes_count:int32) = 0l) - ?events:((events:span_event list) = []) - ?dropped_events_count:((dropped_events_count:int32) = 0l) - ?links:((links:span_link list) = []) - ?dropped_links_count:((dropped_links_count:int32) = 0l) - ?status:((status:status option) = None) - () : span = { - trace_id; - span_id; - trace_state; - parent_span_id; - name; - kind; - start_time_unix_nano; - end_time_unix_nano; - attributes; - dropped_attributes_count; - events; - dropped_events_count; - links; - dropped_links_count; - status; -} - -let rec default_scope_spans - ?scope:((scope:Common_types.instrumentation_scope option) = None) - ?spans:((spans:span list) = []) - ?schema_url:((schema_url:string) = "") - () : scope_spans = { - scope; - spans; - schema_url; -} - -let rec default_resource_spans - ?resource:((resource:Resource_types.resource option) = None) - ?scope_spans:((scope_spans:scope_spans list) = []) - ?schema_url:((schema_url:string) = "") - () : resource_spans = { - resource; - scope_spans; - schema_url; -} - -let rec default_traces_data - ?resource_spans:((resource_spans:resource_spans list) = []) - () : traces_data = { - resource_spans; -} diff --git a/src/trace_types.mli b/src/trace_types.mli deleted file mode 100644 index ef7ac6dc..00000000 --- a/src/trace_types.mli +++ /dev/null @@ -1,149 +0,0 @@ -(** trace.proto Types *) - - - -(** {2 Types} *) - -type span_span_kind = - | Span_kind_unspecified - | Span_kind_internal - | Span_kind_server - | Span_kind_client - | Span_kind_producer - | Span_kind_consumer - -type span_event = { - time_unix_nano : int64; - name : string; - attributes : Common_types.key_value list; - dropped_attributes_count : int32; -} - -type span_link = { - trace_id : bytes; - span_id : bytes; - trace_state : string; - attributes : Common_types.key_value list; - dropped_attributes_count : int32; -} - -type status_status_code = - | Status_code_unset - | Status_code_ok - | Status_code_error - -type status = { - message : string; - code : status_status_code; -} - -type span = { - trace_id : bytes; - span_id : bytes; - trace_state : string; - parent_span_id : bytes; - name : string; - kind : span_span_kind; - start_time_unix_nano : int64; - end_time_unix_nano : int64; - attributes : Common_types.key_value list; - dropped_attributes_count : int32; - events : span_event list; - dropped_events_count : int32; - links : span_link list; - dropped_links_count : int32; - status : status option; -} - -type scope_spans = { - scope : Common_types.instrumentation_scope option; - spans : span list; - schema_url : string; -} - -type resource_spans = { - resource : Resource_types.resource option; - scope_spans : scope_spans list; - schema_url : string; -} - -type traces_data = { - resource_spans : resource_spans list; -} - - -(** {2 Default values} *) - -val default_span_span_kind : unit -> span_span_kind -(** [default_span_span_kind ()] is the default value for type [span_span_kind] *) - -val default_span_event : - ?time_unix_nano:int64 -> - ?name:string -> - ?attributes:Common_types.key_value list -> - ?dropped_attributes_count:int32 -> - unit -> - span_event -(** [default_span_event ()] is the default value for type [span_event] *) - -val default_span_link : - ?trace_id:bytes -> - ?span_id:bytes -> - ?trace_state:string -> - ?attributes:Common_types.key_value list -> - ?dropped_attributes_count:int32 -> - unit -> - span_link -(** [default_span_link ()] is the default value for type [span_link] *) - -val default_status_status_code : unit -> status_status_code -(** [default_status_status_code ()] is the default value for type [status_status_code] *) - -val default_status : - ?message:string -> - ?code:status_status_code -> - unit -> - status -(** [default_status ()] is the default value for type [status] *) - -val default_span : - ?trace_id:bytes -> - ?span_id:bytes -> - ?trace_state:string -> - ?parent_span_id:bytes -> - ?name:string -> - ?kind:span_span_kind -> - ?start_time_unix_nano:int64 -> - ?end_time_unix_nano:int64 -> - ?attributes:Common_types.key_value list -> - ?dropped_attributes_count:int32 -> - ?events:span_event list -> - ?dropped_events_count:int32 -> - ?links:span_link list -> - ?dropped_links_count:int32 -> - ?status:status option -> - unit -> - span -(** [default_span ()] is the default value for type [span] *) - -val default_scope_spans : - ?scope:Common_types.instrumentation_scope option -> - ?spans:span list -> - ?schema_url:string -> - unit -> - scope_spans -(** [default_scope_spans ()] is the default value for type [scope_spans] *) - -val default_resource_spans : - ?resource:Resource_types.resource option -> - ?scope_spans:scope_spans list -> - ?schema_url:string -> - unit -> - resource_spans -(** [default_resource_spans ()] is the default value for type [resource_spans] *) - -val default_traces_data : - ?resource_spans:resource_spans list -> - unit -> - traces_data -(** [default_traces_data ()] is the default value for type [traces_data] *) From db45d9ff5613c82f7a982e18eae02dc2338abac3 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Tue, 7 Nov 2023 15:35:40 -0500 Subject: [PATCH 32/40] no open --- src/core/dune | 2 +- src/core/opentelemetry.ml | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/core/dune b/src/core/dune index f3dcfa4e..f3671f64 100644 --- a/src/core/dune +++ b/src/core/dune @@ -1,7 +1,7 @@ (library (name opentelemetry) (synopsis "API for opentelemetry instrumentation") - (flags :standard -warn-error -a+8 -open Opentelemetry_proto) + (flags :standard -warn-error -a+8) (libraries opentelemetry.proto ambient-context ptime ptime.clock.os pbrt threads opentelemetry.atomic) (public_name opentelemetry)) diff --git a/src/core/opentelemetry.ml b/src/core/opentelemetry.ml index 66ca27d2..983ca128 100644 --- a/src/core/opentelemetry.ml +++ b/src/core/opentelemetry.ml @@ -19,6 +19,8 @@ end This is mostly useful internally. Users should not need to touch it. *) module Proto = struct + open Opentelemetry_proto + module Common = struct include Common_types include Common_pp @@ -887,6 +889,7 @@ end See {{: https://opentelemetry.io/docs/reference/specification/overview/#metric-signal} the spec} *) module Metrics = struct + open Opentelemetry_proto open Metrics_types type t = Metrics_types.metric @@ -989,6 +992,7 @@ end See {{: https://opentelemetry.io/docs/reference/specification/overview/#log-signal} the spec} *) module Logs = struct + open Opentelemetry_proto open Logs_types type t = log_record From 6bf49dc050868e8b609663a318df06b4dcac2a37 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Wed, 8 Nov 2023 11:35:19 -0500 Subject: [PATCH 33/40] refactor tests to avoid circular dependencies --- dune-project | 40 ++------------------ opentelemetry-client-cohttp-lwt.opam | 1 - opentelemetry-client-ocurl.opam | 1 - opentelemetry-cohttp-lwt.opam | 2 - opentelemetry-lwt.opam | 2 - opentelemetry.opam | 2 - tests/cohttp/dune | 4 ++ tests/{ => cohttp}/test_get_url.expected | 1 - tests/{ => cohttp}/test_get_url.ml | 10 +---- tests/core/dune | 5 +++ tests/{ => core}/test_trace_context.expected | 0 tests/{ => core}/test_trace_context.ml | 0 tests/dune | 4 -- tests/implicit_scope/sync/dune | 1 + tests/ocurl/dune | 5 +++ tests/ocurl/test_get_url.expected | 1 + tests/ocurl/test_get_url.ml | 9 +++++ 17 files changed, 30 insertions(+), 58 deletions(-) create mode 100644 tests/cohttp/dune rename tests/{ => cohttp}/test_get_url.expected (50%) rename tests/{ => cohttp}/test_get_url.ml (51%) create mode 100644 tests/core/dune rename tests/{ => core}/test_trace_context.expected (100%) rename tests/{ => core}/test_trace_context.ml (100%) delete mode 100644 tests/dune create mode 100644 tests/ocurl/dune create mode 100644 tests/ocurl/test_get_url.expected create mode 100644 tests/ocurl/test_get_url.ml diff --git a/dune-project b/dune-project index c7d242e6..3938038b 100644 --- a/dune-project +++ b/dune-project @@ -30,14 +30,6 @@ ambient-context (odoc :with-doc) (alcotest :with-test) - (opentelemetry-client-cohttp-lwt - (and - :with-test - (= :version))) - (opentelemetry-client-ocurl - (and - :with-test - (= :version))) (pbrt (>= 2.3)) (ocaml-lsp-server :with-dev-setup) @@ -70,15 +62,7 @@ (>= "5.3")) (lwt_ppx (>= "2.0")) - (alcotest :with-test) - (opentelemetry-client-cohttp-lwt - (and - :with-test - (= :version))) - (opentelemetry-client-ocurl - (and - :with-test - (= :version)))) + (alcotest :with-test)) (tags (instrumentation tracing opentelemetry datadog lwt))) @@ -99,11 +83,7 @@ (ezcurl (>= 0.2.3)) ocurl - (alcotest :with-test) - (opentelemetry-client-cohttp-lwt - (and - :with-test - (= :version)))) + (alcotest :with-test)) (synopsis "Collector client for opentelemetry, using http + ezcurl")) (package @@ -120,15 +100,7 @@ (>= "5.3")) (cohttp-lwt (>= "4.0.0")) - (alcotest :with-test) - (opentelemetry-client-cohttp-lwt - (and - :with-test - (= :version))) - (opentelemetry-client-ocurl - (and - :with-test - (= :version)))) + (alcotest :with-test)) (synopsis "Opentelemetry tracing for Cohttp HTTP servers")) (package @@ -150,9 +122,5 @@ (>= "2.0")) cohttp-lwt cohttp-lwt-unix - (alcotest :with-test) - (opentelemetry-client-ocurl - (and - :with-test - (= :version)))) + (alcotest :with-test)) (synopsis "Collector client for opentelemetry, using cohttp + lwt")) diff --git a/opentelemetry-client-cohttp-lwt.opam b/opentelemetry-client-cohttp-lwt.opam index 93b11939..8ded95ec 100644 --- a/opentelemetry-client-cohttp-lwt.opam +++ b/opentelemetry-client-cohttp-lwt.opam @@ -23,7 +23,6 @@ depends: [ "cohttp-lwt" "cohttp-lwt-unix" "alcotest" {with-test} - "opentelemetry-client-ocurl" {with-test & = version} ] build: [ ["dune" "subst"] {dev} diff --git a/opentelemetry-client-ocurl.opam b/opentelemetry-client-ocurl.opam index 0a32fc67..21d01814 100644 --- a/opentelemetry-client-ocurl.opam +++ b/opentelemetry-client-ocurl.opam @@ -21,7 +21,6 @@ depends: [ "ezcurl" {>= "0.2.3"} "ocurl" "alcotest" {with-test} - "opentelemetry-client-cohttp-lwt" {with-test & = version} ] build: [ ["dune" "subst"] {dev} diff --git a/opentelemetry-cohttp-lwt.opam b/opentelemetry-cohttp-lwt.opam index 94ec245d..20c5321a 100644 --- a/opentelemetry-cohttp-lwt.opam +++ b/opentelemetry-cohttp-lwt.opam @@ -20,8 +20,6 @@ depends: [ "lwt" {>= "5.3"} "cohttp-lwt" {>= "4.0.0"} "alcotest" {with-test} - "opentelemetry-client-cohttp-lwt" {with-test & = version} - "opentelemetry-client-ocurl" {with-test & = version} ] build: [ ["dune" "subst"] {dev} diff --git a/opentelemetry-lwt.opam b/opentelemetry-lwt.opam index ff13e0d6..a03196a2 100644 --- a/opentelemetry-lwt.opam +++ b/opentelemetry-lwt.opam @@ -22,8 +22,6 @@ depends: [ "lwt" {>= "5.3"} "lwt_ppx" {>= "2.0"} "alcotest" {with-test} - "opentelemetry-client-cohttp-lwt" {with-test & = version} - "opentelemetry-client-ocurl" {with-test & = version} ] build: [ ["dune" "subst"] {dev} diff --git a/opentelemetry.opam b/opentelemetry.opam index cfc11eeb..cf4a98f3 100644 --- a/opentelemetry.opam +++ b/opentelemetry.opam @@ -19,8 +19,6 @@ depends: [ "ambient-context" "odoc" {with-doc} "alcotest" {with-test} - "opentelemetry-client-cohttp-lwt" {with-test & = version} - "opentelemetry-client-ocurl" {with-test & = version} "pbrt" {>= "2.3"} "ocaml-lsp-server" {with-dev-setup} "ocamlformat" {with-dev-setup & >= "0.24" & < "0.25"} diff --git a/tests/cohttp/dune b/tests/cohttp/dune new file mode 100644 index 00000000..b467b27c --- /dev/null +++ b/tests/cohttp/dune @@ -0,0 +1,4 @@ +(tests + (names test_get_url) + (package opentelemetry-client-cohttp-lwt) + (libraries opentelemetry opentelemetry-client-cohttp-lwt)) diff --git a/tests/test_get_url.expected b/tests/cohttp/test_get_url.expected similarity index 50% rename from tests/test_get_url.expected rename to tests/cohttp/test_get_url.expected index bafd6ea4..400f46eb 100644 --- a/tests/test_get_url.expected +++ b/tests/cohttp/test_get_url.expected @@ -1,2 +1 @@ -ocurl url = http://localhost:3000 cohttp url = http://localhost:3000 diff --git a/tests/test_get_url.ml b/tests/cohttp/test_get_url.ml similarity index 51% rename from tests/test_get_url.ml rename to tests/cohttp/test_get_url.ml index 397996d3..3a271956 100644 --- a/tests/test_get_url.ml +++ b/tests/cohttp/test_get_url.ml @@ -1,17 +1,9 @@ let url = "http://localhost:3000" -let ocurl () = - let config = Opentelemetry_client_ocurl.Config.make ~url () in - Opentelemetry_client_ocurl.with_setup ~config () @@ fun () -> - let url = Opentelemetry_client_ocurl.get_url () in - print_endline @@ Printf.sprintf "ocurl url = %s" url - let cohttp () = let config = Opentelemetry_client_cohttp_lwt.Config.make ~url () in Opentelemetry_client_cohttp_lwt.with_setup ~config () @@ fun () -> let url = Opentelemetry_client_cohttp_lwt.get_url () in print_endline @@ Printf.sprintf "cohttp url = %s" url -let () = - ocurl (); - cohttp () +let () = cohttp () diff --git a/tests/core/dune b/tests/core/dune new file mode 100644 index 00000000..da93554f --- /dev/null +++ b/tests/core/dune @@ -0,0 +1,5 @@ + +(tests + (names test_trace_context ) + (package opentelemetry) + (libraries opentelemetry)) diff --git a/tests/test_trace_context.expected b/tests/core/test_trace_context.expected similarity index 100% rename from tests/test_trace_context.expected rename to tests/core/test_trace_context.expected diff --git a/tests/test_trace_context.ml b/tests/core/test_trace_context.ml similarity index 100% rename from tests/test_trace_context.ml rename to tests/core/test_trace_context.ml diff --git a/tests/dune b/tests/dune deleted file mode 100644 index c005f866..00000000 --- a/tests/dune +++ /dev/null @@ -1,4 +0,0 @@ -(tests - (names test_trace_context test_get_url) - (libraries opentelemetry opentelemetry-client-ocurl - opentelemetry-client-cohttp-lwt)) diff --git a/tests/implicit_scope/sync/dune b/tests/implicit_scope/sync/dune index 072eee77..8b5407f4 100644 --- a/tests/implicit_scope/sync/dune +++ b/tests/implicit_scope/sync/dune @@ -1,3 +1,4 @@ (tests (names test_implicit_scope_sync) + (package opentelemetry-client-cohttp-lwt) (libraries alcotest opentelemetry opentelemetry-client-cohttp-lwt)) diff --git a/tests/ocurl/dune b/tests/ocurl/dune new file mode 100644 index 00000000..18a15fca --- /dev/null +++ b/tests/ocurl/dune @@ -0,0 +1,5 @@ + +(tests + (names test_get_url) + (package opentelemetry-client-ocurl) + (libraries opentelemetry opentelemetry-client-ocurl)) diff --git a/tests/ocurl/test_get_url.expected b/tests/ocurl/test_get_url.expected new file mode 100644 index 00000000..0b9a4214 --- /dev/null +++ b/tests/ocurl/test_get_url.expected @@ -0,0 +1 @@ +ocurl url = http://localhost:3000 diff --git a/tests/ocurl/test_get_url.ml b/tests/ocurl/test_get_url.ml new file mode 100644 index 00000000..1e142015 --- /dev/null +++ b/tests/ocurl/test_get_url.ml @@ -0,0 +1,9 @@ +let url = "http://localhost:3000" + +let ocurl () = + let config = Opentelemetry_client_ocurl.Config.make ~url () in + Opentelemetry_client_ocurl.with_setup ~config () @@ fun () -> + let url = Opentelemetry_client_ocurl.get_url () in + print_endline @@ Printf.sprintf "ocurl url = %s" url + +let () = ocurl () From 0532c9b9efb57115ae03f2988dee69b43ee72258 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Wed, 8 Nov 2023 11:41:59 -0500 Subject: [PATCH 34/40] add missing proto directory --- src/proto/common_pb.ml | 224 +++++ src/proto/common_pb.mli | 37 + src/proto/common_pp.ml | 39 + src/proto/common_pp.mli | 20 + src/proto/common_types.ml | 65 ++ src/proto/common_types.mli | 68 ++ src/proto/dune | 126 +++ src/proto/logs_pb.ml | 348 ++++++++ src/proto/logs_pb.mli | 43 + src/proto/logs_pp.ml | 71 ++ src/proto/logs_pp.mli | 23 + src/proto/logs_service_pb.ml | 112 +++ src/proto/logs_service_pb.mli | 25 + src/proto/logs_service_pp.ml | 20 + src/proto/logs_service_pp.mli | 14 + src/proto/logs_service_types.ml | 35 + src/proto/logs_service_types.mli | 40 + src/proto/logs_types.ml | 116 +++ src/proto/logs_types.mli | 111 +++ src/proto/metrics_pb.ml | 1282 +++++++++++++++++++++++++++ src/proto/metrics_pb.mli | 133 +++ src/proto/metrics_pp.ml | 177 ++++ src/proto/metrics_pp.mli | 68 ++ src/proto/metrics_service_pb.ml | 112 +++ src/proto/metrics_service_pb.mli | 25 + src/proto/metrics_service_pp.ml | 20 + src/proto/metrics_service_pp.mli | 14 + src/proto/metrics_service_types.ml | 35 + src/proto/metrics_service_types.mli | 40 + src/proto/metrics_types.ml | 349 ++++++++ src/proto/metrics_types.mli | 309 +++++++ src/proto/resource_pb.ml | 46 + src/proto/resource_pb.mli | 13 + src/proto/resource_pp.ml | 8 + src/proto/resource_pp.mli | 8 + src/proto/resource_types.ml | 15 + src/proto/resource_types.mli | 20 + src/proto/status.proto | 10 + src/proto/status_pb.ml | 56 ++ src/proto/status_pb.mli | 13 + src/proto/status_pp.ml | 9 + src/proto/status_pp.mli | 8 + src/proto/status_types.ml | 18 + src/proto/status_types.mli | 22 + src/proto/trace_pb.ml | 547 ++++++++++++ src/proto/trace_pb.mli | 61 ++ src/proto/trace_pp.ml | 84 ++ src/proto/trace_pp.mli | 32 + src/proto/trace_service_pb.ml | 112 +++ src/proto/trace_service_pb.mli | 25 + src/proto/trace_service_pp.ml | 20 + src/proto/trace_service_pp.mli | 14 + src/proto/trace_service_types.ml | 35 + src/proto/trace_service_types.mli | 40 + src/proto/trace_types.ml | 167 ++++ src/proto/trace_types.mli | 149 ++++ 56 files changed, 5633 insertions(+) create mode 100644 src/proto/common_pb.ml create mode 100644 src/proto/common_pb.mli create mode 100644 src/proto/common_pp.ml create mode 100644 src/proto/common_pp.mli create mode 100644 src/proto/common_types.ml create mode 100644 src/proto/common_types.mli create mode 100644 src/proto/dune create mode 100644 src/proto/logs_pb.ml create mode 100644 src/proto/logs_pb.mli create mode 100644 src/proto/logs_pp.ml create mode 100644 src/proto/logs_pp.mli create mode 100644 src/proto/logs_service_pb.ml create mode 100644 src/proto/logs_service_pb.mli create mode 100644 src/proto/logs_service_pp.ml create mode 100644 src/proto/logs_service_pp.mli create mode 100644 src/proto/logs_service_types.ml create mode 100644 src/proto/logs_service_types.mli create mode 100644 src/proto/logs_types.ml create mode 100644 src/proto/logs_types.mli create mode 100644 src/proto/metrics_pb.ml create mode 100644 src/proto/metrics_pb.mli create mode 100644 src/proto/metrics_pp.ml create mode 100644 src/proto/metrics_pp.mli create mode 100644 src/proto/metrics_service_pb.ml create mode 100644 src/proto/metrics_service_pb.mli create mode 100644 src/proto/metrics_service_pp.ml create mode 100644 src/proto/metrics_service_pp.mli create mode 100644 src/proto/metrics_service_types.ml create mode 100644 src/proto/metrics_service_types.mli create mode 100644 src/proto/metrics_types.ml create mode 100644 src/proto/metrics_types.mli create mode 100644 src/proto/resource_pb.ml create mode 100644 src/proto/resource_pb.mli create mode 100644 src/proto/resource_pp.ml create mode 100644 src/proto/resource_pp.mli create mode 100644 src/proto/resource_types.ml create mode 100644 src/proto/resource_types.mli create mode 100644 src/proto/status.proto create mode 100644 src/proto/status_pb.ml create mode 100644 src/proto/status_pb.mli create mode 100644 src/proto/status_pp.ml create mode 100644 src/proto/status_pp.mli create mode 100644 src/proto/status_types.ml create mode 100644 src/proto/status_types.mli create mode 100644 src/proto/trace_pb.ml create mode 100644 src/proto/trace_pb.mli create mode 100644 src/proto/trace_pp.ml create mode 100644 src/proto/trace_pp.mli create mode 100644 src/proto/trace_service_pb.ml create mode 100644 src/proto/trace_service_pb.mli create mode 100644 src/proto/trace_service_pp.ml create mode 100644 src/proto/trace_service_pp.mli create mode 100644 src/proto/trace_service_types.ml create mode 100644 src/proto/trace_service_types.mli create mode 100644 src/proto/trace_types.ml create mode 100644 src/proto/trace_types.mli diff --git a/src/proto/common_pb.ml b/src/proto/common_pb.ml new file mode 100644 index 00000000..cc2f7034 --- /dev/null +++ b/src/proto/common_pb.ml @@ -0,0 +1,224 @@ +[@@@ocaml.warning "-27-30-39"] + +type key_value_list_mutable = { + mutable values : Common_types.key_value list; +} + +let default_key_value_list_mutable () : key_value_list_mutable = { + values = []; +} + +type key_value_mutable = { + mutable key : string; + mutable value : Common_types.any_value option; +} + +let default_key_value_mutable () : key_value_mutable = { + key = ""; + value = None; +} + +type array_value_mutable = { + mutable values : Common_types.any_value list; +} + +let default_array_value_mutable () : array_value_mutable = { + values = []; +} + +type instrumentation_scope_mutable = { + mutable name : string; + mutable version : string; + mutable attributes : Common_types.key_value list; + mutable dropped_attributes_count : int32; +} + +let default_instrumentation_scope_mutable () : instrumentation_scope_mutable = { + name = ""; + version = ""; + attributes = []; + dropped_attributes_count = 0l; +} + + +let rec decode_any_value d = + let rec loop () = + let ret:Common_types.any_value = match Pbrt.Decoder.key d with + | None -> Pbrt.Decoder.malformed_variant "any_value" + | Some (7, _) -> (Common_types.Bytes_value (Pbrt.Decoder.bytes d) : Common_types.any_value) + | Some (6, _) -> (Common_types.Kvlist_value (decode_key_value_list (Pbrt.Decoder.nested d)) : Common_types.any_value) + | Some (5, _) -> (Common_types.Array_value (decode_array_value (Pbrt.Decoder.nested d)) : Common_types.any_value) + | Some (4, _) -> (Common_types.Double_value (Pbrt.Decoder.float_as_bits64 d) : Common_types.any_value) + | Some (3, _) -> (Common_types.Int_value (Pbrt.Decoder.int64_as_varint d) : Common_types.any_value) + | Some (2, _) -> (Common_types.Bool_value (Pbrt.Decoder.bool d) : Common_types.any_value) + | Some (1, _) -> (Common_types.String_value (Pbrt.Decoder.string d) : Common_types.any_value) + | Some (n, payload_kind) -> ( + Pbrt.Decoder.skip d payload_kind; + loop () + ) + in + ret + in + loop () + +and decode_key_value_list d = + let v = default_key_value_list_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.values <- List.rev v.values; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.values <- (decode_key_value (Pbrt.Decoder.nested d)) :: v.values; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(key_value_list), field(1)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Common_types.values = v.values; + } : Common_types.key_value_list) + +and decode_key_value d = + let v = default_key_value_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.key <- Pbrt.Decoder.string d; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(key_value), field(1)" pk + | Some (2, Pbrt.Bytes) -> begin + v.value <- Some (decode_any_value (Pbrt.Decoder.nested d)); + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(key_value), field(2)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Common_types.key = v.key; + Common_types.value = v.value; + } : Common_types.key_value) + +and decode_array_value d = + let v = default_array_value_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.values <- List.rev v.values; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.values <- (decode_any_value (Pbrt.Decoder.nested d)) :: v.values; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(array_value), field(1)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Common_types.values = v.values; + } : Common_types.array_value) + +let rec decode_instrumentation_scope d = + let v = default_instrumentation_scope_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.attributes <- List.rev v.attributes; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.name <- Pbrt.Decoder.string d; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(instrumentation_scope), field(1)" pk + | Some (2, Pbrt.Bytes) -> begin + v.version <- Pbrt.Decoder.string d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(instrumentation_scope), field(2)" pk + | Some (3, Pbrt.Bytes) -> begin + v.attributes <- (decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(instrumentation_scope), field(3)" pk + | Some (4, Pbrt.Varint) -> begin + v.dropped_attributes_count <- Pbrt.Decoder.int32_as_varint d; + end + | Some (4, pk) -> + Pbrt.Decoder.unexpected_payload "Message(instrumentation_scope), field(4)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Common_types.name = v.name; + Common_types.version = v.version; + Common_types.attributes = v.attributes; + Common_types.dropped_attributes_count = v.dropped_attributes_count; + } : Common_types.instrumentation_scope) + +let rec encode_any_value (v:Common_types.any_value) encoder = + begin match v with + | Common_types.Bytes_value x -> + Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; + Pbrt.Encoder.bytes x encoder; + | Common_types.Kvlist_value x -> + Pbrt.Encoder.key (6, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_key_value_list x) encoder; + | Common_types.Array_value x -> + Pbrt.Encoder.key (5, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_array_value x) encoder; + | Common_types.Double_value x -> + Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 x encoder; + | Common_types.Int_value x -> + Pbrt.Encoder.key (3, Pbrt.Varint) encoder; + Pbrt.Encoder.int64_as_varint x encoder; + | Common_types.Bool_value x -> + Pbrt.Encoder.key (2, Pbrt.Varint) encoder; + Pbrt.Encoder.bool x encoder; + | Common_types.String_value x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.string x encoder; + end + +and encode_key_value_list (v:Common_types.key_value_list) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_key_value x) encoder; + ) v.Common_types.values; + () + +and encode_key_value (v:Common_types.key_value) encoder = + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.string v.Common_types.key encoder; + begin match v.Common_types.value with + | Some x -> + Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_any_value x) encoder; + | None -> (); + end; + () + +and encode_array_value (v:Common_types.array_value) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_any_value x) encoder; + ) v.Common_types.values; + () + +let rec encode_instrumentation_scope (v:Common_types.instrumentation_scope) encoder = + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.string v.Common_types.name encoder; + Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; + Pbrt.Encoder.string v.Common_types.version encoder; + List.iter (fun x -> + Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_key_value x) encoder; + ) v.Common_types.attributes; + Pbrt.Encoder.key (4, Pbrt.Varint) encoder; + Pbrt.Encoder.int32_as_varint v.Common_types.dropped_attributes_count encoder; + () diff --git a/src/proto/common_pb.mli b/src/proto/common_pb.mli new file mode 100644 index 00000000..a415b483 --- /dev/null +++ b/src/proto/common_pb.mli @@ -0,0 +1,37 @@ +(** common.proto Binary Encoding *) + + +(** {2 Protobuf Encoding} *) + +val encode_any_value : Common_types.any_value -> Pbrt.Encoder.t -> unit +(** [encode_any_value v encoder] encodes [v] with the given [encoder] *) + +val encode_key_value_list : Common_types.key_value_list -> Pbrt.Encoder.t -> unit +(** [encode_key_value_list v encoder] encodes [v] with the given [encoder] *) + +val encode_key_value : Common_types.key_value -> Pbrt.Encoder.t -> unit +(** [encode_key_value v encoder] encodes [v] with the given [encoder] *) + +val encode_array_value : Common_types.array_value -> Pbrt.Encoder.t -> unit +(** [encode_array_value v encoder] encodes [v] with the given [encoder] *) + +val encode_instrumentation_scope : Common_types.instrumentation_scope -> Pbrt.Encoder.t -> unit +(** [encode_instrumentation_scope v encoder] encodes [v] with the given [encoder] *) + + +(** {2 Protobuf Decoding} *) + +val decode_any_value : Pbrt.Decoder.t -> Common_types.any_value +(** [decode_any_value decoder] decodes a [any_value] value from [decoder] *) + +val decode_key_value_list : Pbrt.Decoder.t -> Common_types.key_value_list +(** [decode_key_value_list decoder] decodes a [key_value_list] value from [decoder] *) + +val decode_key_value : Pbrt.Decoder.t -> Common_types.key_value +(** [decode_key_value decoder] decodes a [key_value] value from [decoder] *) + +val decode_array_value : Pbrt.Decoder.t -> Common_types.array_value +(** [decode_array_value decoder] decodes a [array_value] value from [decoder] *) + +val decode_instrumentation_scope : Pbrt.Decoder.t -> Common_types.instrumentation_scope +(** [decode_instrumentation_scope decoder] decodes a [instrumentation_scope] value from [decoder] *) diff --git a/src/proto/common_pp.ml b/src/proto/common_pp.ml new file mode 100644 index 00000000..0bbc2906 --- /dev/null +++ b/src/proto/common_pp.ml @@ -0,0 +1,39 @@ +[@@@ocaml.warning "-27-30-39"] + +let rec pp_any_value fmt (v:Common_types.any_value) = + match v with + | Common_types.Bytes_value x -> Format.fprintf fmt "@[Bytes_value(@,%a)@]" Pbrt.Pp.pp_bytes x + | Common_types.Kvlist_value x -> Format.fprintf fmt "@[Kvlist_value(@,%a)@]" pp_key_value_list x + | Common_types.Array_value x -> Format.fprintf fmt "@[Array_value(@,%a)@]" pp_array_value x + | Common_types.Double_value x -> Format.fprintf fmt "@[Double_value(@,%a)@]" Pbrt.Pp.pp_float x + | Common_types.Int_value x -> Format.fprintf fmt "@[Int_value(@,%a)@]" Pbrt.Pp.pp_int64 x + | Common_types.Bool_value x -> Format.fprintf fmt "@[Bool_value(@,%a)@]" Pbrt.Pp.pp_bool x + | Common_types.String_value x -> Format.fprintf fmt "@[String_value(@,%a)@]" Pbrt.Pp.pp_string x + +and pp_key_value_list fmt (v:Common_types.key_value_list) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "values" (Pbrt.Pp.pp_list pp_key_value) fmt v.Common_types.values; + in + Pbrt.Pp.pp_brk pp_i fmt () + +and pp_key_value fmt (v:Common_types.key_value) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "key" Pbrt.Pp.pp_string fmt v.Common_types.key; + Pbrt.Pp.pp_record_field ~first:false "value" (Pbrt.Pp.pp_option pp_any_value) fmt v.Common_types.value; + in + Pbrt.Pp.pp_brk pp_i fmt () + +and pp_array_value fmt (v:Common_types.array_value) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "values" (Pbrt.Pp.pp_list pp_any_value) fmt v.Common_types.values; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_instrumentation_scope fmt (v:Common_types.instrumentation_scope) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "name" Pbrt.Pp.pp_string fmt v.Common_types.name; + Pbrt.Pp.pp_record_field ~first:false "version" Pbrt.Pp.pp_string fmt v.Common_types.version; + Pbrt.Pp.pp_record_field ~first:false "attributes" (Pbrt.Pp.pp_list pp_key_value) fmt v.Common_types.attributes; + Pbrt.Pp.pp_record_field ~first:false "dropped_attributes_count" Pbrt.Pp.pp_int32 fmt v.Common_types.dropped_attributes_count; + in + Pbrt.Pp.pp_brk pp_i fmt () diff --git a/src/proto/common_pp.mli b/src/proto/common_pp.mli new file mode 100644 index 00000000..64c5f919 --- /dev/null +++ b/src/proto/common_pp.mli @@ -0,0 +1,20 @@ + +(** common.proto Pretty Printing *) + + +(** {2 Formatters} *) + +val pp_any_value : Format.formatter -> Common_types.any_value -> unit +(** [pp_any_value v] formats v *) + +val pp_key_value_list : Format.formatter -> Common_types.key_value_list -> unit +(** [pp_key_value_list v] formats v *) + +val pp_key_value : Format.formatter -> Common_types.key_value -> unit +(** [pp_key_value v] formats v *) + +val pp_array_value : Format.formatter -> Common_types.array_value -> unit +(** [pp_array_value v] formats v *) + +val pp_instrumentation_scope : Format.formatter -> Common_types.instrumentation_scope -> unit +(** [pp_instrumentation_scope v] formats v *) diff --git a/src/proto/common_types.ml b/src/proto/common_types.ml new file mode 100644 index 00000000..3d010172 --- /dev/null +++ b/src/proto/common_types.ml @@ -0,0 +1,65 @@ +[@@@ocaml.warning "-27-30-39"] + + +type any_value = + | Bytes_value of bytes + | Kvlist_value of key_value_list + | Array_value of array_value + | Double_value of float + | Int_value of int64 + | Bool_value of bool + | String_value of string + +and key_value_list = { + values : key_value list; +} + +and key_value = { + key : string; + value : any_value option; +} + +and array_value = { + values : any_value list; +} + +type instrumentation_scope = { + name : string; + version : string; + attributes : key_value list; + dropped_attributes_count : int32; +} + +let rec default_any_value () : any_value = Bytes_value (Bytes.create 0) + +and default_key_value_list + ?values:((values:key_value list) = []) + () : key_value_list = { + values; +} + +and default_key_value + ?key:((key:string) = "") + ?value:((value:any_value option) = None) + () : key_value = { + key; + value; +} + +and default_array_value + ?values:((values:any_value list) = []) + () : array_value = { + values; +} + +let rec default_instrumentation_scope + ?name:((name:string) = "") + ?version:((version:string) = "") + ?attributes:((attributes:key_value list) = []) + ?dropped_attributes_count:((dropped_attributes_count:int32) = 0l) + () : instrumentation_scope = { + name; + version; + attributes; + dropped_attributes_count; +} diff --git a/src/proto/common_types.mli b/src/proto/common_types.mli new file mode 100644 index 00000000..2e72d579 --- /dev/null +++ b/src/proto/common_types.mli @@ -0,0 +1,68 @@ +(** common.proto Types *) + + + +(** {2 Types} *) + +type any_value = + | Bytes_value of bytes + | Kvlist_value of key_value_list + | Array_value of array_value + | Double_value of float + | Int_value of int64 + | Bool_value of bool + | String_value of string + +and key_value_list = { + values : key_value list; +} + +and key_value = { + key : string; + value : any_value option; +} + +and array_value = { + values : any_value list; +} + +type instrumentation_scope = { + name : string; + version : string; + attributes : key_value list; + dropped_attributes_count : int32; +} + + +(** {2 Default values} *) + +val default_any_value : unit -> any_value +(** [default_any_value ()] is the default value for type [any_value] *) + +val default_key_value_list : + ?values:key_value list -> + unit -> + key_value_list +(** [default_key_value_list ()] is the default value for type [key_value_list] *) + +val default_key_value : + ?key:string -> + ?value:any_value option -> + unit -> + key_value +(** [default_key_value ()] is the default value for type [key_value] *) + +val default_array_value : + ?values:any_value list -> + unit -> + array_value +(** [default_array_value ()] is the default value for type [array_value] *) + +val default_instrumentation_scope : + ?name:string -> + ?version:string -> + ?attributes:key_value list -> + ?dropped_attributes_count:int32 -> + unit -> + instrumentation_scope +(** [default_instrumentation_scope ()] is the default value for type [instrumentation_scope] *) diff --git a/src/proto/dune b/src/proto/dune new file mode 100644 index 00000000..a87df75d --- /dev/null +++ b/src/proto/dune @@ -0,0 +1,126 @@ + +(library + (name opentelemetry_proto) + (public_name opentelemetry.proto) + (synopsis "Protobuf generated code for opentelemetry") + (flags :standard -warn-error -a+8) + (libraries pbrt)) + +; ### protobuf rules ### + +(rule + (alias lint) + (mode promote) + (targets status_types.ml status_types.mli status_pb.ml status_pb.mli + status_pp.ml status_pp.mli) + (deps + (:file status.proto) + (source_tree %{project_root}/vendor/opentelemetry-proto/)) + (action + (run ocaml-protoc %{file} -ml_out . -pp -binary))) + +(rule + (alias lint) + (mode promote) + (targets common_types.ml common_types.mli common_pb.ml common_pb.mli + common_pp.ml common_pp.mli) + (deps + (:file + %{project_root}/vendor/opentelemetry-proto/opentelemetry/proto/common/v1/common.proto) + (source_tree %{project_root}/vendor/opentelemetry-proto/)) + (action + (run ocaml-protoc %{file} -I %{project_root}/vendor/opentelemetry-proto/ + -ml_out . -pp -binary))) + +(rule + (alias lint) + (mode promote) + (targets resource_types.ml resource_types.mli resource_pb.ml resource_pb.mli + resource_pp.ml resource_pp.mli) + (deps + (:file + %{project_root}/vendor/opentelemetry-proto/opentelemetry/proto/resource/v1/resource.proto) + (source_tree %{project_root}/vendor/opentelemetry-proto/)) + (action + (run ocaml-protoc %{file} -I %{project_root}/vendor/opentelemetry-proto/ + -ml_out . -pp -binary))) + +(rule + (alias lint) + (mode promote) + (targets trace_types.ml trace_types.mli trace_pb.ml trace_pb.mli trace_pp.ml + trace_pp.mli) + (deps + (:file + %{project_root}/vendor/opentelemetry-proto/opentelemetry/proto/trace/v1/trace.proto) + (source_tree %{project_root}/vendor/opentelemetry-proto/)) + (action + (run ocaml-protoc %{file} -I %{project_root}/vendor/opentelemetry-proto/ + -ml_out . -pp -binary))) + +(rule + (alias lint) + (mode promote) + (targets metrics_types.ml metrics_types.mli metrics_pb.ml metrics_pb.mli + metrics_pp.ml metrics_pp.mli) + (deps + (:file + %{project_root}/vendor/opentelemetry-proto/opentelemetry/proto/metrics/v1/metrics.proto) + (source_tree %{project_root}/vendor/opentelemetry-proto/)) + (action + (run ocaml-protoc %{file} -I %{project_root}/vendor/opentelemetry-proto/ + -ml_out . -pp -binary))) + +(rule + (alias lint) + (mode promote) + (targets logs_types.ml logs_types.mli logs_pb.ml logs_pb.mli logs_pp.ml + logs_pp.mli) + (deps + (:file + %{project_root}/vendor/opentelemetry-proto/opentelemetry/proto/logs/v1/logs.proto) + (source_tree %{project_root}/vendor/opentelemetry-proto/)) + (action + (run ocaml-protoc %{file} -I %{project_root}/vendor/opentelemetry-proto/ + -ml_out . -pp -binary))) + +(rule + (alias lint) + (mode promote) + (targets metrics_service_types.ml metrics_service_types.mli + metrics_service_pp.ml metrics_service_pp.mli metrics_service_pb.ml + metrics_service_pb.mli) + (deps + (:file + %{project_root}/vendor/opentelemetry-proto/opentelemetry/proto/collector/metrics/v1/metrics_service.proto) + (source_tree %{project_root}/vendor/opentelemetry-proto/)) + (action + (run ocaml-protoc %{file} -I %{project_root}/vendor/opentelemetry-proto/ + -ml_out . -pp -binary))) + +(rule + (alias lint) + (mode promote) + (targets trace_service_types.ml trace_service_types.mli trace_service_pp.ml + trace_service_pp.mli trace_service_pb.ml trace_service_pb.mli) + (deps + (:file + %{project_root}/vendor/opentelemetry-proto/opentelemetry/proto/collector/trace/v1/trace_service.proto) + (source_tree %{project_root}/vendor/opentelemetry-proto/)) + (action + (run ocaml-protoc %{file} -I %{project_root}/vendor/opentelemetry-proto/ + -ml_out . -pp -binary))) + +(rule + (alias lint) + (mode promote) + (targets logs_service_types.ml logs_service_types.mli logs_service_pp.ml + logs_service_pp.mli logs_service_pb.ml logs_service_pb.mli) + (deps + (:file + %{project_root}/vendor/opentelemetry-proto/opentelemetry/proto/collector/logs/v1/logs_service.proto) + (source_tree %{project_root}/vendor/opentelemetry-proto/)) + (action + (run ocaml-protoc %{file} -I %{project_root}/vendor/opentelemetry-proto/ + -ml_out . -pp -binary))) + diff --git a/src/proto/logs_pb.ml b/src/proto/logs_pb.ml new file mode 100644 index 00000000..2ad391c5 --- /dev/null +++ b/src/proto/logs_pb.ml @@ -0,0 +1,348 @@ +[@@@ocaml.warning "-27-30-39"] + +type log_record_mutable = { + mutable time_unix_nano : int64; + mutable observed_time_unix_nano : int64; + mutable severity_number : Logs_types.severity_number; + mutable severity_text : string; + mutable body : Common_types.any_value option; + mutable attributes : Common_types.key_value list; + mutable dropped_attributes_count : int32; + mutable flags : int32; + mutable trace_id : bytes; + mutable span_id : bytes; +} + +let default_log_record_mutable () : log_record_mutable = { + time_unix_nano = 0L; + observed_time_unix_nano = 0L; + severity_number = Logs_types.default_severity_number (); + severity_text = ""; + body = None; + attributes = []; + dropped_attributes_count = 0l; + flags = 0l; + trace_id = Bytes.create 0; + span_id = Bytes.create 0; +} + +type scope_logs_mutable = { + mutable scope : Common_types.instrumentation_scope option; + mutable log_records : Logs_types.log_record list; + mutable schema_url : string; +} + +let default_scope_logs_mutable () : scope_logs_mutable = { + scope = None; + log_records = []; + schema_url = ""; +} + +type resource_logs_mutable = { + mutable resource : Resource_types.resource option; + mutable scope_logs : Logs_types.scope_logs list; + mutable schema_url : string; +} + +let default_resource_logs_mutable () : resource_logs_mutable = { + resource = None; + scope_logs = []; + schema_url = ""; +} + +type logs_data_mutable = { + mutable resource_logs : Logs_types.resource_logs list; +} + +let default_logs_data_mutable () : logs_data_mutable = { + resource_logs = []; +} + + +let rec decode_severity_number d = + match Pbrt.Decoder.int_as_varint d with + | 0 -> (Logs_types.Severity_number_unspecified:Logs_types.severity_number) + | 1 -> (Logs_types.Severity_number_trace:Logs_types.severity_number) + | 2 -> (Logs_types.Severity_number_trace2:Logs_types.severity_number) + | 3 -> (Logs_types.Severity_number_trace3:Logs_types.severity_number) + | 4 -> (Logs_types.Severity_number_trace4:Logs_types.severity_number) + | 5 -> (Logs_types.Severity_number_debug:Logs_types.severity_number) + | 6 -> (Logs_types.Severity_number_debug2:Logs_types.severity_number) + | 7 -> (Logs_types.Severity_number_debug3:Logs_types.severity_number) + | 8 -> (Logs_types.Severity_number_debug4:Logs_types.severity_number) + | 9 -> (Logs_types.Severity_number_info:Logs_types.severity_number) + | 10 -> (Logs_types.Severity_number_info2:Logs_types.severity_number) + | 11 -> (Logs_types.Severity_number_info3:Logs_types.severity_number) + | 12 -> (Logs_types.Severity_number_info4:Logs_types.severity_number) + | 13 -> (Logs_types.Severity_number_warn:Logs_types.severity_number) + | 14 -> (Logs_types.Severity_number_warn2:Logs_types.severity_number) + | 15 -> (Logs_types.Severity_number_warn3:Logs_types.severity_number) + | 16 -> (Logs_types.Severity_number_warn4:Logs_types.severity_number) + | 17 -> (Logs_types.Severity_number_error:Logs_types.severity_number) + | 18 -> (Logs_types.Severity_number_error2:Logs_types.severity_number) + | 19 -> (Logs_types.Severity_number_error3:Logs_types.severity_number) + | 20 -> (Logs_types.Severity_number_error4:Logs_types.severity_number) + | 21 -> (Logs_types.Severity_number_fatal:Logs_types.severity_number) + | 22 -> (Logs_types.Severity_number_fatal2:Logs_types.severity_number) + | 23 -> (Logs_types.Severity_number_fatal3:Logs_types.severity_number) + | 24 -> (Logs_types.Severity_number_fatal4:Logs_types.severity_number) + | _ -> Pbrt.Decoder.malformed_variant "severity_number" + +let rec decode_log_record d = + let v = default_log_record_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.attributes <- List.rev v.attributes; + ); continue__ := false + | Some (1, Pbrt.Bits64) -> begin + v.time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(log_record), field(1)" pk + | Some (11, Pbrt.Bits64) -> begin + v.observed_time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; + end + | Some (11, pk) -> + Pbrt.Decoder.unexpected_payload "Message(log_record), field(11)" pk + | Some (2, Pbrt.Varint) -> begin + v.severity_number <- decode_severity_number d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(log_record), field(2)" pk + | Some (3, Pbrt.Bytes) -> begin + v.severity_text <- Pbrt.Decoder.string d; + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(log_record), field(3)" pk + | Some (5, Pbrt.Bytes) -> begin + v.body <- Some (Common_pb.decode_any_value (Pbrt.Decoder.nested d)); + end + | Some (5, pk) -> + Pbrt.Decoder.unexpected_payload "Message(log_record), field(5)" pk + | Some (6, Pbrt.Bytes) -> begin + v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; + end + | Some (6, pk) -> + Pbrt.Decoder.unexpected_payload "Message(log_record), field(6)" pk + | Some (7, Pbrt.Varint) -> begin + v.dropped_attributes_count <- Pbrt.Decoder.int32_as_varint d; + end + | Some (7, pk) -> + Pbrt.Decoder.unexpected_payload "Message(log_record), field(7)" pk + | Some (8, Pbrt.Bits32) -> begin + v.flags <- Pbrt.Decoder.int32_as_bits32 d; + end + | Some (8, pk) -> + Pbrt.Decoder.unexpected_payload "Message(log_record), field(8)" pk + | Some (9, Pbrt.Bytes) -> begin + v.trace_id <- Pbrt.Decoder.bytes d; + end + | Some (9, pk) -> + Pbrt.Decoder.unexpected_payload "Message(log_record), field(9)" pk + | Some (10, Pbrt.Bytes) -> begin + v.span_id <- Pbrt.Decoder.bytes d; + end + | Some (10, pk) -> + Pbrt.Decoder.unexpected_payload "Message(log_record), field(10)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Logs_types.time_unix_nano = v.time_unix_nano; + Logs_types.observed_time_unix_nano = v.observed_time_unix_nano; + Logs_types.severity_number = v.severity_number; + Logs_types.severity_text = v.severity_text; + Logs_types.body = v.body; + Logs_types.attributes = v.attributes; + Logs_types.dropped_attributes_count = v.dropped_attributes_count; + Logs_types.flags = v.flags; + Logs_types.trace_id = v.trace_id; + Logs_types.span_id = v.span_id; + } : Logs_types.log_record) + +let rec decode_scope_logs d = + let v = default_scope_logs_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.log_records <- List.rev v.log_records; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.scope <- Some (Common_pb.decode_instrumentation_scope (Pbrt.Decoder.nested d)); + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(scope_logs), field(1)" pk + | Some (2, Pbrt.Bytes) -> begin + v.log_records <- (decode_log_record (Pbrt.Decoder.nested d)) :: v.log_records; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(scope_logs), field(2)" pk + | Some (3, Pbrt.Bytes) -> begin + v.schema_url <- Pbrt.Decoder.string d; + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(scope_logs), field(3)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Logs_types.scope = v.scope; + Logs_types.log_records = v.log_records; + Logs_types.schema_url = v.schema_url; + } : Logs_types.scope_logs) + +let rec decode_resource_logs d = + let v = default_resource_logs_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.scope_logs <- List.rev v.scope_logs; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.resource <- Some (Resource_pb.decode_resource (Pbrt.Decoder.nested d)); + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(resource_logs), field(1)" pk + | Some (2, Pbrt.Bytes) -> begin + v.scope_logs <- (decode_scope_logs (Pbrt.Decoder.nested d)) :: v.scope_logs; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(resource_logs), field(2)" pk + | Some (3, Pbrt.Bytes) -> begin + v.schema_url <- Pbrt.Decoder.string d; + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(resource_logs), field(3)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Logs_types.resource = v.resource; + Logs_types.scope_logs = v.scope_logs; + Logs_types.schema_url = v.schema_url; + } : Logs_types.resource_logs) + +let rec decode_logs_data d = + let v = default_logs_data_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.resource_logs <- List.rev v.resource_logs; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.resource_logs <- (decode_resource_logs (Pbrt.Decoder.nested d)) :: v.resource_logs; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(logs_data), field(1)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Logs_types.resource_logs = v.resource_logs; + } : Logs_types.logs_data) + +let rec decode_log_record_flags d = + match Pbrt.Decoder.int_as_varint d with + | 0 -> (Logs_types.Log_record_flags_do_not_use:Logs_types.log_record_flags) + | 255 -> (Logs_types.Log_record_flags_trace_flags_mask:Logs_types.log_record_flags) + | _ -> Pbrt.Decoder.malformed_variant "log_record_flags" + +let rec encode_severity_number (v:Logs_types.severity_number) encoder = + match v with + | Logs_types.Severity_number_unspecified -> Pbrt.Encoder.int_as_varint (0) encoder + | Logs_types.Severity_number_trace -> Pbrt.Encoder.int_as_varint 1 encoder + | Logs_types.Severity_number_trace2 -> Pbrt.Encoder.int_as_varint 2 encoder + | Logs_types.Severity_number_trace3 -> Pbrt.Encoder.int_as_varint 3 encoder + | Logs_types.Severity_number_trace4 -> Pbrt.Encoder.int_as_varint 4 encoder + | Logs_types.Severity_number_debug -> Pbrt.Encoder.int_as_varint 5 encoder + | Logs_types.Severity_number_debug2 -> Pbrt.Encoder.int_as_varint 6 encoder + | Logs_types.Severity_number_debug3 -> Pbrt.Encoder.int_as_varint 7 encoder + | Logs_types.Severity_number_debug4 -> Pbrt.Encoder.int_as_varint 8 encoder + | Logs_types.Severity_number_info -> Pbrt.Encoder.int_as_varint 9 encoder + | Logs_types.Severity_number_info2 -> Pbrt.Encoder.int_as_varint 10 encoder + | Logs_types.Severity_number_info3 -> Pbrt.Encoder.int_as_varint 11 encoder + | Logs_types.Severity_number_info4 -> Pbrt.Encoder.int_as_varint 12 encoder + | Logs_types.Severity_number_warn -> Pbrt.Encoder.int_as_varint 13 encoder + | Logs_types.Severity_number_warn2 -> Pbrt.Encoder.int_as_varint 14 encoder + | Logs_types.Severity_number_warn3 -> Pbrt.Encoder.int_as_varint 15 encoder + | Logs_types.Severity_number_warn4 -> Pbrt.Encoder.int_as_varint 16 encoder + | Logs_types.Severity_number_error -> Pbrt.Encoder.int_as_varint 17 encoder + | Logs_types.Severity_number_error2 -> Pbrt.Encoder.int_as_varint 18 encoder + | Logs_types.Severity_number_error3 -> Pbrt.Encoder.int_as_varint 19 encoder + | Logs_types.Severity_number_error4 -> Pbrt.Encoder.int_as_varint 20 encoder + | Logs_types.Severity_number_fatal -> Pbrt.Encoder.int_as_varint 21 encoder + | Logs_types.Severity_number_fatal2 -> Pbrt.Encoder.int_as_varint 22 encoder + | Logs_types.Severity_number_fatal3 -> Pbrt.Encoder.int_as_varint 23 encoder + | Logs_types.Severity_number_fatal4 -> Pbrt.Encoder.int_as_varint 24 encoder + +let rec encode_log_record (v:Logs_types.log_record) encoder = + Pbrt.Encoder.key (1, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Logs_types.time_unix_nano encoder; + Pbrt.Encoder.key (11, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Logs_types.observed_time_unix_nano encoder; + Pbrt.Encoder.key (2, Pbrt.Varint) encoder; + encode_severity_number v.Logs_types.severity_number encoder; + Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; + Pbrt.Encoder.string v.Logs_types.severity_text encoder; + begin match v.Logs_types.body with + | Some x -> + Pbrt.Encoder.key (5, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (Common_pb.encode_any_value x) encoder; + | None -> (); + end; + List.iter (fun x -> + Pbrt.Encoder.key (6, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; + ) v.Logs_types.attributes; + Pbrt.Encoder.key (7, Pbrt.Varint) encoder; + Pbrt.Encoder.int32_as_varint v.Logs_types.dropped_attributes_count encoder; + Pbrt.Encoder.key (8, Pbrt.Bits32) encoder; + Pbrt.Encoder.int32_as_bits32 v.Logs_types.flags encoder; + Pbrt.Encoder.key (9, Pbrt.Bytes) encoder; + Pbrt.Encoder.bytes v.Logs_types.trace_id encoder; + Pbrt.Encoder.key (10, Pbrt.Bytes) encoder; + Pbrt.Encoder.bytes v.Logs_types.span_id encoder; + () + +let rec encode_scope_logs (v:Logs_types.scope_logs) encoder = + begin match v.Logs_types.scope with + | Some x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (Common_pb.encode_instrumentation_scope x) encoder; + | None -> (); + end; + List.iter (fun x -> + Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_log_record x) encoder; + ) v.Logs_types.log_records; + Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; + Pbrt.Encoder.string v.Logs_types.schema_url encoder; + () + +let rec encode_resource_logs (v:Logs_types.resource_logs) encoder = + begin match v.Logs_types.resource with + | Some x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (Resource_pb.encode_resource x) encoder; + | None -> (); + end; + List.iter (fun x -> + Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_scope_logs x) encoder; + ) v.Logs_types.scope_logs; + Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; + Pbrt.Encoder.string v.Logs_types.schema_url encoder; + () + +let rec encode_logs_data (v:Logs_types.logs_data) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_resource_logs x) encoder; + ) v.Logs_types.resource_logs; + () + +let rec encode_log_record_flags (v:Logs_types.log_record_flags) encoder = + match v with + | Logs_types.Log_record_flags_do_not_use -> Pbrt.Encoder.int_as_varint (0) encoder + | Logs_types.Log_record_flags_trace_flags_mask -> Pbrt.Encoder.int_as_varint 255 encoder diff --git a/src/proto/logs_pb.mli b/src/proto/logs_pb.mli new file mode 100644 index 00000000..93e6d369 --- /dev/null +++ b/src/proto/logs_pb.mli @@ -0,0 +1,43 @@ +(** logs.proto Binary Encoding *) + + +(** {2 Protobuf Encoding} *) + +val encode_severity_number : Logs_types.severity_number -> Pbrt.Encoder.t -> unit +(** [encode_severity_number v encoder] encodes [v] with the given [encoder] *) + +val encode_log_record : Logs_types.log_record -> Pbrt.Encoder.t -> unit +(** [encode_log_record v encoder] encodes [v] with the given [encoder] *) + +val encode_scope_logs : Logs_types.scope_logs -> Pbrt.Encoder.t -> unit +(** [encode_scope_logs v encoder] encodes [v] with the given [encoder] *) + +val encode_resource_logs : Logs_types.resource_logs -> Pbrt.Encoder.t -> unit +(** [encode_resource_logs v encoder] encodes [v] with the given [encoder] *) + +val encode_logs_data : Logs_types.logs_data -> Pbrt.Encoder.t -> unit +(** [encode_logs_data v encoder] encodes [v] with the given [encoder] *) + +val encode_log_record_flags : Logs_types.log_record_flags -> Pbrt.Encoder.t -> unit +(** [encode_log_record_flags v encoder] encodes [v] with the given [encoder] *) + + +(** {2 Protobuf Decoding} *) + +val decode_severity_number : Pbrt.Decoder.t -> Logs_types.severity_number +(** [decode_severity_number decoder] decodes a [severity_number] value from [decoder] *) + +val decode_log_record : Pbrt.Decoder.t -> Logs_types.log_record +(** [decode_log_record decoder] decodes a [log_record] value from [decoder] *) + +val decode_scope_logs : Pbrt.Decoder.t -> Logs_types.scope_logs +(** [decode_scope_logs decoder] decodes a [scope_logs] value from [decoder] *) + +val decode_resource_logs : Pbrt.Decoder.t -> Logs_types.resource_logs +(** [decode_resource_logs decoder] decodes a [resource_logs] value from [decoder] *) + +val decode_logs_data : Pbrt.Decoder.t -> Logs_types.logs_data +(** [decode_logs_data decoder] decodes a [logs_data] value from [decoder] *) + +val decode_log_record_flags : Pbrt.Decoder.t -> Logs_types.log_record_flags +(** [decode_log_record_flags decoder] decodes a [log_record_flags] value from [decoder] *) diff --git a/src/proto/logs_pp.ml b/src/proto/logs_pp.ml new file mode 100644 index 00000000..408f01d9 --- /dev/null +++ b/src/proto/logs_pp.ml @@ -0,0 +1,71 @@ +[@@@ocaml.warning "-27-30-39"] + +let rec pp_severity_number fmt (v:Logs_types.severity_number) = + match v with + | Logs_types.Severity_number_unspecified -> Format.fprintf fmt "Severity_number_unspecified" + | Logs_types.Severity_number_trace -> Format.fprintf fmt "Severity_number_trace" + | Logs_types.Severity_number_trace2 -> Format.fprintf fmt "Severity_number_trace2" + | Logs_types.Severity_number_trace3 -> Format.fprintf fmt "Severity_number_trace3" + | Logs_types.Severity_number_trace4 -> Format.fprintf fmt "Severity_number_trace4" + | Logs_types.Severity_number_debug -> Format.fprintf fmt "Severity_number_debug" + | Logs_types.Severity_number_debug2 -> Format.fprintf fmt "Severity_number_debug2" + | Logs_types.Severity_number_debug3 -> Format.fprintf fmt "Severity_number_debug3" + | Logs_types.Severity_number_debug4 -> Format.fprintf fmt "Severity_number_debug4" + | Logs_types.Severity_number_info -> Format.fprintf fmt "Severity_number_info" + | Logs_types.Severity_number_info2 -> Format.fprintf fmt "Severity_number_info2" + | Logs_types.Severity_number_info3 -> Format.fprintf fmt "Severity_number_info3" + | Logs_types.Severity_number_info4 -> Format.fprintf fmt "Severity_number_info4" + | Logs_types.Severity_number_warn -> Format.fprintf fmt "Severity_number_warn" + | Logs_types.Severity_number_warn2 -> Format.fprintf fmt "Severity_number_warn2" + | Logs_types.Severity_number_warn3 -> Format.fprintf fmt "Severity_number_warn3" + | Logs_types.Severity_number_warn4 -> Format.fprintf fmt "Severity_number_warn4" + | Logs_types.Severity_number_error -> Format.fprintf fmt "Severity_number_error" + | Logs_types.Severity_number_error2 -> Format.fprintf fmt "Severity_number_error2" + | Logs_types.Severity_number_error3 -> Format.fprintf fmt "Severity_number_error3" + | Logs_types.Severity_number_error4 -> Format.fprintf fmt "Severity_number_error4" + | Logs_types.Severity_number_fatal -> Format.fprintf fmt "Severity_number_fatal" + | Logs_types.Severity_number_fatal2 -> Format.fprintf fmt "Severity_number_fatal2" + | Logs_types.Severity_number_fatal3 -> Format.fprintf fmt "Severity_number_fatal3" + | Logs_types.Severity_number_fatal4 -> Format.fprintf fmt "Severity_number_fatal4" + +let rec pp_log_record fmt (v:Logs_types.log_record) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Logs_types.time_unix_nano; + Pbrt.Pp.pp_record_field ~first:false "observed_time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Logs_types.observed_time_unix_nano; + Pbrt.Pp.pp_record_field ~first:false "severity_number" pp_severity_number fmt v.Logs_types.severity_number; + Pbrt.Pp.pp_record_field ~first:false "severity_text" Pbrt.Pp.pp_string fmt v.Logs_types.severity_text; + Pbrt.Pp.pp_record_field ~first:false "body" (Pbrt.Pp.pp_option Common_pp.pp_any_value) fmt v.Logs_types.body; + Pbrt.Pp.pp_record_field ~first:false "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Logs_types.attributes; + Pbrt.Pp.pp_record_field ~first:false "dropped_attributes_count" Pbrt.Pp.pp_int32 fmt v.Logs_types.dropped_attributes_count; + Pbrt.Pp.pp_record_field ~first:false "flags" Pbrt.Pp.pp_int32 fmt v.Logs_types.flags; + Pbrt.Pp.pp_record_field ~first:false "trace_id" Pbrt.Pp.pp_bytes fmt v.Logs_types.trace_id; + Pbrt.Pp.pp_record_field ~first:false "span_id" Pbrt.Pp.pp_bytes fmt v.Logs_types.span_id; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_scope_logs fmt (v:Logs_types.scope_logs) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "scope" (Pbrt.Pp.pp_option Common_pp.pp_instrumentation_scope) fmt v.Logs_types.scope; + Pbrt.Pp.pp_record_field ~first:false "log_records" (Pbrt.Pp.pp_list pp_log_record) fmt v.Logs_types.log_records; + Pbrt.Pp.pp_record_field ~first:false "schema_url" Pbrt.Pp.pp_string fmt v.Logs_types.schema_url; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_resource_logs fmt (v:Logs_types.resource_logs) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "resource" (Pbrt.Pp.pp_option Resource_pp.pp_resource) fmt v.Logs_types.resource; + Pbrt.Pp.pp_record_field ~first:false "scope_logs" (Pbrt.Pp.pp_list pp_scope_logs) fmt v.Logs_types.scope_logs; + Pbrt.Pp.pp_record_field ~first:false "schema_url" Pbrt.Pp.pp_string fmt v.Logs_types.schema_url; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_logs_data fmt (v:Logs_types.logs_data) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "resource_logs" (Pbrt.Pp.pp_list pp_resource_logs) fmt v.Logs_types.resource_logs; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_log_record_flags fmt (v:Logs_types.log_record_flags) = + match v with + | Logs_types.Log_record_flags_do_not_use -> Format.fprintf fmt "Log_record_flags_do_not_use" + | Logs_types.Log_record_flags_trace_flags_mask -> Format.fprintf fmt "Log_record_flags_trace_flags_mask" diff --git a/src/proto/logs_pp.mli b/src/proto/logs_pp.mli new file mode 100644 index 00000000..ecbc28a2 --- /dev/null +++ b/src/proto/logs_pp.mli @@ -0,0 +1,23 @@ + +(** logs.proto Pretty Printing *) + + +(** {2 Formatters} *) + +val pp_severity_number : Format.formatter -> Logs_types.severity_number -> unit +(** [pp_severity_number v] formats v *) + +val pp_log_record : Format.formatter -> Logs_types.log_record -> unit +(** [pp_log_record v] formats v *) + +val pp_scope_logs : Format.formatter -> Logs_types.scope_logs -> unit +(** [pp_scope_logs v] formats v *) + +val pp_resource_logs : Format.formatter -> Logs_types.resource_logs -> unit +(** [pp_resource_logs v] formats v *) + +val pp_logs_data : Format.formatter -> Logs_types.logs_data -> unit +(** [pp_logs_data v] formats v *) + +val pp_log_record_flags : Format.formatter -> Logs_types.log_record_flags -> unit +(** [pp_log_record_flags v] formats v *) diff --git a/src/proto/logs_service_pb.ml b/src/proto/logs_service_pb.ml new file mode 100644 index 00000000..64fde20f --- /dev/null +++ b/src/proto/logs_service_pb.ml @@ -0,0 +1,112 @@ +[@@@ocaml.warning "-27-30-39"] + +type export_logs_service_request_mutable = { + mutable resource_logs : Logs_types.resource_logs list; +} + +let default_export_logs_service_request_mutable () : export_logs_service_request_mutable = { + resource_logs = []; +} + +type export_logs_partial_success_mutable = { + mutable rejected_log_records : int64; + mutable error_message : string; +} + +let default_export_logs_partial_success_mutable () : export_logs_partial_success_mutable = { + rejected_log_records = 0L; + error_message = ""; +} + +type export_logs_service_response_mutable = { + mutable partial_success : Logs_service_types.export_logs_partial_success option; +} + +let default_export_logs_service_response_mutable () : export_logs_service_response_mutable = { + partial_success = None; +} + + +let rec decode_export_logs_service_request d = + let v = default_export_logs_service_request_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.resource_logs <- List.rev v.resource_logs; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.resource_logs <- (Logs_pb.decode_resource_logs (Pbrt.Decoder.nested d)) :: v.resource_logs; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(export_logs_service_request), field(1)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Logs_service_types.resource_logs = v.resource_logs; + } : Logs_service_types.export_logs_service_request) + +let rec decode_export_logs_partial_success d = + let v = default_export_logs_partial_success_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + ); continue__ := false + | Some (1, Pbrt.Varint) -> begin + v.rejected_log_records <- Pbrt.Decoder.int64_as_varint d; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(export_logs_partial_success), field(1)" pk + | Some (2, Pbrt.Bytes) -> begin + v.error_message <- Pbrt.Decoder.string d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(export_logs_partial_success), field(2)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Logs_service_types.rejected_log_records = v.rejected_log_records; + Logs_service_types.error_message = v.error_message; + } : Logs_service_types.export_logs_partial_success) + +let rec decode_export_logs_service_response d = + let v = default_export_logs_service_response_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.partial_success <- Some (decode_export_logs_partial_success (Pbrt.Decoder.nested d)); + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(export_logs_service_response), field(1)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Logs_service_types.partial_success = v.partial_success; + } : Logs_service_types.export_logs_service_response) + +let rec encode_export_logs_service_request (v:Logs_service_types.export_logs_service_request) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (Logs_pb.encode_resource_logs x) encoder; + ) v.Logs_service_types.resource_logs; + () + +let rec encode_export_logs_partial_success (v:Logs_service_types.export_logs_partial_success) encoder = + Pbrt.Encoder.key (1, Pbrt.Varint) encoder; + Pbrt.Encoder.int64_as_varint v.Logs_service_types.rejected_log_records encoder; + Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; + Pbrt.Encoder.string v.Logs_service_types.error_message encoder; + () + +let rec encode_export_logs_service_response (v:Logs_service_types.export_logs_service_response) encoder = + begin match v.Logs_service_types.partial_success with + | Some x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_export_logs_partial_success x) encoder; + | None -> (); + end; + () diff --git a/src/proto/logs_service_pb.mli b/src/proto/logs_service_pb.mli new file mode 100644 index 00000000..db4d8c89 --- /dev/null +++ b/src/proto/logs_service_pb.mli @@ -0,0 +1,25 @@ +(** logs_service.proto Binary Encoding *) + + +(** {2 Protobuf Encoding} *) + +val encode_export_logs_service_request : Logs_service_types.export_logs_service_request -> Pbrt.Encoder.t -> unit +(** [encode_export_logs_service_request v encoder] encodes [v] with the given [encoder] *) + +val encode_export_logs_partial_success : Logs_service_types.export_logs_partial_success -> Pbrt.Encoder.t -> unit +(** [encode_export_logs_partial_success v encoder] encodes [v] with the given [encoder] *) + +val encode_export_logs_service_response : Logs_service_types.export_logs_service_response -> Pbrt.Encoder.t -> unit +(** [encode_export_logs_service_response v encoder] encodes [v] with the given [encoder] *) + + +(** {2 Protobuf Decoding} *) + +val decode_export_logs_service_request : Pbrt.Decoder.t -> Logs_service_types.export_logs_service_request +(** [decode_export_logs_service_request decoder] decodes a [export_logs_service_request] value from [decoder] *) + +val decode_export_logs_partial_success : Pbrt.Decoder.t -> Logs_service_types.export_logs_partial_success +(** [decode_export_logs_partial_success decoder] decodes a [export_logs_partial_success] value from [decoder] *) + +val decode_export_logs_service_response : Pbrt.Decoder.t -> Logs_service_types.export_logs_service_response +(** [decode_export_logs_service_response decoder] decodes a [export_logs_service_response] value from [decoder] *) diff --git a/src/proto/logs_service_pp.ml b/src/proto/logs_service_pp.ml new file mode 100644 index 00000000..19830e4c --- /dev/null +++ b/src/proto/logs_service_pp.ml @@ -0,0 +1,20 @@ +[@@@ocaml.warning "-27-30-39"] + +let rec pp_export_logs_service_request fmt (v:Logs_service_types.export_logs_service_request) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "resource_logs" (Pbrt.Pp.pp_list Logs_pp.pp_resource_logs) fmt v.Logs_service_types.resource_logs; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_export_logs_partial_success fmt (v:Logs_service_types.export_logs_partial_success) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "rejected_log_records" Pbrt.Pp.pp_int64 fmt v.Logs_service_types.rejected_log_records; + Pbrt.Pp.pp_record_field ~first:false "error_message" Pbrt.Pp.pp_string fmt v.Logs_service_types.error_message; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_export_logs_service_response fmt (v:Logs_service_types.export_logs_service_response) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "partial_success" (Pbrt.Pp.pp_option pp_export_logs_partial_success) fmt v.Logs_service_types.partial_success; + in + Pbrt.Pp.pp_brk pp_i fmt () diff --git a/src/proto/logs_service_pp.mli b/src/proto/logs_service_pp.mli new file mode 100644 index 00000000..31d4613a --- /dev/null +++ b/src/proto/logs_service_pp.mli @@ -0,0 +1,14 @@ + +(** logs_service.proto Pretty Printing *) + + +(** {2 Formatters} *) + +val pp_export_logs_service_request : Format.formatter -> Logs_service_types.export_logs_service_request -> unit +(** [pp_export_logs_service_request v] formats v *) + +val pp_export_logs_partial_success : Format.formatter -> Logs_service_types.export_logs_partial_success -> unit +(** [pp_export_logs_partial_success v] formats v *) + +val pp_export_logs_service_response : Format.formatter -> Logs_service_types.export_logs_service_response -> unit +(** [pp_export_logs_service_response v] formats v *) diff --git a/src/proto/logs_service_types.ml b/src/proto/logs_service_types.ml new file mode 100644 index 00000000..9bf19974 --- /dev/null +++ b/src/proto/logs_service_types.ml @@ -0,0 +1,35 @@ +[@@@ocaml.warning "-27-30-39"] + + +type export_logs_service_request = { + resource_logs : Logs_types.resource_logs list; +} + +type export_logs_partial_success = { + rejected_log_records : int64; + error_message : string; +} + +type export_logs_service_response = { + partial_success : export_logs_partial_success option; +} + +let rec default_export_logs_service_request + ?resource_logs:((resource_logs:Logs_types.resource_logs list) = []) + () : export_logs_service_request = { + resource_logs; +} + +let rec default_export_logs_partial_success + ?rejected_log_records:((rejected_log_records:int64) = 0L) + ?error_message:((error_message:string) = "") + () : export_logs_partial_success = { + rejected_log_records; + error_message; +} + +let rec default_export_logs_service_response + ?partial_success:((partial_success:export_logs_partial_success option) = None) + () : export_logs_service_response = { + partial_success; +} diff --git a/src/proto/logs_service_types.mli b/src/proto/logs_service_types.mli new file mode 100644 index 00000000..beef4fd3 --- /dev/null +++ b/src/proto/logs_service_types.mli @@ -0,0 +1,40 @@ +(** logs_service.proto Types *) + + + +(** {2 Types} *) + +type export_logs_service_request = { + resource_logs : Logs_types.resource_logs list; +} + +type export_logs_partial_success = { + rejected_log_records : int64; + error_message : string; +} + +type export_logs_service_response = { + partial_success : export_logs_partial_success option; +} + + +(** {2 Default values} *) + +val default_export_logs_service_request : + ?resource_logs:Logs_types.resource_logs list -> + unit -> + export_logs_service_request +(** [default_export_logs_service_request ()] is the default value for type [export_logs_service_request] *) + +val default_export_logs_partial_success : + ?rejected_log_records:int64 -> + ?error_message:string -> + unit -> + export_logs_partial_success +(** [default_export_logs_partial_success ()] is the default value for type [export_logs_partial_success] *) + +val default_export_logs_service_response : + ?partial_success:export_logs_partial_success option -> + unit -> + export_logs_service_response +(** [default_export_logs_service_response ()] is the default value for type [export_logs_service_response] *) diff --git a/src/proto/logs_types.ml b/src/proto/logs_types.ml new file mode 100644 index 00000000..4a383ff7 --- /dev/null +++ b/src/proto/logs_types.ml @@ -0,0 +1,116 @@ +[@@@ocaml.warning "-27-30-39"] + + +type severity_number = + | Severity_number_unspecified + | Severity_number_trace + | Severity_number_trace2 + | Severity_number_trace3 + | Severity_number_trace4 + | Severity_number_debug + | Severity_number_debug2 + | Severity_number_debug3 + | Severity_number_debug4 + | Severity_number_info + | Severity_number_info2 + | Severity_number_info3 + | Severity_number_info4 + | Severity_number_warn + | Severity_number_warn2 + | Severity_number_warn3 + | Severity_number_warn4 + | Severity_number_error + | Severity_number_error2 + | Severity_number_error3 + | Severity_number_error4 + | Severity_number_fatal + | Severity_number_fatal2 + | Severity_number_fatal3 + | Severity_number_fatal4 + +type log_record = { + time_unix_nano : int64; + observed_time_unix_nano : int64; + severity_number : severity_number; + severity_text : string; + body : Common_types.any_value option; + attributes : Common_types.key_value list; + dropped_attributes_count : int32; + flags : int32; + trace_id : bytes; + span_id : bytes; +} + +type scope_logs = { + scope : Common_types.instrumentation_scope option; + log_records : log_record list; + schema_url : string; +} + +type resource_logs = { + resource : Resource_types.resource option; + scope_logs : scope_logs list; + schema_url : string; +} + +type logs_data = { + resource_logs : resource_logs list; +} + +type log_record_flags = + | Log_record_flags_do_not_use + | Log_record_flags_trace_flags_mask + +let rec default_severity_number () = (Severity_number_unspecified:severity_number) + +let rec default_log_record + ?time_unix_nano:((time_unix_nano:int64) = 0L) + ?observed_time_unix_nano:((observed_time_unix_nano:int64) = 0L) + ?severity_number:((severity_number:severity_number) = default_severity_number ()) + ?severity_text:((severity_text:string) = "") + ?body:((body:Common_types.any_value option) = None) + ?attributes:((attributes:Common_types.key_value list) = []) + ?dropped_attributes_count:((dropped_attributes_count:int32) = 0l) + ?flags:((flags:int32) = 0l) + ?trace_id:((trace_id:bytes) = Bytes.create 0) + ?span_id:((span_id:bytes) = Bytes.create 0) + () : log_record = { + time_unix_nano; + observed_time_unix_nano; + severity_number; + severity_text; + body; + attributes; + dropped_attributes_count; + flags; + trace_id; + span_id; +} + +let rec default_scope_logs + ?scope:((scope:Common_types.instrumentation_scope option) = None) + ?log_records:((log_records:log_record list) = []) + ?schema_url:((schema_url:string) = "") + () : scope_logs = { + scope; + log_records; + schema_url; +} + +let rec default_resource_logs + ?resource:((resource:Resource_types.resource option) = None) + ?scope_logs:((scope_logs:scope_logs list) = []) + ?schema_url:((schema_url:string) = "") + () : resource_logs = { + resource; + scope_logs; + schema_url; +} + +let rec default_logs_data + ?resource_logs:((resource_logs:resource_logs list) = []) + () : logs_data = { + resource_logs; +} + +let rec default_log_record_flags () = (Log_record_flags_do_not_use:log_record_flags) diff --git a/src/proto/logs_types.mli b/src/proto/logs_types.mli new file mode 100644 index 00000000..7a9cc1a3 --- /dev/null +++ b/src/proto/logs_types.mli @@ -0,0 +1,111 @@ +(** logs.proto Types *) + + + +(** {2 Types} *) + +type severity_number = + | Severity_number_unspecified + | Severity_number_trace + | Severity_number_trace2 + | Severity_number_trace3 + | Severity_number_trace4 + | Severity_number_debug + | Severity_number_debug2 + | Severity_number_debug3 + | Severity_number_debug4 + | Severity_number_info + | Severity_number_info2 + | Severity_number_info3 + | Severity_number_info4 + | Severity_number_warn + | Severity_number_warn2 + | Severity_number_warn3 + | Severity_number_warn4 + | Severity_number_error + | Severity_number_error2 + | Severity_number_error3 + | Severity_number_error4 + | Severity_number_fatal + | Severity_number_fatal2 + | Severity_number_fatal3 + | Severity_number_fatal4 + +type log_record = { + time_unix_nano : int64; + observed_time_unix_nano : int64; + severity_number : severity_number; + severity_text : string; + body : Common_types.any_value option; + attributes : Common_types.key_value list; + dropped_attributes_count : int32; + flags : int32; + trace_id : bytes; + span_id : bytes; +} + +type scope_logs = { + scope : Common_types.instrumentation_scope option; + log_records : log_record list; + schema_url : string; +} + +type resource_logs = { + resource : Resource_types.resource option; + scope_logs : scope_logs list; + schema_url : string; +} + +type logs_data = { + resource_logs : resource_logs list; +} + +type log_record_flags = + | Log_record_flags_do_not_use + | Log_record_flags_trace_flags_mask + + +(** {2 Default values} *) + +val default_severity_number : unit -> severity_number +(** [default_severity_number ()] is the default value for type [severity_number] *) + +val default_log_record : + ?time_unix_nano:int64 -> + ?observed_time_unix_nano:int64 -> + ?severity_number:severity_number -> + ?severity_text:string -> + ?body:Common_types.any_value option -> + ?attributes:Common_types.key_value list -> + ?dropped_attributes_count:int32 -> + ?flags:int32 -> + ?trace_id:bytes -> + ?span_id:bytes -> + unit -> + log_record +(** [default_log_record ()] is the default value for type [log_record] *) + +val default_scope_logs : + ?scope:Common_types.instrumentation_scope option -> + ?log_records:log_record list -> + ?schema_url:string -> + unit -> + scope_logs +(** [default_scope_logs ()] is the default value for type [scope_logs] *) + +val default_resource_logs : + ?resource:Resource_types.resource option -> + ?scope_logs:scope_logs list -> + ?schema_url:string -> + unit -> + resource_logs +(** [default_resource_logs ()] is the default value for type [resource_logs] *) + +val default_logs_data : + ?resource_logs:resource_logs list -> + unit -> + logs_data +(** [default_logs_data ()] is the default value for type [logs_data] *) + +val default_log_record_flags : unit -> log_record_flags +(** [default_log_record_flags ()] is the default value for type [log_record_flags] *) diff --git a/src/proto/metrics_pb.ml b/src/proto/metrics_pb.ml new file mode 100644 index 00000000..0c4ed447 --- /dev/null +++ b/src/proto/metrics_pb.ml @@ -0,0 +1,1282 @@ +[@@@ocaml.warning "-27-30-39"] + +type summary_data_point_value_at_quantile_mutable = { + mutable quantile : float; + mutable value : float; +} + +let default_summary_data_point_value_at_quantile_mutable () : summary_data_point_value_at_quantile_mutable = { + quantile = 0.; + value = 0.; +} + +type summary_data_point_mutable = { + mutable attributes : Common_types.key_value list; + mutable start_time_unix_nano : int64; + mutable time_unix_nano : int64; + mutable count : int64; + mutable sum : float; + mutable quantile_values : Metrics_types.summary_data_point_value_at_quantile list; + mutable flags : int32; +} + +let default_summary_data_point_mutable () : summary_data_point_mutable = { + attributes = []; + start_time_unix_nano = 0L; + time_unix_nano = 0L; + count = 0L; + sum = 0.; + quantile_values = []; + flags = 0l; +} + +type summary_mutable = { + mutable data_points : Metrics_types.summary_data_point list; +} + +let default_summary_mutable () : summary_mutable = { + data_points = []; +} + +type exponential_histogram_data_point_buckets_mutable = { + mutable offset : int32; + mutable bucket_counts : int64 list; +} + +let default_exponential_histogram_data_point_buckets_mutable () : exponential_histogram_data_point_buckets_mutable = { + offset = 0l; + bucket_counts = []; +} + +type exemplar_mutable = { + mutable filtered_attributes : Common_types.key_value list; + mutable time_unix_nano : int64; + mutable value : Metrics_types.exemplar_value; + mutable span_id : bytes; + mutable trace_id : bytes; +} + +let default_exemplar_mutable () : exemplar_mutable = { + filtered_attributes = []; + time_unix_nano = 0L; + value = Metrics_types.As_int (0L); + span_id = Bytes.create 0; + trace_id = Bytes.create 0; +} + +type exponential_histogram_data_point_mutable = { + mutable attributes : Common_types.key_value list; + mutable start_time_unix_nano : int64; + mutable time_unix_nano : int64; + mutable count : int64; + mutable sum : float option; + mutable scale : int32; + mutable zero_count : int64; + mutable positive : Metrics_types.exponential_histogram_data_point_buckets option; + mutable negative : Metrics_types.exponential_histogram_data_point_buckets option; + mutable flags : int32; + mutable exemplars : Metrics_types.exemplar list; + mutable min : float option; + mutable max : float option; + mutable zero_threshold : float; +} + +let default_exponential_histogram_data_point_mutable () : exponential_histogram_data_point_mutable = { + attributes = []; + start_time_unix_nano = 0L; + time_unix_nano = 0L; + count = 0L; + sum = None; + scale = 0l; + zero_count = 0L; + positive = None; + negative = None; + flags = 0l; + exemplars = []; + min = None; + max = None; + zero_threshold = 0.; +} + +type exponential_histogram_mutable = { + mutable data_points : Metrics_types.exponential_histogram_data_point list; + mutable aggregation_temporality : Metrics_types.aggregation_temporality; +} + +let default_exponential_histogram_mutable () : exponential_histogram_mutable = { + data_points = []; + aggregation_temporality = Metrics_types.default_aggregation_temporality (); +} + +type histogram_data_point_mutable = { + mutable attributes : Common_types.key_value list; + mutable start_time_unix_nano : int64; + mutable time_unix_nano : int64; + mutable count : int64; + mutable sum : float option; + mutable bucket_counts : int64 list; + mutable explicit_bounds : float list; + mutable exemplars : Metrics_types.exemplar list; + mutable flags : int32; + mutable min : float option; + mutable max : float option; +} + +let default_histogram_data_point_mutable () : histogram_data_point_mutable = { + attributes = []; + start_time_unix_nano = 0L; + time_unix_nano = 0L; + count = 0L; + sum = None; + bucket_counts = []; + explicit_bounds = []; + exemplars = []; + flags = 0l; + min = None; + max = None; +} + +type histogram_mutable = { + mutable data_points : Metrics_types.histogram_data_point list; + mutable aggregation_temporality : Metrics_types.aggregation_temporality; +} + +let default_histogram_mutable () : histogram_mutable = { + data_points = []; + aggregation_temporality = Metrics_types.default_aggregation_temporality (); +} + +type number_data_point_mutable = { + mutable attributes : Common_types.key_value list; + mutable start_time_unix_nano : int64; + mutable time_unix_nano : int64; + mutable value : Metrics_types.number_data_point_value; + mutable exemplars : Metrics_types.exemplar list; + mutable flags : int32; +} + +let default_number_data_point_mutable () : number_data_point_mutable = { + attributes = []; + start_time_unix_nano = 0L; + time_unix_nano = 0L; + value = Metrics_types.As_int (0L); + exemplars = []; + flags = 0l; +} + +type sum_mutable = { + mutable data_points : Metrics_types.number_data_point list; + mutable aggregation_temporality : Metrics_types.aggregation_temporality; + mutable is_monotonic : bool; +} + +let default_sum_mutable () : sum_mutable = { + data_points = []; + aggregation_temporality = Metrics_types.default_aggregation_temporality (); + is_monotonic = false; +} + +type gauge_mutable = { + mutable data_points : Metrics_types.number_data_point list; +} + +let default_gauge_mutable () : gauge_mutable = { + data_points = []; +} + +type metric_mutable = { + mutable name : string; + mutable description : string; + mutable unit_ : string; + mutable data : Metrics_types.metric_data; +} + +let default_metric_mutable () : metric_mutable = { + name = ""; + description = ""; + unit_ = ""; + data = Metrics_types.Summary (Metrics_types.default_summary ()); +} + +type scope_metrics_mutable = { + mutable scope : Common_types.instrumentation_scope option; + mutable metrics : Metrics_types.metric list; + mutable schema_url : string; +} + +let default_scope_metrics_mutable () : scope_metrics_mutable = { + scope = None; + metrics = []; + schema_url = ""; +} + +type resource_metrics_mutable = { + mutable resource : Resource_types.resource option; + mutable scope_metrics : Metrics_types.scope_metrics list; + mutable schema_url : string; +} + +let default_resource_metrics_mutable () : resource_metrics_mutable = { + resource = None; + scope_metrics = []; + schema_url = ""; +} + +type metrics_data_mutable = { + mutable resource_metrics : Metrics_types.resource_metrics list; +} + +let default_metrics_data_mutable () : metrics_data_mutable = { + resource_metrics = []; +} + + +let rec decode_summary_data_point_value_at_quantile d = + let v = default_summary_data_point_value_at_quantile_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + ); continue__ := false + | Some (1, Pbrt.Bits64) -> begin + v.quantile <- Pbrt.Decoder.float_as_bits64 d; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(summary_data_point_value_at_quantile), field(1)" pk + | Some (2, Pbrt.Bits64) -> begin + v.value <- Pbrt.Decoder.float_as_bits64 d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(summary_data_point_value_at_quantile), field(2)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Metrics_types.quantile = v.quantile; + Metrics_types.value = v.value; + } : Metrics_types.summary_data_point_value_at_quantile) + +let rec decode_summary_data_point d = + let v = default_summary_data_point_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.quantile_values <- List.rev v.quantile_values; + v.attributes <- List.rev v.attributes; + ); continue__ := false + | Some (7, Pbrt.Bytes) -> begin + v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; + end + | Some (7, pk) -> + Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(7)" pk + | Some (2, Pbrt.Bits64) -> begin + v.start_time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(2)" pk + | Some (3, Pbrt.Bits64) -> begin + v.time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(3)" pk + | Some (4, Pbrt.Bits64) -> begin + v.count <- Pbrt.Decoder.int64_as_bits64 d; + end + | Some (4, pk) -> + Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(4)" pk + | Some (5, Pbrt.Bits64) -> begin + v.sum <- Pbrt.Decoder.float_as_bits64 d; + end + | Some (5, pk) -> + Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(5)" pk + | Some (6, Pbrt.Bytes) -> begin + v.quantile_values <- (decode_summary_data_point_value_at_quantile (Pbrt.Decoder.nested d)) :: v.quantile_values; + end + | Some (6, pk) -> + Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(6)" pk + | Some (8, Pbrt.Varint) -> begin + v.flags <- Pbrt.Decoder.int32_as_varint d; + end + | Some (8, pk) -> + Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(8)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Metrics_types.attributes = v.attributes; + Metrics_types.start_time_unix_nano = v.start_time_unix_nano; + Metrics_types.time_unix_nano = v.time_unix_nano; + Metrics_types.count = v.count; + Metrics_types.sum = v.sum; + Metrics_types.quantile_values = v.quantile_values; + Metrics_types.flags = v.flags; + } : Metrics_types.summary_data_point) + +let rec decode_summary d = + let v = default_summary_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.data_points <- List.rev v.data_points; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.data_points <- (decode_summary_data_point (Pbrt.Decoder.nested d)) :: v.data_points; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(summary), field(1)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Metrics_types.data_points = v.data_points; + } : Metrics_types.summary) + +let rec decode_exponential_histogram_data_point_buckets d = + let v = default_exponential_histogram_data_point_buckets_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.bucket_counts <- List.rev v.bucket_counts; + ); continue__ := false + | Some (1, Pbrt.Varint) -> begin + v.offset <- Pbrt.Decoder.int32_as_zigzag d; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point_buckets), field(1)" pk + | Some (2, Pbrt.Bytes) -> begin + v.bucket_counts <- Pbrt.Decoder.packed_fold (fun l d -> (Pbrt.Decoder.int64_as_varint d)::l) [] d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point_buckets), field(2)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Metrics_types.offset = v.offset; + Metrics_types.bucket_counts = v.bucket_counts; + } : Metrics_types.exponential_histogram_data_point_buckets) + +let rec decode_exemplar_value d = + let rec loop () = + let ret:Metrics_types.exemplar_value = match Pbrt.Decoder.key d with + | None -> Pbrt.Decoder.malformed_variant "exemplar_value" + | Some (6, _) -> (Metrics_types.As_int (Pbrt.Decoder.int64_as_bits64 d) : Metrics_types.exemplar_value) + | Some (3, _) -> (Metrics_types.As_double (Pbrt.Decoder.float_as_bits64 d) : Metrics_types.exemplar_value) + | Some (n, payload_kind) -> ( + Pbrt.Decoder.skip d payload_kind; + loop () + ) + in + ret + in + loop () + +and decode_exemplar d = + let v = default_exemplar_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.filtered_attributes <- List.rev v.filtered_attributes; + ); continue__ := false + | Some (7, Pbrt.Bytes) -> begin + v.filtered_attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.filtered_attributes; + end + | Some (7, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exemplar), field(7)" pk + | Some (2, Pbrt.Bits64) -> begin + v.time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exemplar), field(2)" pk + | Some (6, Pbrt.Bits64) -> begin + v.value <- Metrics_types.As_int (Pbrt.Decoder.int64_as_bits64 d); + end + | Some (6, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exemplar), field(6)" pk + | Some (3, Pbrt.Bits64) -> begin + v.value <- Metrics_types.As_double (Pbrt.Decoder.float_as_bits64 d); + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exemplar), field(3)" pk + | Some (4, Pbrt.Bytes) -> begin + v.span_id <- Pbrt.Decoder.bytes d; + end + | Some (4, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exemplar), field(4)" pk + | Some (5, Pbrt.Bytes) -> begin + v.trace_id <- Pbrt.Decoder.bytes d; + end + | Some (5, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exemplar), field(5)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Metrics_types.filtered_attributes = v.filtered_attributes; + Metrics_types.time_unix_nano = v.time_unix_nano; + Metrics_types.value = v.value; + Metrics_types.span_id = v.span_id; + Metrics_types.trace_id = v.trace_id; + } : Metrics_types.exemplar) + +let rec decode_exponential_histogram_data_point d = + let v = default_exponential_histogram_data_point_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.exemplars <- List.rev v.exemplars; + v.attributes <- List.rev v.attributes; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(1)" pk + | Some (2, Pbrt.Bits64) -> begin + v.start_time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(2)" pk + | Some (3, Pbrt.Bits64) -> begin + v.time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(3)" pk + | Some (4, Pbrt.Bits64) -> begin + v.count <- Pbrt.Decoder.int64_as_bits64 d; + end + | Some (4, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(4)" pk + | Some (5, Pbrt.Bits64) -> begin + v.sum <- Some (Pbrt.Decoder.float_as_bits64 d); + end + | Some (5, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(5)" pk + | Some (6, Pbrt.Varint) -> begin + v.scale <- Pbrt.Decoder.int32_as_zigzag d; + end + | Some (6, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(6)" pk + | Some (7, Pbrt.Bits64) -> begin + v.zero_count <- Pbrt.Decoder.int64_as_bits64 d; + end + | Some (7, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(7)" pk + | Some (8, Pbrt.Bytes) -> begin + v.positive <- Some (decode_exponential_histogram_data_point_buckets (Pbrt.Decoder.nested d)); + end + | Some (8, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(8)" pk + | Some (9, Pbrt.Bytes) -> begin + v.negative <- Some (decode_exponential_histogram_data_point_buckets (Pbrt.Decoder.nested d)); + end + | Some (9, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(9)" pk + | Some (10, Pbrt.Varint) -> begin + v.flags <- Pbrt.Decoder.int32_as_varint d; + end + | Some (10, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(10)" pk + | Some (11, Pbrt.Bytes) -> begin + v.exemplars <- (decode_exemplar (Pbrt.Decoder.nested d)) :: v.exemplars; + end + | Some (11, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(11)" pk + | Some (12, Pbrt.Bits64) -> begin + v.min <- Some (Pbrt.Decoder.float_as_bits64 d); + end + | Some (12, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(12)" pk + | Some (13, Pbrt.Bits64) -> begin + v.max <- Some (Pbrt.Decoder.float_as_bits64 d); + end + | Some (13, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(13)" pk + | Some (14, Pbrt.Bits64) -> begin + v.zero_threshold <- Pbrt.Decoder.float_as_bits64 d; + end + | Some (14, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point), field(14)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Metrics_types.attributes = v.attributes; + Metrics_types.start_time_unix_nano = v.start_time_unix_nano; + Metrics_types.time_unix_nano = v.time_unix_nano; + Metrics_types.count = v.count; + Metrics_types.sum = v.sum; + Metrics_types.scale = v.scale; + Metrics_types.zero_count = v.zero_count; + Metrics_types.positive = v.positive; + Metrics_types.negative = v.negative; + Metrics_types.flags = v.flags; + Metrics_types.exemplars = v.exemplars; + Metrics_types.min = v.min; + Metrics_types.max = v.max; + Metrics_types.zero_threshold = v.zero_threshold; + } : Metrics_types.exponential_histogram_data_point) + +let rec decode_aggregation_temporality d = + match Pbrt.Decoder.int_as_varint d with + | 0 -> (Metrics_types.Aggregation_temporality_unspecified:Metrics_types.aggregation_temporality) + | 1 -> (Metrics_types.Aggregation_temporality_delta:Metrics_types.aggregation_temporality) + | 2 -> (Metrics_types.Aggregation_temporality_cumulative:Metrics_types.aggregation_temporality) + | _ -> Pbrt.Decoder.malformed_variant "aggregation_temporality" + +let rec decode_exponential_histogram d = + let v = default_exponential_histogram_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.data_points <- List.rev v.data_points; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.data_points <- (decode_exponential_histogram_data_point (Pbrt.Decoder.nested d)) :: v.data_points; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exponential_histogram), field(1)" pk + | Some (2, Pbrt.Varint) -> begin + v.aggregation_temporality <- decode_aggregation_temporality d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exponential_histogram), field(2)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Metrics_types.data_points = v.data_points; + Metrics_types.aggregation_temporality = v.aggregation_temporality; + } : Metrics_types.exponential_histogram) + +let rec decode_histogram_data_point d = + let v = default_histogram_data_point_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.exemplars <- List.rev v.exemplars; + v.explicit_bounds <- List.rev v.explicit_bounds; + v.bucket_counts <- List.rev v.bucket_counts; + v.attributes <- List.rev v.attributes; + ); continue__ := false + | Some (9, Pbrt.Bytes) -> begin + v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; + end + | Some (9, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(9)" pk + | Some (2, Pbrt.Bits64) -> begin + v.start_time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(2)" pk + | Some (3, Pbrt.Bits64) -> begin + v.time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(3)" pk + | Some (4, Pbrt.Bits64) -> begin + v.count <- Pbrt.Decoder.int64_as_bits64 d; + end + | Some (4, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(4)" pk + | Some (5, Pbrt.Bits64) -> begin + v.sum <- Some (Pbrt.Decoder.float_as_bits64 d); + end + | Some (5, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(5)" pk + | Some (6, Pbrt.Bytes) -> begin + v.bucket_counts <- Pbrt.Decoder.packed_fold (fun l d -> (Pbrt.Decoder.int64_as_bits64 d)::l) [] d; + end + | Some (6, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(6)" pk + | Some (7, Pbrt.Bytes) -> begin + v.explicit_bounds <- Pbrt.Decoder.packed_fold (fun l d -> (Pbrt.Decoder.float_as_bits64 d)::l) [] d; + end + | Some (7, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(7)" pk + | Some (8, Pbrt.Bytes) -> begin + v.exemplars <- (decode_exemplar (Pbrt.Decoder.nested d)) :: v.exemplars; + end + | Some (8, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(8)" pk + | Some (10, Pbrt.Varint) -> begin + v.flags <- Pbrt.Decoder.int32_as_varint d; + end + | Some (10, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(10)" pk + | Some (11, Pbrt.Bits64) -> begin + v.min <- Some (Pbrt.Decoder.float_as_bits64 d); + end + | Some (11, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(11)" pk + | Some (12, Pbrt.Bits64) -> begin + v.max <- Some (Pbrt.Decoder.float_as_bits64 d); + end + | Some (12, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(12)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Metrics_types.attributes = v.attributes; + Metrics_types.start_time_unix_nano = v.start_time_unix_nano; + Metrics_types.time_unix_nano = v.time_unix_nano; + Metrics_types.count = v.count; + Metrics_types.sum = v.sum; + Metrics_types.bucket_counts = v.bucket_counts; + Metrics_types.explicit_bounds = v.explicit_bounds; + Metrics_types.exemplars = v.exemplars; + Metrics_types.flags = v.flags; + Metrics_types.min = v.min; + Metrics_types.max = v.max; + } : Metrics_types.histogram_data_point) + +let rec decode_histogram d = + let v = default_histogram_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.data_points <- List.rev v.data_points; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.data_points <- (decode_histogram_data_point (Pbrt.Decoder.nested d)) :: v.data_points; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram), field(1)" pk + | Some (2, Pbrt.Varint) -> begin + v.aggregation_temporality <- decode_aggregation_temporality d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram), field(2)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Metrics_types.data_points = v.data_points; + Metrics_types.aggregation_temporality = v.aggregation_temporality; + } : Metrics_types.histogram) + +let rec decode_number_data_point_value d = + let rec loop () = + let ret:Metrics_types.number_data_point_value = match Pbrt.Decoder.key d with + | None -> Pbrt.Decoder.malformed_variant "number_data_point_value" + | Some (6, _) -> (Metrics_types.As_int (Pbrt.Decoder.int64_as_bits64 d) : Metrics_types.number_data_point_value) + | Some (4, _) -> (Metrics_types.As_double (Pbrt.Decoder.float_as_bits64 d) : Metrics_types.number_data_point_value) + | Some (n, payload_kind) -> ( + Pbrt.Decoder.skip d payload_kind; + loop () + ) + in + ret + in + loop () + +and decode_number_data_point d = + let v = default_number_data_point_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.exemplars <- List.rev v.exemplars; + v.attributes <- List.rev v.attributes; + ); continue__ := false + | Some (7, Pbrt.Bytes) -> begin + v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; + end + | Some (7, pk) -> + Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(7)" pk + | Some (2, Pbrt.Bits64) -> begin + v.start_time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(2)" pk + | Some (3, Pbrt.Bits64) -> begin + v.time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(3)" pk + | Some (6, Pbrt.Bits64) -> begin + v.value <- Metrics_types.As_int (Pbrt.Decoder.int64_as_bits64 d); + end + | Some (6, pk) -> + Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(6)" pk + | Some (4, Pbrt.Bits64) -> begin + v.value <- Metrics_types.As_double (Pbrt.Decoder.float_as_bits64 d); + end + | Some (4, pk) -> + Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(4)" pk + | Some (5, Pbrt.Bytes) -> begin + v.exemplars <- (decode_exemplar (Pbrt.Decoder.nested d)) :: v.exemplars; + end + | Some (5, pk) -> + Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(5)" pk + | Some (8, Pbrt.Varint) -> begin + v.flags <- Pbrt.Decoder.int32_as_varint d; + end + | Some (8, pk) -> + Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(8)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Metrics_types.attributes = v.attributes; + Metrics_types.start_time_unix_nano = v.start_time_unix_nano; + Metrics_types.time_unix_nano = v.time_unix_nano; + Metrics_types.value = v.value; + Metrics_types.exemplars = v.exemplars; + Metrics_types.flags = v.flags; + } : Metrics_types.number_data_point) + +let rec decode_sum d = + let v = default_sum_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.data_points <- List.rev v.data_points; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.data_points <- (decode_number_data_point (Pbrt.Decoder.nested d)) :: v.data_points; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(sum), field(1)" pk + | Some (2, Pbrt.Varint) -> begin + v.aggregation_temporality <- decode_aggregation_temporality d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(sum), field(2)" pk + | Some (3, Pbrt.Varint) -> begin + v.is_monotonic <- Pbrt.Decoder.bool d; + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(sum), field(3)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Metrics_types.data_points = v.data_points; + Metrics_types.aggregation_temporality = v.aggregation_temporality; + Metrics_types.is_monotonic = v.is_monotonic; + } : Metrics_types.sum) + +let rec decode_gauge d = + let v = default_gauge_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.data_points <- List.rev v.data_points; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.data_points <- (decode_number_data_point (Pbrt.Decoder.nested d)) :: v.data_points; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(gauge), field(1)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Metrics_types.data_points = v.data_points; + } : Metrics_types.gauge) + +let rec decode_metric_data d = + let rec loop () = + let ret:Metrics_types.metric_data = match Pbrt.Decoder.key d with + | None -> Pbrt.Decoder.malformed_variant "metric_data" + | Some (11, _) -> (Metrics_types.Summary (decode_summary (Pbrt.Decoder.nested d)) : Metrics_types.metric_data) + | Some (10, _) -> (Metrics_types.Exponential_histogram (decode_exponential_histogram (Pbrt.Decoder.nested d)) : Metrics_types.metric_data) + | Some (9, _) -> (Metrics_types.Histogram (decode_histogram (Pbrt.Decoder.nested d)) : Metrics_types.metric_data) + | Some (7, _) -> (Metrics_types.Sum (decode_sum (Pbrt.Decoder.nested d)) : Metrics_types.metric_data) + | Some (5, _) -> (Metrics_types.Gauge (decode_gauge (Pbrt.Decoder.nested d)) : Metrics_types.metric_data) + | Some (n, payload_kind) -> ( + Pbrt.Decoder.skip d payload_kind; + loop () + ) + in + ret + in + loop () + +and decode_metric d = + let v = default_metric_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.name <- Pbrt.Decoder.string d; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(metric), field(1)" pk + | Some (2, Pbrt.Bytes) -> begin + v.description <- Pbrt.Decoder.string d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(metric), field(2)" pk + | Some (3, Pbrt.Bytes) -> begin + v.unit_ <- Pbrt.Decoder.string d; + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(metric), field(3)" pk + | Some (11, Pbrt.Bytes) -> begin + v.data <- Metrics_types.Summary (decode_summary (Pbrt.Decoder.nested d)); + end + | Some (11, pk) -> + Pbrt.Decoder.unexpected_payload "Message(metric), field(11)" pk + | Some (10, Pbrt.Bytes) -> begin + v.data <- Metrics_types.Exponential_histogram (decode_exponential_histogram (Pbrt.Decoder.nested d)); + end + | Some (10, pk) -> + Pbrt.Decoder.unexpected_payload "Message(metric), field(10)" pk + | Some (9, Pbrt.Bytes) -> begin + v.data <- Metrics_types.Histogram (decode_histogram (Pbrt.Decoder.nested d)); + end + | Some (9, pk) -> + Pbrt.Decoder.unexpected_payload "Message(metric), field(9)" pk + | Some (7, Pbrt.Bytes) -> begin + v.data <- Metrics_types.Sum (decode_sum (Pbrt.Decoder.nested d)); + end + | Some (7, pk) -> + Pbrt.Decoder.unexpected_payload "Message(metric), field(7)" pk + | Some (5, Pbrt.Bytes) -> begin + v.data <- Metrics_types.Gauge (decode_gauge (Pbrt.Decoder.nested d)); + end + | Some (5, pk) -> + Pbrt.Decoder.unexpected_payload "Message(metric), field(5)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Metrics_types.name = v.name; + Metrics_types.description = v.description; + Metrics_types.unit_ = v.unit_; + Metrics_types.data = v.data; + } : Metrics_types.metric) + +let rec decode_scope_metrics d = + let v = default_scope_metrics_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.metrics <- List.rev v.metrics; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.scope <- Some (Common_pb.decode_instrumentation_scope (Pbrt.Decoder.nested d)); + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(scope_metrics), field(1)" pk + | Some (2, Pbrt.Bytes) -> begin + v.metrics <- (decode_metric (Pbrt.Decoder.nested d)) :: v.metrics; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(scope_metrics), field(2)" pk + | Some (3, Pbrt.Bytes) -> begin + v.schema_url <- Pbrt.Decoder.string d; + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(scope_metrics), field(3)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Metrics_types.scope = v.scope; + Metrics_types.metrics = v.metrics; + Metrics_types.schema_url = v.schema_url; + } : Metrics_types.scope_metrics) + +let rec decode_resource_metrics d = + let v = default_resource_metrics_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.scope_metrics <- List.rev v.scope_metrics; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.resource <- Some (Resource_pb.decode_resource (Pbrt.Decoder.nested d)); + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(resource_metrics), field(1)" pk + | Some (2, Pbrt.Bytes) -> begin + v.scope_metrics <- (decode_scope_metrics (Pbrt.Decoder.nested d)) :: v.scope_metrics; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(resource_metrics), field(2)" pk + | Some (3, Pbrt.Bytes) -> begin + v.schema_url <- Pbrt.Decoder.string d; + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(resource_metrics), field(3)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Metrics_types.resource = v.resource; + Metrics_types.scope_metrics = v.scope_metrics; + Metrics_types.schema_url = v.schema_url; + } : Metrics_types.resource_metrics) + +let rec decode_metrics_data d = + let v = default_metrics_data_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.resource_metrics <- List.rev v.resource_metrics; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.resource_metrics <- (decode_resource_metrics (Pbrt.Decoder.nested d)) :: v.resource_metrics; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(metrics_data), field(1)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Metrics_types.resource_metrics = v.resource_metrics; + } : Metrics_types.metrics_data) + +let rec decode_data_point_flags d = + match Pbrt.Decoder.int_as_varint d with + | 0 -> (Metrics_types.Data_point_flags_do_not_use:Metrics_types.data_point_flags) + | 1 -> (Metrics_types.Data_point_flags_no_recorded_value_mask:Metrics_types.data_point_flags) + | _ -> Pbrt.Decoder.malformed_variant "data_point_flags" + +let rec encode_summary_data_point_value_at_quantile (v:Metrics_types.summary_data_point_value_at_quantile) encoder = + Pbrt.Encoder.key (1, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 v.Metrics_types.quantile encoder; + Pbrt.Encoder.key (2, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 v.Metrics_types.value encoder; + () + +let rec encode_summary_data_point (v:Metrics_types.summary_data_point) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; + ) v.Metrics_types.attributes; + Pbrt.Encoder.key (2, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Metrics_types.start_time_unix_nano encoder; + Pbrt.Encoder.key (3, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Metrics_types.time_unix_nano encoder; + Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Metrics_types.count encoder; + Pbrt.Encoder.key (5, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 v.Metrics_types.sum encoder; + List.iter (fun x -> + Pbrt.Encoder.key (6, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_summary_data_point_value_at_quantile x) encoder; + ) v.Metrics_types.quantile_values; + Pbrt.Encoder.key (8, Pbrt.Varint) encoder; + Pbrt.Encoder.int32_as_varint v.Metrics_types.flags encoder; + () + +let rec encode_summary (v:Metrics_types.summary) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_summary_data_point x) encoder; + ) v.Metrics_types.data_points; + () + +let rec encode_exponential_histogram_data_point_buckets (v:Metrics_types.exponential_histogram_data_point_buckets) encoder = + Pbrt.Encoder.key (1, Pbrt.Varint) encoder; + Pbrt.Encoder.int32_as_zigzag v.Metrics_types.offset encoder; + Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (fun encoder -> + List.iter (fun x -> + Pbrt.Encoder.int64_as_varint x encoder; + ) v.Metrics_types.bucket_counts; + ) encoder; + () + +let rec encode_exemplar_value (v:Metrics_types.exemplar_value) encoder = + begin match v with + | Metrics_types.As_int x -> + Pbrt.Encoder.key (6, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 x encoder; + | Metrics_types.As_double x -> + Pbrt.Encoder.key (3, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 x encoder; + end + +and encode_exemplar (v:Metrics_types.exemplar) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; + ) v.Metrics_types.filtered_attributes; + Pbrt.Encoder.key (2, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Metrics_types.time_unix_nano encoder; + begin match v.Metrics_types.value with + | Metrics_types.As_int x -> + Pbrt.Encoder.key (6, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 x encoder; + | Metrics_types.As_double x -> + Pbrt.Encoder.key (3, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 x encoder; + end; + Pbrt.Encoder.key (4, Pbrt.Bytes) encoder; + Pbrt.Encoder.bytes v.Metrics_types.span_id encoder; + Pbrt.Encoder.key (5, Pbrt.Bytes) encoder; + Pbrt.Encoder.bytes v.Metrics_types.trace_id encoder; + () + +let rec encode_exponential_histogram_data_point (v:Metrics_types.exponential_histogram_data_point) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; + ) v.Metrics_types.attributes; + Pbrt.Encoder.key (2, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Metrics_types.start_time_unix_nano encoder; + Pbrt.Encoder.key (3, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Metrics_types.time_unix_nano encoder; + Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Metrics_types.count encoder; + begin match v.Metrics_types.sum with + | Some x -> + Pbrt.Encoder.key (5, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 x encoder; + | None -> (); + end; + Pbrt.Encoder.key (6, Pbrt.Varint) encoder; + Pbrt.Encoder.int32_as_zigzag v.Metrics_types.scale encoder; + Pbrt.Encoder.key (7, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Metrics_types.zero_count encoder; + begin match v.Metrics_types.positive with + | Some x -> + Pbrt.Encoder.key (8, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_exponential_histogram_data_point_buckets x) encoder; + | None -> (); + end; + begin match v.Metrics_types.negative with + | Some x -> + Pbrt.Encoder.key (9, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_exponential_histogram_data_point_buckets x) encoder; + | None -> (); + end; + Pbrt.Encoder.key (10, Pbrt.Varint) encoder; + Pbrt.Encoder.int32_as_varint v.Metrics_types.flags encoder; + List.iter (fun x -> + Pbrt.Encoder.key (11, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_exemplar x) encoder; + ) v.Metrics_types.exemplars; + begin match v.Metrics_types.min with + | Some x -> + Pbrt.Encoder.key (12, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 x encoder; + | None -> (); + end; + begin match v.Metrics_types.max with + | Some x -> + Pbrt.Encoder.key (13, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 x encoder; + | None -> (); + end; + Pbrt.Encoder.key (14, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 v.Metrics_types.zero_threshold encoder; + () + +let rec encode_aggregation_temporality (v:Metrics_types.aggregation_temporality) encoder = + match v with + | Metrics_types.Aggregation_temporality_unspecified -> Pbrt.Encoder.int_as_varint (0) encoder + | Metrics_types.Aggregation_temporality_delta -> Pbrt.Encoder.int_as_varint 1 encoder + | Metrics_types.Aggregation_temporality_cumulative -> Pbrt.Encoder.int_as_varint 2 encoder + +let rec encode_exponential_histogram (v:Metrics_types.exponential_histogram) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_exponential_histogram_data_point x) encoder; + ) v.Metrics_types.data_points; + Pbrt.Encoder.key (2, Pbrt.Varint) encoder; + encode_aggregation_temporality v.Metrics_types.aggregation_temporality encoder; + () + +let rec encode_histogram_data_point (v:Metrics_types.histogram_data_point) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (9, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; + ) v.Metrics_types.attributes; + Pbrt.Encoder.key (2, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Metrics_types.start_time_unix_nano encoder; + Pbrt.Encoder.key (3, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Metrics_types.time_unix_nano encoder; + Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Metrics_types.count encoder; + begin match v.Metrics_types.sum with + | Some x -> + Pbrt.Encoder.key (5, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 x encoder; + | None -> (); + end; + Pbrt.Encoder.key (6, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (fun encoder -> + List.iter (fun x -> + Pbrt.Encoder.int64_as_bits64 x encoder; + ) v.Metrics_types.bucket_counts; + ) encoder; + Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (fun encoder -> + List.iter (fun x -> + Pbrt.Encoder.float_as_bits64 x encoder; + ) v.Metrics_types.explicit_bounds; + ) encoder; + List.iter (fun x -> + Pbrt.Encoder.key (8, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_exemplar x) encoder; + ) v.Metrics_types.exemplars; + Pbrt.Encoder.key (10, Pbrt.Varint) encoder; + Pbrt.Encoder.int32_as_varint v.Metrics_types.flags encoder; + begin match v.Metrics_types.min with + | Some x -> + Pbrt.Encoder.key (11, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 x encoder; + | None -> (); + end; + begin match v.Metrics_types.max with + | Some x -> + Pbrt.Encoder.key (12, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 x encoder; + | None -> (); + end; + () + +let rec encode_histogram (v:Metrics_types.histogram) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_histogram_data_point x) encoder; + ) v.Metrics_types.data_points; + Pbrt.Encoder.key (2, Pbrt.Varint) encoder; + encode_aggregation_temporality v.Metrics_types.aggregation_temporality encoder; + () + +let rec encode_number_data_point_value (v:Metrics_types.number_data_point_value) encoder = + begin match v with + | Metrics_types.As_int x -> + Pbrt.Encoder.key (6, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 x encoder; + | Metrics_types.As_double x -> + Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 x encoder; + end + +and encode_number_data_point (v:Metrics_types.number_data_point) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; + ) v.Metrics_types.attributes; + Pbrt.Encoder.key (2, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Metrics_types.start_time_unix_nano encoder; + Pbrt.Encoder.key (3, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Metrics_types.time_unix_nano encoder; + begin match v.Metrics_types.value with + | Metrics_types.As_int x -> + Pbrt.Encoder.key (6, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 x encoder; + | Metrics_types.As_double x -> + Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 x encoder; + end; + List.iter (fun x -> + Pbrt.Encoder.key (5, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_exemplar x) encoder; + ) v.Metrics_types.exemplars; + Pbrt.Encoder.key (8, Pbrt.Varint) encoder; + Pbrt.Encoder.int32_as_varint v.Metrics_types.flags encoder; + () + +let rec encode_sum (v:Metrics_types.sum) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_number_data_point x) encoder; + ) v.Metrics_types.data_points; + Pbrt.Encoder.key (2, Pbrt.Varint) encoder; + encode_aggregation_temporality v.Metrics_types.aggregation_temporality encoder; + Pbrt.Encoder.key (3, Pbrt.Varint) encoder; + Pbrt.Encoder.bool v.Metrics_types.is_monotonic encoder; + () + +let rec encode_gauge (v:Metrics_types.gauge) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_number_data_point x) encoder; + ) v.Metrics_types.data_points; + () + +let rec encode_metric_data (v:Metrics_types.metric_data) encoder = + begin match v with + | Metrics_types.Summary x -> + Pbrt.Encoder.key (11, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_summary x) encoder; + | Metrics_types.Exponential_histogram x -> + Pbrt.Encoder.key (10, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_exponential_histogram x) encoder; + | Metrics_types.Histogram x -> + Pbrt.Encoder.key (9, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_histogram x) encoder; + | Metrics_types.Sum x -> + Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_sum x) encoder; + | Metrics_types.Gauge x -> + Pbrt.Encoder.key (5, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_gauge x) encoder; + end + +and encode_metric (v:Metrics_types.metric) encoder = + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.string v.Metrics_types.name encoder; + Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; + Pbrt.Encoder.string v.Metrics_types.description encoder; + Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; + Pbrt.Encoder.string v.Metrics_types.unit_ encoder; + begin match v.Metrics_types.data with + | Metrics_types.Summary x -> + Pbrt.Encoder.key (11, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_summary x) encoder; + | Metrics_types.Exponential_histogram x -> + Pbrt.Encoder.key (10, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_exponential_histogram x) encoder; + | Metrics_types.Histogram x -> + Pbrt.Encoder.key (9, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_histogram x) encoder; + | Metrics_types.Sum x -> + Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_sum x) encoder; + | Metrics_types.Gauge x -> + Pbrt.Encoder.key (5, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_gauge x) encoder; + end; + () + +let rec encode_scope_metrics (v:Metrics_types.scope_metrics) encoder = + begin match v.Metrics_types.scope with + | Some x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (Common_pb.encode_instrumentation_scope x) encoder; + | None -> (); + end; + List.iter (fun x -> + Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_metric x) encoder; + ) v.Metrics_types.metrics; + Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; + Pbrt.Encoder.string v.Metrics_types.schema_url encoder; + () + +let rec encode_resource_metrics (v:Metrics_types.resource_metrics) encoder = + begin match v.Metrics_types.resource with + | Some x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (Resource_pb.encode_resource x) encoder; + | None -> (); + end; + List.iter (fun x -> + Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_scope_metrics x) encoder; + ) v.Metrics_types.scope_metrics; + Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; + Pbrt.Encoder.string v.Metrics_types.schema_url encoder; + () + +let rec encode_metrics_data (v:Metrics_types.metrics_data) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_resource_metrics x) encoder; + ) v.Metrics_types.resource_metrics; + () + +let rec encode_data_point_flags (v:Metrics_types.data_point_flags) encoder = + match v with + | Metrics_types.Data_point_flags_do_not_use -> Pbrt.Encoder.int_as_varint (0) encoder + | Metrics_types.Data_point_flags_no_recorded_value_mask -> Pbrt.Encoder.int_as_varint 1 encoder diff --git a/src/proto/metrics_pb.mli b/src/proto/metrics_pb.mli new file mode 100644 index 00000000..8184e069 --- /dev/null +++ b/src/proto/metrics_pb.mli @@ -0,0 +1,133 @@ +(** metrics.proto Binary Encoding *) + + +(** {2 Protobuf Encoding} *) + +val encode_summary_data_point_value_at_quantile : Metrics_types.summary_data_point_value_at_quantile -> Pbrt.Encoder.t -> unit +(** [encode_summary_data_point_value_at_quantile v encoder] encodes [v] with the given [encoder] *) + +val encode_summary_data_point : Metrics_types.summary_data_point -> Pbrt.Encoder.t -> unit +(** [encode_summary_data_point v encoder] encodes [v] with the given [encoder] *) + +val encode_summary : Metrics_types.summary -> Pbrt.Encoder.t -> unit +(** [encode_summary v encoder] encodes [v] with the given [encoder] *) + +val encode_exponential_histogram_data_point_buckets : Metrics_types.exponential_histogram_data_point_buckets -> Pbrt.Encoder.t -> unit +(** [encode_exponential_histogram_data_point_buckets v encoder] encodes [v] with the given [encoder] *) + +val encode_exemplar_value : Metrics_types.exemplar_value -> Pbrt.Encoder.t -> unit +(** [encode_exemplar_value v encoder] encodes [v] with the given [encoder] *) + +val encode_exemplar : Metrics_types.exemplar -> Pbrt.Encoder.t -> unit +(** [encode_exemplar v encoder] encodes [v] with the given [encoder] *) + +val encode_exponential_histogram_data_point : Metrics_types.exponential_histogram_data_point -> Pbrt.Encoder.t -> unit +(** [encode_exponential_histogram_data_point v encoder] encodes [v] with the given [encoder] *) + +val encode_aggregation_temporality : Metrics_types.aggregation_temporality -> Pbrt.Encoder.t -> unit +(** [encode_aggregation_temporality v encoder] encodes [v] with the given [encoder] *) + +val encode_exponential_histogram : Metrics_types.exponential_histogram -> Pbrt.Encoder.t -> unit +(** [encode_exponential_histogram v encoder] encodes [v] with the given [encoder] *) + +val encode_histogram_data_point : Metrics_types.histogram_data_point -> Pbrt.Encoder.t -> unit +(** [encode_histogram_data_point v encoder] encodes [v] with the given [encoder] *) + +val encode_histogram : Metrics_types.histogram -> Pbrt.Encoder.t -> unit +(** [encode_histogram v encoder] encodes [v] with the given [encoder] *) + +val encode_number_data_point_value : Metrics_types.number_data_point_value -> Pbrt.Encoder.t -> unit +(** [encode_number_data_point_value v encoder] encodes [v] with the given [encoder] *) + +val encode_number_data_point : Metrics_types.number_data_point -> Pbrt.Encoder.t -> unit +(** [encode_number_data_point v encoder] encodes [v] with the given [encoder] *) + +val encode_sum : Metrics_types.sum -> Pbrt.Encoder.t -> unit +(** [encode_sum v encoder] encodes [v] with the given [encoder] *) + +val encode_gauge : Metrics_types.gauge -> Pbrt.Encoder.t -> unit +(** [encode_gauge v encoder] encodes [v] with the given [encoder] *) + +val encode_metric_data : Metrics_types.metric_data -> Pbrt.Encoder.t -> unit +(** [encode_metric_data v encoder] encodes [v] with the given [encoder] *) + +val encode_metric : Metrics_types.metric -> Pbrt.Encoder.t -> unit +(** [encode_metric v encoder] encodes [v] with the given [encoder] *) + +val encode_scope_metrics : Metrics_types.scope_metrics -> Pbrt.Encoder.t -> unit +(** [encode_scope_metrics v encoder] encodes [v] with the given [encoder] *) + +val encode_resource_metrics : Metrics_types.resource_metrics -> Pbrt.Encoder.t -> unit +(** [encode_resource_metrics v encoder] encodes [v] with the given [encoder] *) + +val encode_metrics_data : Metrics_types.metrics_data -> Pbrt.Encoder.t -> unit +(** [encode_metrics_data v encoder] encodes [v] with the given [encoder] *) + +val encode_data_point_flags : Metrics_types.data_point_flags -> Pbrt.Encoder.t -> unit +(** [encode_data_point_flags v encoder] encodes [v] with the given [encoder] *) + + +(** {2 Protobuf Decoding} *) + +val decode_summary_data_point_value_at_quantile : Pbrt.Decoder.t -> Metrics_types.summary_data_point_value_at_quantile +(** [decode_summary_data_point_value_at_quantile decoder] decodes a [summary_data_point_value_at_quantile] value from [decoder] *) + +val decode_summary_data_point : Pbrt.Decoder.t -> Metrics_types.summary_data_point +(** [decode_summary_data_point decoder] decodes a [summary_data_point] value from [decoder] *) + +val decode_summary : Pbrt.Decoder.t -> Metrics_types.summary +(** [decode_summary decoder] decodes a [summary] value from [decoder] *) + +val decode_exponential_histogram_data_point_buckets : Pbrt.Decoder.t -> Metrics_types.exponential_histogram_data_point_buckets +(** [decode_exponential_histogram_data_point_buckets decoder] decodes a [exponential_histogram_data_point_buckets] value from [decoder] *) + +val decode_exemplar_value : Pbrt.Decoder.t -> Metrics_types.exemplar_value +(** [decode_exemplar_value decoder] decodes a [exemplar_value] value from [decoder] *) + +val decode_exemplar : Pbrt.Decoder.t -> Metrics_types.exemplar +(** [decode_exemplar decoder] decodes a [exemplar] value from [decoder] *) + +val decode_exponential_histogram_data_point : Pbrt.Decoder.t -> Metrics_types.exponential_histogram_data_point +(** [decode_exponential_histogram_data_point decoder] decodes a [exponential_histogram_data_point] value from [decoder] *) + +val decode_aggregation_temporality : Pbrt.Decoder.t -> Metrics_types.aggregation_temporality +(** [decode_aggregation_temporality decoder] decodes a [aggregation_temporality] value from [decoder] *) + +val decode_exponential_histogram : Pbrt.Decoder.t -> Metrics_types.exponential_histogram +(** [decode_exponential_histogram decoder] decodes a [exponential_histogram] value from [decoder] *) + +val decode_histogram_data_point : Pbrt.Decoder.t -> Metrics_types.histogram_data_point +(** [decode_histogram_data_point decoder] decodes a [histogram_data_point] value from [decoder] *) + +val decode_histogram : Pbrt.Decoder.t -> Metrics_types.histogram +(** [decode_histogram decoder] decodes a [histogram] value from [decoder] *) + +val decode_number_data_point_value : Pbrt.Decoder.t -> Metrics_types.number_data_point_value +(** [decode_number_data_point_value decoder] decodes a [number_data_point_value] value from [decoder] *) + +val decode_number_data_point : Pbrt.Decoder.t -> Metrics_types.number_data_point +(** [decode_number_data_point decoder] decodes a [number_data_point] value from [decoder] *) + +val decode_sum : Pbrt.Decoder.t -> Metrics_types.sum +(** [decode_sum decoder] decodes a [sum] value from [decoder] *) + +val decode_gauge : Pbrt.Decoder.t -> Metrics_types.gauge +(** [decode_gauge decoder] decodes a [gauge] value from [decoder] *) + +val decode_metric_data : Pbrt.Decoder.t -> Metrics_types.metric_data +(** [decode_metric_data decoder] decodes a [metric_data] value from [decoder] *) + +val decode_metric : Pbrt.Decoder.t -> Metrics_types.metric +(** [decode_metric decoder] decodes a [metric] value from [decoder] *) + +val decode_scope_metrics : Pbrt.Decoder.t -> Metrics_types.scope_metrics +(** [decode_scope_metrics decoder] decodes a [scope_metrics] value from [decoder] *) + +val decode_resource_metrics : Pbrt.Decoder.t -> Metrics_types.resource_metrics +(** [decode_resource_metrics decoder] decodes a [resource_metrics] value from [decoder] *) + +val decode_metrics_data : Pbrt.Decoder.t -> Metrics_types.metrics_data +(** [decode_metrics_data decoder] decodes a [metrics_data] value from [decoder] *) + +val decode_data_point_flags : Pbrt.Decoder.t -> Metrics_types.data_point_flags +(** [decode_data_point_flags decoder] decodes a [data_point_flags] value from [decoder] *) diff --git a/src/proto/metrics_pp.ml b/src/proto/metrics_pp.ml new file mode 100644 index 00000000..974c2f7e --- /dev/null +++ b/src/proto/metrics_pp.ml @@ -0,0 +1,177 @@ +[@@@ocaml.warning "-27-30-39"] + +let rec pp_summary_data_point_value_at_quantile fmt (v:Metrics_types.summary_data_point_value_at_quantile) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "quantile" Pbrt.Pp.pp_float fmt v.Metrics_types.quantile; + Pbrt.Pp.pp_record_field ~first:false "value" Pbrt.Pp.pp_float fmt v.Metrics_types.value; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_summary_data_point fmt (v:Metrics_types.summary_data_point) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Metrics_types.attributes; + Pbrt.Pp.pp_record_field ~first:false "start_time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.start_time_unix_nano; + Pbrt.Pp.pp_record_field ~first:false "time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.time_unix_nano; + Pbrt.Pp.pp_record_field ~first:false "count" Pbrt.Pp.pp_int64 fmt v.Metrics_types.count; + Pbrt.Pp.pp_record_field ~first:false "sum" Pbrt.Pp.pp_float fmt v.Metrics_types.sum; + Pbrt.Pp.pp_record_field ~first:false "quantile_values" (Pbrt.Pp.pp_list pp_summary_data_point_value_at_quantile) fmt v.Metrics_types.quantile_values; + Pbrt.Pp.pp_record_field ~first:false "flags" Pbrt.Pp.pp_int32 fmt v.Metrics_types.flags; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_summary fmt (v:Metrics_types.summary) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "data_points" (Pbrt.Pp.pp_list pp_summary_data_point) fmt v.Metrics_types.data_points; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_exponential_histogram_data_point_buckets fmt (v:Metrics_types.exponential_histogram_data_point_buckets) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "offset" Pbrt.Pp.pp_int32 fmt v.Metrics_types.offset; + Pbrt.Pp.pp_record_field ~first:false "bucket_counts" (Pbrt.Pp.pp_list Pbrt.Pp.pp_int64) fmt v.Metrics_types.bucket_counts; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_exemplar_value fmt (v:Metrics_types.exemplar_value) = + match v with + | Metrics_types.As_int x -> Format.fprintf fmt "@[As_int(@,%a)@]" Pbrt.Pp.pp_int64 x + | Metrics_types.As_double x -> Format.fprintf fmt "@[As_double(@,%a)@]" Pbrt.Pp.pp_float x + +and pp_exemplar fmt (v:Metrics_types.exemplar) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "filtered_attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Metrics_types.filtered_attributes; + Pbrt.Pp.pp_record_field ~first:false "time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.time_unix_nano; + Pbrt.Pp.pp_record_field ~first:false "value" pp_exemplar_value fmt v.Metrics_types.value; + Pbrt.Pp.pp_record_field ~first:false "span_id" Pbrt.Pp.pp_bytes fmt v.Metrics_types.span_id; + Pbrt.Pp.pp_record_field ~first:false "trace_id" Pbrt.Pp.pp_bytes fmt v.Metrics_types.trace_id; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_exponential_histogram_data_point fmt (v:Metrics_types.exponential_histogram_data_point) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Metrics_types.attributes; + Pbrt.Pp.pp_record_field ~first:false "start_time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.start_time_unix_nano; + Pbrt.Pp.pp_record_field ~first:false "time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.time_unix_nano; + Pbrt.Pp.pp_record_field ~first:false "count" Pbrt.Pp.pp_int64 fmt v.Metrics_types.count; + Pbrt.Pp.pp_record_field ~first:false "sum" (Pbrt.Pp.pp_option Pbrt.Pp.pp_float) fmt v.Metrics_types.sum; + Pbrt.Pp.pp_record_field ~first:false "scale" Pbrt.Pp.pp_int32 fmt v.Metrics_types.scale; + Pbrt.Pp.pp_record_field ~first:false "zero_count" Pbrt.Pp.pp_int64 fmt v.Metrics_types.zero_count; + Pbrt.Pp.pp_record_field ~first:false "positive" (Pbrt.Pp.pp_option pp_exponential_histogram_data_point_buckets) fmt v.Metrics_types.positive; + Pbrt.Pp.pp_record_field ~first:false "negative" (Pbrt.Pp.pp_option pp_exponential_histogram_data_point_buckets) fmt v.Metrics_types.negative; + Pbrt.Pp.pp_record_field ~first:false "flags" Pbrt.Pp.pp_int32 fmt v.Metrics_types.flags; + Pbrt.Pp.pp_record_field ~first:false "exemplars" (Pbrt.Pp.pp_list pp_exemplar) fmt v.Metrics_types.exemplars; + Pbrt.Pp.pp_record_field ~first:false "min" (Pbrt.Pp.pp_option Pbrt.Pp.pp_float) fmt v.Metrics_types.min; + Pbrt.Pp.pp_record_field ~first:false "max" (Pbrt.Pp.pp_option Pbrt.Pp.pp_float) fmt v.Metrics_types.max; + Pbrt.Pp.pp_record_field ~first:false "zero_threshold" Pbrt.Pp.pp_float fmt v.Metrics_types.zero_threshold; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_aggregation_temporality fmt (v:Metrics_types.aggregation_temporality) = + match v with + | Metrics_types.Aggregation_temporality_unspecified -> Format.fprintf fmt "Aggregation_temporality_unspecified" + | Metrics_types.Aggregation_temporality_delta -> Format.fprintf fmt "Aggregation_temporality_delta" + | Metrics_types.Aggregation_temporality_cumulative -> Format.fprintf fmt "Aggregation_temporality_cumulative" + +let rec pp_exponential_histogram fmt (v:Metrics_types.exponential_histogram) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "data_points" (Pbrt.Pp.pp_list pp_exponential_histogram_data_point) fmt v.Metrics_types.data_points; + Pbrt.Pp.pp_record_field ~first:false "aggregation_temporality" pp_aggregation_temporality fmt v.Metrics_types.aggregation_temporality; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_histogram_data_point fmt (v:Metrics_types.histogram_data_point) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Metrics_types.attributes; + Pbrt.Pp.pp_record_field ~first:false "start_time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.start_time_unix_nano; + Pbrt.Pp.pp_record_field ~first:false "time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.time_unix_nano; + Pbrt.Pp.pp_record_field ~first:false "count" Pbrt.Pp.pp_int64 fmt v.Metrics_types.count; + Pbrt.Pp.pp_record_field ~first:false "sum" (Pbrt.Pp.pp_option Pbrt.Pp.pp_float) fmt v.Metrics_types.sum; + Pbrt.Pp.pp_record_field ~first:false "bucket_counts" (Pbrt.Pp.pp_list Pbrt.Pp.pp_int64) fmt v.Metrics_types.bucket_counts; + Pbrt.Pp.pp_record_field ~first:false "explicit_bounds" (Pbrt.Pp.pp_list Pbrt.Pp.pp_float) fmt v.Metrics_types.explicit_bounds; + Pbrt.Pp.pp_record_field ~first:false "exemplars" (Pbrt.Pp.pp_list pp_exemplar) fmt v.Metrics_types.exemplars; + Pbrt.Pp.pp_record_field ~first:false "flags" Pbrt.Pp.pp_int32 fmt v.Metrics_types.flags; + Pbrt.Pp.pp_record_field ~first:false "min" (Pbrt.Pp.pp_option Pbrt.Pp.pp_float) fmt v.Metrics_types.min; + Pbrt.Pp.pp_record_field ~first:false "max" (Pbrt.Pp.pp_option Pbrt.Pp.pp_float) fmt v.Metrics_types.max; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_histogram fmt (v:Metrics_types.histogram) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "data_points" (Pbrt.Pp.pp_list pp_histogram_data_point) fmt v.Metrics_types.data_points; + Pbrt.Pp.pp_record_field ~first:false "aggregation_temporality" pp_aggregation_temporality fmt v.Metrics_types.aggregation_temporality; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_number_data_point_value fmt (v:Metrics_types.number_data_point_value) = + match v with + | Metrics_types.As_int x -> Format.fprintf fmt "@[As_int(@,%a)@]" Pbrt.Pp.pp_int64 x + | Metrics_types.As_double x -> Format.fprintf fmt "@[As_double(@,%a)@]" Pbrt.Pp.pp_float x + +and pp_number_data_point fmt (v:Metrics_types.number_data_point) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Metrics_types.attributes; + Pbrt.Pp.pp_record_field ~first:false "start_time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.start_time_unix_nano; + Pbrt.Pp.pp_record_field ~first:false "time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.time_unix_nano; + Pbrt.Pp.pp_record_field ~first:false "value" pp_number_data_point_value fmt v.Metrics_types.value; + Pbrt.Pp.pp_record_field ~first:false "exemplars" (Pbrt.Pp.pp_list pp_exemplar) fmt v.Metrics_types.exemplars; + Pbrt.Pp.pp_record_field ~first:false "flags" Pbrt.Pp.pp_int32 fmt v.Metrics_types.flags; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_sum fmt (v:Metrics_types.sum) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "data_points" (Pbrt.Pp.pp_list pp_number_data_point) fmt v.Metrics_types.data_points; + Pbrt.Pp.pp_record_field ~first:false "aggregation_temporality" pp_aggregation_temporality fmt v.Metrics_types.aggregation_temporality; + Pbrt.Pp.pp_record_field ~first:false "is_monotonic" Pbrt.Pp.pp_bool fmt v.Metrics_types.is_monotonic; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_gauge fmt (v:Metrics_types.gauge) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "data_points" (Pbrt.Pp.pp_list pp_number_data_point) fmt v.Metrics_types.data_points; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_metric_data fmt (v:Metrics_types.metric_data) = + match v with + | Metrics_types.Summary x -> Format.fprintf fmt "@[Summary(@,%a)@]" pp_summary x + | Metrics_types.Exponential_histogram x -> Format.fprintf fmt "@[Exponential_histogram(@,%a)@]" pp_exponential_histogram x + | Metrics_types.Histogram x -> Format.fprintf fmt "@[Histogram(@,%a)@]" pp_histogram x + | Metrics_types.Sum x -> Format.fprintf fmt "@[Sum(@,%a)@]" pp_sum x + | Metrics_types.Gauge x -> Format.fprintf fmt "@[Gauge(@,%a)@]" pp_gauge x + +and pp_metric fmt (v:Metrics_types.metric) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "name" Pbrt.Pp.pp_string fmt v.Metrics_types.name; + Pbrt.Pp.pp_record_field ~first:false "description" Pbrt.Pp.pp_string fmt v.Metrics_types.description; + Pbrt.Pp.pp_record_field ~first:false "unit_" Pbrt.Pp.pp_string fmt v.Metrics_types.unit_; + Pbrt.Pp.pp_record_field ~first:false "data" pp_metric_data fmt v.Metrics_types.data; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_scope_metrics fmt (v:Metrics_types.scope_metrics) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "scope" (Pbrt.Pp.pp_option Common_pp.pp_instrumentation_scope) fmt v.Metrics_types.scope; + Pbrt.Pp.pp_record_field ~first:false "metrics" (Pbrt.Pp.pp_list pp_metric) fmt v.Metrics_types.metrics; + Pbrt.Pp.pp_record_field ~first:false "schema_url" Pbrt.Pp.pp_string fmt v.Metrics_types.schema_url; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_resource_metrics fmt (v:Metrics_types.resource_metrics) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "resource" (Pbrt.Pp.pp_option Resource_pp.pp_resource) fmt v.Metrics_types.resource; + Pbrt.Pp.pp_record_field ~first:false "scope_metrics" (Pbrt.Pp.pp_list pp_scope_metrics) fmt v.Metrics_types.scope_metrics; + Pbrt.Pp.pp_record_field ~first:false "schema_url" Pbrt.Pp.pp_string fmt v.Metrics_types.schema_url; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_metrics_data fmt (v:Metrics_types.metrics_data) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "resource_metrics" (Pbrt.Pp.pp_list pp_resource_metrics) fmt v.Metrics_types.resource_metrics; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_data_point_flags fmt (v:Metrics_types.data_point_flags) = + match v with + | Metrics_types.Data_point_flags_do_not_use -> Format.fprintf fmt "Data_point_flags_do_not_use" + | Metrics_types.Data_point_flags_no_recorded_value_mask -> Format.fprintf fmt "Data_point_flags_no_recorded_value_mask" diff --git a/src/proto/metrics_pp.mli b/src/proto/metrics_pp.mli new file mode 100644 index 00000000..7ee4b6fc --- /dev/null +++ b/src/proto/metrics_pp.mli @@ -0,0 +1,68 @@ + +(** metrics.proto Pretty Printing *) + + +(** {2 Formatters} *) + +val pp_summary_data_point_value_at_quantile : Format.formatter -> Metrics_types.summary_data_point_value_at_quantile -> unit +(** [pp_summary_data_point_value_at_quantile v] formats v *) + +val pp_summary_data_point : Format.formatter -> Metrics_types.summary_data_point -> unit +(** [pp_summary_data_point v] formats v *) + +val pp_summary : Format.formatter -> Metrics_types.summary -> unit +(** [pp_summary v] formats v *) + +val pp_exponential_histogram_data_point_buckets : Format.formatter -> Metrics_types.exponential_histogram_data_point_buckets -> unit +(** [pp_exponential_histogram_data_point_buckets v] formats v *) + +val pp_exemplar_value : Format.formatter -> Metrics_types.exemplar_value -> unit +(** [pp_exemplar_value v] formats v *) + +val pp_exemplar : Format.formatter -> Metrics_types.exemplar -> unit +(** [pp_exemplar v] formats v *) + +val pp_exponential_histogram_data_point : Format.formatter -> Metrics_types.exponential_histogram_data_point -> unit +(** [pp_exponential_histogram_data_point v] formats v *) + +val pp_aggregation_temporality : Format.formatter -> Metrics_types.aggregation_temporality -> unit +(** [pp_aggregation_temporality v] formats v *) + +val pp_exponential_histogram : Format.formatter -> Metrics_types.exponential_histogram -> unit +(** [pp_exponential_histogram v] formats v *) + +val pp_histogram_data_point : Format.formatter -> Metrics_types.histogram_data_point -> unit +(** [pp_histogram_data_point v] formats v *) + +val pp_histogram : Format.formatter -> Metrics_types.histogram -> unit +(** [pp_histogram v] formats v *) + +val pp_number_data_point_value : Format.formatter -> Metrics_types.number_data_point_value -> unit +(** [pp_number_data_point_value v] formats v *) + +val pp_number_data_point : Format.formatter -> Metrics_types.number_data_point -> unit +(** [pp_number_data_point v] formats v *) + +val pp_sum : Format.formatter -> Metrics_types.sum -> unit +(** [pp_sum v] formats v *) + +val pp_gauge : Format.formatter -> Metrics_types.gauge -> unit +(** [pp_gauge v] formats v *) + +val pp_metric_data : Format.formatter -> Metrics_types.metric_data -> unit +(** [pp_metric_data v] formats v *) + +val pp_metric : Format.formatter -> Metrics_types.metric -> unit +(** [pp_metric v] formats v *) + +val pp_scope_metrics : Format.formatter -> Metrics_types.scope_metrics -> unit +(** [pp_scope_metrics v] formats v *) + +val pp_resource_metrics : Format.formatter -> Metrics_types.resource_metrics -> unit +(** [pp_resource_metrics v] formats v *) + +val pp_metrics_data : Format.formatter -> Metrics_types.metrics_data -> unit +(** [pp_metrics_data v] formats v *) + +val pp_data_point_flags : Format.formatter -> Metrics_types.data_point_flags -> unit +(** [pp_data_point_flags v] formats v *) diff --git a/src/proto/metrics_service_pb.ml b/src/proto/metrics_service_pb.ml new file mode 100644 index 00000000..dd839d9b --- /dev/null +++ b/src/proto/metrics_service_pb.ml @@ -0,0 +1,112 @@ +[@@@ocaml.warning "-27-30-39"] + +type export_metrics_service_request_mutable = { + mutable resource_metrics : Metrics_types.resource_metrics list; +} + +let default_export_metrics_service_request_mutable () : export_metrics_service_request_mutable = { + resource_metrics = []; +} + +type export_metrics_partial_success_mutable = { + mutable rejected_data_points : int64; + mutable error_message : string; +} + +let default_export_metrics_partial_success_mutable () : export_metrics_partial_success_mutable = { + rejected_data_points = 0L; + error_message = ""; +} + +type export_metrics_service_response_mutable = { + mutable partial_success : Metrics_service_types.export_metrics_partial_success option; +} + +let default_export_metrics_service_response_mutable () : export_metrics_service_response_mutable = { + partial_success = None; +} + + +let rec decode_export_metrics_service_request d = + let v = default_export_metrics_service_request_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.resource_metrics <- List.rev v.resource_metrics; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.resource_metrics <- (Metrics_pb.decode_resource_metrics (Pbrt.Decoder.nested d)) :: v.resource_metrics; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(export_metrics_service_request), field(1)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Metrics_service_types.resource_metrics = v.resource_metrics; + } : Metrics_service_types.export_metrics_service_request) + +let rec decode_export_metrics_partial_success d = + let v = default_export_metrics_partial_success_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + ); continue__ := false + | Some (1, Pbrt.Varint) -> begin + v.rejected_data_points <- Pbrt.Decoder.int64_as_varint d; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(export_metrics_partial_success), field(1)" pk + | Some (2, Pbrt.Bytes) -> begin + v.error_message <- Pbrt.Decoder.string d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(export_metrics_partial_success), field(2)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Metrics_service_types.rejected_data_points = v.rejected_data_points; + Metrics_service_types.error_message = v.error_message; + } : Metrics_service_types.export_metrics_partial_success) + +let rec decode_export_metrics_service_response d = + let v = default_export_metrics_service_response_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.partial_success <- Some (decode_export_metrics_partial_success (Pbrt.Decoder.nested d)); + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(export_metrics_service_response), field(1)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Metrics_service_types.partial_success = v.partial_success; + } : Metrics_service_types.export_metrics_service_response) + +let rec encode_export_metrics_service_request (v:Metrics_service_types.export_metrics_service_request) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (Metrics_pb.encode_resource_metrics x) encoder; + ) v.Metrics_service_types.resource_metrics; + () + +let rec encode_export_metrics_partial_success (v:Metrics_service_types.export_metrics_partial_success) encoder = + Pbrt.Encoder.key (1, Pbrt.Varint) encoder; + Pbrt.Encoder.int64_as_varint v.Metrics_service_types.rejected_data_points encoder; + Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; + Pbrt.Encoder.string v.Metrics_service_types.error_message encoder; + () + +let rec encode_export_metrics_service_response (v:Metrics_service_types.export_metrics_service_response) encoder = + begin match v.Metrics_service_types.partial_success with + | Some x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_export_metrics_partial_success x) encoder; + | None -> (); + end; + () diff --git a/src/proto/metrics_service_pb.mli b/src/proto/metrics_service_pb.mli new file mode 100644 index 00000000..ed839b04 --- /dev/null +++ b/src/proto/metrics_service_pb.mli @@ -0,0 +1,25 @@ +(** metrics_service.proto Binary Encoding *) + + +(** {2 Protobuf Encoding} *) + +val encode_export_metrics_service_request : Metrics_service_types.export_metrics_service_request -> Pbrt.Encoder.t -> unit +(** [encode_export_metrics_service_request v encoder] encodes [v] with the given [encoder] *) + +val encode_export_metrics_partial_success : Metrics_service_types.export_metrics_partial_success -> Pbrt.Encoder.t -> unit +(** [encode_export_metrics_partial_success v encoder] encodes [v] with the given [encoder] *) + +val encode_export_metrics_service_response : Metrics_service_types.export_metrics_service_response -> Pbrt.Encoder.t -> unit +(** [encode_export_metrics_service_response v encoder] encodes [v] with the given [encoder] *) + + +(** {2 Protobuf Decoding} *) + +val decode_export_metrics_service_request : Pbrt.Decoder.t -> Metrics_service_types.export_metrics_service_request +(** [decode_export_metrics_service_request decoder] decodes a [export_metrics_service_request] value from [decoder] *) + +val decode_export_metrics_partial_success : Pbrt.Decoder.t -> Metrics_service_types.export_metrics_partial_success +(** [decode_export_metrics_partial_success decoder] decodes a [export_metrics_partial_success] value from [decoder] *) + +val decode_export_metrics_service_response : Pbrt.Decoder.t -> Metrics_service_types.export_metrics_service_response +(** [decode_export_metrics_service_response decoder] decodes a [export_metrics_service_response] value from [decoder] *) diff --git a/src/proto/metrics_service_pp.ml b/src/proto/metrics_service_pp.ml new file mode 100644 index 00000000..bb0f7a3b --- /dev/null +++ b/src/proto/metrics_service_pp.ml @@ -0,0 +1,20 @@ +[@@@ocaml.warning "-27-30-39"] + +let rec pp_export_metrics_service_request fmt (v:Metrics_service_types.export_metrics_service_request) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "resource_metrics" (Pbrt.Pp.pp_list Metrics_pp.pp_resource_metrics) fmt v.Metrics_service_types.resource_metrics; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_export_metrics_partial_success fmt (v:Metrics_service_types.export_metrics_partial_success) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "rejected_data_points" Pbrt.Pp.pp_int64 fmt v.Metrics_service_types.rejected_data_points; + Pbrt.Pp.pp_record_field ~first:false "error_message" Pbrt.Pp.pp_string fmt v.Metrics_service_types.error_message; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_export_metrics_service_response fmt (v:Metrics_service_types.export_metrics_service_response) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "partial_success" (Pbrt.Pp.pp_option pp_export_metrics_partial_success) fmt v.Metrics_service_types.partial_success; + in + Pbrt.Pp.pp_brk pp_i fmt () diff --git a/src/proto/metrics_service_pp.mli b/src/proto/metrics_service_pp.mli new file mode 100644 index 00000000..c9b5ed6f --- /dev/null +++ b/src/proto/metrics_service_pp.mli @@ -0,0 +1,14 @@ + +(** metrics_service.proto Pretty Printing *) + + +(** {2 Formatters} *) + +val pp_export_metrics_service_request : Format.formatter -> Metrics_service_types.export_metrics_service_request -> unit +(** [pp_export_metrics_service_request v] formats v *) + +val pp_export_metrics_partial_success : Format.formatter -> Metrics_service_types.export_metrics_partial_success -> unit +(** [pp_export_metrics_partial_success v] formats v *) + +val pp_export_metrics_service_response : Format.formatter -> Metrics_service_types.export_metrics_service_response -> unit +(** [pp_export_metrics_service_response v] formats v *) diff --git a/src/proto/metrics_service_types.ml b/src/proto/metrics_service_types.ml new file mode 100644 index 00000000..8b252a24 --- /dev/null +++ b/src/proto/metrics_service_types.ml @@ -0,0 +1,35 @@ +[@@@ocaml.warning "-27-30-39"] + + +type export_metrics_service_request = { + resource_metrics : Metrics_types.resource_metrics list; +} + +type export_metrics_partial_success = { + rejected_data_points : int64; + error_message : string; +} + +type export_metrics_service_response = { + partial_success : export_metrics_partial_success option; +} + +let rec default_export_metrics_service_request + ?resource_metrics:((resource_metrics:Metrics_types.resource_metrics list) = []) + () : export_metrics_service_request = { + resource_metrics; +} + +let rec default_export_metrics_partial_success + ?rejected_data_points:((rejected_data_points:int64) = 0L) + ?error_message:((error_message:string) = "") + () : export_metrics_partial_success = { + rejected_data_points; + error_message; +} + +let rec default_export_metrics_service_response + ?partial_success:((partial_success:export_metrics_partial_success option) = None) + () : export_metrics_service_response = { + partial_success; +} diff --git a/src/proto/metrics_service_types.mli b/src/proto/metrics_service_types.mli new file mode 100644 index 00000000..cbcddfed --- /dev/null +++ b/src/proto/metrics_service_types.mli @@ -0,0 +1,40 @@ +(** metrics_service.proto Types *) + + + +(** {2 Types} *) + +type export_metrics_service_request = { + resource_metrics : Metrics_types.resource_metrics list; +} + +type export_metrics_partial_success = { + rejected_data_points : int64; + error_message : string; +} + +type export_metrics_service_response = { + partial_success : export_metrics_partial_success option; +} + + +(** {2 Default values} *) + +val default_export_metrics_service_request : + ?resource_metrics:Metrics_types.resource_metrics list -> + unit -> + export_metrics_service_request +(** [default_export_metrics_service_request ()] is the default value for type [export_metrics_service_request] *) + +val default_export_metrics_partial_success : + ?rejected_data_points:int64 -> + ?error_message:string -> + unit -> + export_metrics_partial_success +(** [default_export_metrics_partial_success ()] is the default value for type [export_metrics_partial_success] *) + +val default_export_metrics_service_response : + ?partial_success:export_metrics_partial_success option -> + unit -> + export_metrics_service_response +(** [default_export_metrics_service_response ()] is the default value for type [export_metrics_service_response] *) diff --git a/src/proto/metrics_types.ml b/src/proto/metrics_types.ml new file mode 100644 index 00000000..d238843c --- /dev/null +++ b/src/proto/metrics_types.ml @@ -0,0 +1,349 @@ +[@@@ocaml.warning "-27-30-39"] + + +type summary_data_point_value_at_quantile = { + quantile : float; + value : float; +} + +type summary_data_point = { + attributes : Common_types.key_value list; + start_time_unix_nano : int64; + time_unix_nano : int64; + count : int64; + sum : float; + quantile_values : summary_data_point_value_at_quantile list; + flags : int32; +} + +type summary = { + data_points : summary_data_point list; +} + +type exponential_histogram_data_point_buckets = { + offset : int32; + bucket_counts : int64 list; +} + +type exemplar_value = + | As_int of int64 + | As_double of float + +and exemplar = { + filtered_attributes : Common_types.key_value list; + time_unix_nano : int64; + value : exemplar_value; + span_id : bytes; + trace_id : bytes; +} + +type exponential_histogram_data_point = { + attributes : Common_types.key_value list; + start_time_unix_nano : int64; + time_unix_nano : int64; + count : int64; + sum : float option; + scale : int32; + zero_count : int64; + positive : exponential_histogram_data_point_buckets option; + negative : exponential_histogram_data_point_buckets option; + flags : int32; + exemplars : exemplar list; + min : float option; + max : float option; + zero_threshold : float; +} + +type aggregation_temporality = + | Aggregation_temporality_unspecified + | Aggregation_temporality_delta + | Aggregation_temporality_cumulative + +type exponential_histogram = { + data_points : exponential_histogram_data_point list; + aggregation_temporality : aggregation_temporality; +} + +type histogram_data_point = { + attributes : Common_types.key_value list; + start_time_unix_nano : int64; + time_unix_nano : int64; + count : int64; + sum : float option; + bucket_counts : int64 list; + explicit_bounds : float list; + exemplars : exemplar list; + flags : int32; + min : float option; + max : float option; +} + +type histogram = { + data_points : histogram_data_point list; + aggregation_temporality : aggregation_temporality; +} + +type number_data_point_value = + | As_int of int64 + | As_double of float + +and number_data_point = { + attributes : Common_types.key_value list; + start_time_unix_nano : int64; + time_unix_nano : int64; + value : number_data_point_value; + exemplars : exemplar list; + flags : int32; +} + +type sum = { + data_points : number_data_point list; + aggregation_temporality : aggregation_temporality; + is_monotonic : bool; +} + +type gauge = { + data_points : number_data_point list; +} + +type metric_data = + | Summary of summary + | Exponential_histogram of exponential_histogram + | Histogram of histogram + | Sum of sum + | Gauge of gauge + +and metric = { + name : string; + description : string; + unit_ : string; + data : metric_data; +} + +type scope_metrics = { + scope : Common_types.instrumentation_scope option; + metrics : metric list; + schema_url : string; +} + +type resource_metrics = { + resource : Resource_types.resource option; + scope_metrics : scope_metrics list; + schema_url : string; +} + +type metrics_data = { + resource_metrics : resource_metrics list; +} + +type data_point_flags = + | Data_point_flags_do_not_use + | Data_point_flags_no_recorded_value_mask + +let rec default_summary_data_point_value_at_quantile + ?quantile:((quantile:float) = 0.) + ?value:((value:float) = 0.) + () : summary_data_point_value_at_quantile = { + quantile; + value; +} + +let rec default_summary_data_point + ?attributes:((attributes:Common_types.key_value list) = []) + ?start_time_unix_nano:((start_time_unix_nano:int64) = 0L) + ?time_unix_nano:((time_unix_nano:int64) = 0L) + ?count:((count:int64) = 0L) + ?sum:((sum:float) = 0.) + ?quantile_values:((quantile_values:summary_data_point_value_at_quantile list) = []) + ?flags:((flags:int32) = 0l) + () : summary_data_point = { + attributes; + start_time_unix_nano; + time_unix_nano; + count; + sum; + quantile_values; + flags; +} + +let rec default_summary + ?data_points:((data_points:summary_data_point list) = []) + () : summary = { + data_points; +} + +let rec default_exponential_histogram_data_point_buckets + ?offset:((offset:int32) = 0l) + ?bucket_counts:((bucket_counts:int64 list) = []) + () : exponential_histogram_data_point_buckets = { + offset; + bucket_counts; +} + +let rec default_exemplar_value () : exemplar_value = As_int (0L) + +and default_exemplar + ?filtered_attributes:((filtered_attributes:Common_types.key_value list) = []) + ?time_unix_nano:((time_unix_nano:int64) = 0L) + ?value:((value:exemplar_value) = As_int (0L)) + ?span_id:((span_id:bytes) = Bytes.create 0) + ?trace_id:((trace_id:bytes) = Bytes.create 0) + () : exemplar = { + filtered_attributes; + time_unix_nano; + value; + span_id; + trace_id; +} + +let rec default_exponential_histogram_data_point + ?attributes:((attributes:Common_types.key_value list) = []) + ?start_time_unix_nano:((start_time_unix_nano:int64) = 0L) + ?time_unix_nano:((time_unix_nano:int64) = 0L) + ?count:((count:int64) = 0L) + ?sum:((sum:float option) = None) + ?scale:((scale:int32) = 0l) + ?zero_count:((zero_count:int64) = 0L) + ?positive:((positive:exponential_histogram_data_point_buckets option) = None) + ?negative:((negative:exponential_histogram_data_point_buckets option) = None) + ?flags:((flags:int32) = 0l) + ?exemplars:((exemplars:exemplar list) = []) + ?min:((min:float option) = None) + ?max:((max:float option) = None) + ?zero_threshold:((zero_threshold:float) = 0.) + () : exponential_histogram_data_point = { + attributes; + start_time_unix_nano; + time_unix_nano; + count; + sum; + scale; + zero_count; + positive; + negative; + flags; + exemplars; + min; + max; + zero_threshold; +} + +let rec default_aggregation_temporality () = (Aggregation_temporality_unspecified:aggregation_temporality) + +let rec default_exponential_histogram + ?data_points:((data_points:exponential_histogram_data_point list) = []) + ?aggregation_temporality:((aggregation_temporality:aggregation_temporality) = default_aggregation_temporality ()) + () : exponential_histogram = { + data_points; + aggregation_temporality; +} + +let rec default_histogram_data_point + ?attributes:((attributes:Common_types.key_value list) = []) + ?start_time_unix_nano:((start_time_unix_nano:int64) = 0L) + ?time_unix_nano:((time_unix_nano:int64) = 0L) + ?count:((count:int64) = 0L) + ?sum:((sum:float option) = None) + ?bucket_counts:((bucket_counts:int64 list) = []) + ?explicit_bounds:((explicit_bounds:float list) = []) + ?exemplars:((exemplars:exemplar list) = []) + ?flags:((flags:int32) = 0l) + ?min:((min:float option) = None) + ?max:((max:float option) = None) + () : histogram_data_point = { + attributes; + start_time_unix_nano; + time_unix_nano; + count; + sum; + bucket_counts; + explicit_bounds; + exemplars; + flags; + min; + max; +} + +let rec default_histogram + ?data_points:((data_points:histogram_data_point list) = []) + ?aggregation_temporality:((aggregation_temporality:aggregation_temporality) = default_aggregation_temporality ()) + () : histogram = { + data_points; + aggregation_temporality; +} + +let rec default_number_data_point_value () : number_data_point_value = As_int (0L) + +and default_number_data_point + ?attributes:((attributes:Common_types.key_value list) = []) + ?start_time_unix_nano:((start_time_unix_nano:int64) = 0L) + ?time_unix_nano:((time_unix_nano:int64) = 0L) + ?value:((value:number_data_point_value) = As_int (0L)) + ?exemplars:((exemplars:exemplar list) = []) + ?flags:((flags:int32) = 0l) + () : number_data_point = { + attributes; + start_time_unix_nano; + time_unix_nano; + value; + exemplars; + flags; +} + +let rec default_sum + ?data_points:((data_points:number_data_point list) = []) + ?aggregation_temporality:((aggregation_temporality:aggregation_temporality) = default_aggregation_temporality ()) + ?is_monotonic:((is_monotonic:bool) = false) + () : sum = { + data_points; + aggregation_temporality; + is_monotonic; +} + +let rec default_gauge + ?data_points:((data_points:number_data_point list) = []) + () : gauge = { + data_points; +} + +let rec default_metric_data () : metric_data = Summary (default_summary ()) + +and default_metric + ?name:((name:string) = "") + ?description:((description:string) = "") + ?unit_:((unit_:string) = "") + ?data:((data:metric_data) = Summary (default_summary ())) + () : metric = { + name; + description; + unit_; + data; +} + +let rec default_scope_metrics + ?scope:((scope:Common_types.instrumentation_scope option) = None) + ?metrics:((metrics:metric list) = []) + ?schema_url:((schema_url:string) = "") + () : scope_metrics = { + scope; + metrics; + schema_url; +} + +let rec default_resource_metrics + ?resource:((resource:Resource_types.resource option) = None) + ?scope_metrics:((scope_metrics:scope_metrics list) = []) + ?schema_url:((schema_url:string) = "") + () : resource_metrics = { + resource; + scope_metrics; + schema_url; +} + +let rec default_metrics_data + ?resource_metrics:((resource_metrics:resource_metrics list) = []) + () : metrics_data = { + resource_metrics; +} + +let rec default_data_point_flags () = (Data_point_flags_do_not_use:data_point_flags) diff --git a/src/proto/metrics_types.mli b/src/proto/metrics_types.mli new file mode 100644 index 00000000..17471582 --- /dev/null +++ b/src/proto/metrics_types.mli @@ -0,0 +1,309 @@ +(** metrics.proto Types *) + + + +(** {2 Types} *) + +type summary_data_point_value_at_quantile = { + quantile : float; + value : float; +} + +type summary_data_point = { + attributes : Common_types.key_value list; + start_time_unix_nano : int64; + time_unix_nano : int64; + count : int64; + sum : float; + quantile_values : summary_data_point_value_at_quantile list; + flags : int32; +} + +type summary = { + data_points : summary_data_point list; +} + +type exponential_histogram_data_point_buckets = { + offset : int32; + bucket_counts : int64 list; +} + +type exemplar_value = + | As_int of int64 + | As_double of float + +and exemplar = { + filtered_attributes : Common_types.key_value list; + time_unix_nano : int64; + value : exemplar_value; + span_id : bytes; + trace_id : bytes; +} + +type exponential_histogram_data_point = { + attributes : Common_types.key_value list; + start_time_unix_nano : int64; + time_unix_nano : int64; + count : int64; + sum : float option; + scale : int32; + zero_count : int64; + positive : exponential_histogram_data_point_buckets option; + negative : exponential_histogram_data_point_buckets option; + flags : int32; + exemplars : exemplar list; + min : float option; + max : float option; + zero_threshold : float; +} + +type aggregation_temporality = + | Aggregation_temporality_unspecified + | Aggregation_temporality_delta + | Aggregation_temporality_cumulative + +type exponential_histogram = { + data_points : exponential_histogram_data_point list; + aggregation_temporality : aggregation_temporality; +} + +type histogram_data_point = { + attributes : Common_types.key_value list; + start_time_unix_nano : int64; + time_unix_nano : int64; + count : int64; + sum : float option; + bucket_counts : int64 list; + explicit_bounds : float list; + exemplars : exemplar list; + flags : int32; + min : float option; + max : float option; +} + +type histogram = { + data_points : histogram_data_point list; + aggregation_temporality : aggregation_temporality; +} + +type number_data_point_value = + | As_int of int64 + | As_double of float + +and number_data_point = { + attributes : Common_types.key_value list; + start_time_unix_nano : int64; + time_unix_nano : int64; + value : number_data_point_value; + exemplars : exemplar list; + flags : int32; +} + +type sum = { + data_points : number_data_point list; + aggregation_temporality : aggregation_temporality; + is_monotonic : bool; +} + +type gauge = { + data_points : number_data_point list; +} + +type metric_data = + | Summary of summary + | Exponential_histogram of exponential_histogram + | Histogram of histogram + | Sum of sum + | Gauge of gauge + +and metric = { + name : string; + description : string; + unit_ : string; + data : metric_data; +} + +type scope_metrics = { + scope : Common_types.instrumentation_scope option; + metrics : metric list; + schema_url : string; +} + +type resource_metrics = { + resource : Resource_types.resource option; + scope_metrics : scope_metrics list; + schema_url : string; +} + +type metrics_data = { + resource_metrics : resource_metrics list; +} + +type data_point_flags = + | Data_point_flags_do_not_use + | Data_point_flags_no_recorded_value_mask + + +(** {2 Default values} *) + +val default_summary_data_point_value_at_quantile : + ?quantile:float -> + ?value:float -> + unit -> + summary_data_point_value_at_quantile +(** [default_summary_data_point_value_at_quantile ()] is the default value for type [summary_data_point_value_at_quantile] *) + +val default_summary_data_point : + ?attributes:Common_types.key_value list -> + ?start_time_unix_nano:int64 -> + ?time_unix_nano:int64 -> + ?count:int64 -> + ?sum:float -> + ?quantile_values:summary_data_point_value_at_quantile list -> + ?flags:int32 -> + unit -> + summary_data_point +(** [default_summary_data_point ()] is the default value for type [summary_data_point] *) + +val default_summary : + ?data_points:summary_data_point list -> + unit -> + summary +(** [default_summary ()] is the default value for type [summary] *) + +val default_exponential_histogram_data_point_buckets : + ?offset:int32 -> + ?bucket_counts:int64 list -> + unit -> + exponential_histogram_data_point_buckets +(** [default_exponential_histogram_data_point_buckets ()] is the default value for type [exponential_histogram_data_point_buckets] *) + +val default_exemplar_value : unit -> exemplar_value +(** [default_exemplar_value ()] is the default value for type [exemplar_value] *) + +val default_exemplar : + ?filtered_attributes:Common_types.key_value list -> + ?time_unix_nano:int64 -> + ?value:exemplar_value -> + ?span_id:bytes -> + ?trace_id:bytes -> + unit -> + exemplar +(** [default_exemplar ()] is the default value for type [exemplar] *) + +val default_exponential_histogram_data_point : + ?attributes:Common_types.key_value list -> + ?start_time_unix_nano:int64 -> + ?time_unix_nano:int64 -> + ?count:int64 -> + ?sum:float option -> + ?scale:int32 -> + ?zero_count:int64 -> + ?positive:exponential_histogram_data_point_buckets option -> + ?negative:exponential_histogram_data_point_buckets option -> + ?flags:int32 -> + ?exemplars:exemplar list -> + ?min:float option -> + ?max:float option -> + ?zero_threshold:float -> + unit -> + exponential_histogram_data_point +(** [default_exponential_histogram_data_point ()] is the default value for type [exponential_histogram_data_point] *) + +val default_aggregation_temporality : unit -> aggregation_temporality +(** [default_aggregation_temporality ()] is the default value for type [aggregation_temporality] *) + +val default_exponential_histogram : + ?data_points:exponential_histogram_data_point list -> + ?aggregation_temporality:aggregation_temporality -> + unit -> + exponential_histogram +(** [default_exponential_histogram ()] is the default value for type [exponential_histogram] *) + +val default_histogram_data_point : + ?attributes:Common_types.key_value list -> + ?start_time_unix_nano:int64 -> + ?time_unix_nano:int64 -> + ?count:int64 -> + ?sum:float option -> + ?bucket_counts:int64 list -> + ?explicit_bounds:float list -> + ?exemplars:exemplar list -> + ?flags:int32 -> + ?min:float option -> + ?max:float option -> + unit -> + histogram_data_point +(** [default_histogram_data_point ()] is the default value for type [histogram_data_point] *) + +val default_histogram : + ?data_points:histogram_data_point list -> + ?aggregation_temporality:aggregation_temporality -> + unit -> + histogram +(** [default_histogram ()] is the default value for type [histogram] *) + +val default_number_data_point_value : unit -> number_data_point_value +(** [default_number_data_point_value ()] is the default value for type [number_data_point_value] *) + +val default_number_data_point : + ?attributes:Common_types.key_value list -> + ?start_time_unix_nano:int64 -> + ?time_unix_nano:int64 -> + ?value:number_data_point_value -> + ?exemplars:exemplar list -> + ?flags:int32 -> + unit -> + number_data_point +(** [default_number_data_point ()] is the default value for type [number_data_point] *) + +val default_sum : + ?data_points:number_data_point list -> + ?aggregation_temporality:aggregation_temporality -> + ?is_monotonic:bool -> + unit -> + sum +(** [default_sum ()] is the default value for type [sum] *) + +val default_gauge : + ?data_points:number_data_point list -> + unit -> + gauge +(** [default_gauge ()] is the default value for type [gauge] *) + +val default_metric_data : unit -> metric_data +(** [default_metric_data ()] is the default value for type [metric_data] *) + +val default_metric : + ?name:string -> + ?description:string -> + ?unit_:string -> + ?data:metric_data -> + unit -> + metric +(** [default_metric ()] is the default value for type [metric] *) + +val default_scope_metrics : + ?scope:Common_types.instrumentation_scope option -> + ?metrics:metric list -> + ?schema_url:string -> + unit -> + scope_metrics +(** [default_scope_metrics ()] is the default value for type [scope_metrics] *) + +val default_resource_metrics : + ?resource:Resource_types.resource option -> + ?scope_metrics:scope_metrics list -> + ?schema_url:string -> + unit -> + resource_metrics +(** [default_resource_metrics ()] is the default value for type [resource_metrics] *) + +val default_metrics_data : + ?resource_metrics:resource_metrics list -> + unit -> + metrics_data +(** [default_metrics_data ()] is the default value for type [metrics_data] *) + +val default_data_point_flags : unit -> data_point_flags +(** [default_data_point_flags ()] is the default value for type [data_point_flags] *) diff --git a/src/proto/resource_pb.ml b/src/proto/resource_pb.ml new file mode 100644 index 00000000..ac8a051f --- /dev/null +++ b/src/proto/resource_pb.ml @@ -0,0 +1,46 @@ +[@@@ocaml.warning "-27-30-39"] + +type resource_mutable = { + mutable attributes : Common_types.key_value list; + mutable dropped_attributes_count : int32; +} + +let default_resource_mutable () : resource_mutable = { + attributes = []; + dropped_attributes_count = 0l; +} + + +let rec decode_resource d = + let v = default_resource_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.attributes <- List.rev v.attributes; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(resource), field(1)" pk + | Some (2, Pbrt.Varint) -> begin + v.dropped_attributes_count <- Pbrt.Decoder.int32_as_varint d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(resource), field(2)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Resource_types.attributes = v.attributes; + Resource_types.dropped_attributes_count = v.dropped_attributes_count; + } : Resource_types.resource) + +let rec encode_resource (v:Resource_types.resource) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; + ) v.Resource_types.attributes; + Pbrt.Encoder.key (2, Pbrt.Varint) encoder; + Pbrt.Encoder.int32_as_varint v.Resource_types.dropped_attributes_count encoder; + () diff --git a/src/proto/resource_pb.mli b/src/proto/resource_pb.mli new file mode 100644 index 00000000..81136cbe --- /dev/null +++ b/src/proto/resource_pb.mli @@ -0,0 +1,13 @@ +(** resource.proto Binary Encoding *) + + +(** {2 Protobuf Encoding} *) + +val encode_resource : Resource_types.resource -> Pbrt.Encoder.t -> unit +(** [encode_resource v encoder] encodes [v] with the given [encoder] *) + + +(** {2 Protobuf Decoding} *) + +val decode_resource : Pbrt.Decoder.t -> Resource_types.resource +(** [decode_resource decoder] decodes a [resource] value from [decoder] *) diff --git a/src/proto/resource_pp.ml b/src/proto/resource_pp.ml new file mode 100644 index 00000000..299fcdfc --- /dev/null +++ b/src/proto/resource_pp.ml @@ -0,0 +1,8 @@ +[@@@ocaml.warning "-27-30-39"] + +let rec pp_resource fmt (v:Resource_types.resource) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Resource_types.attributes; + Pbrt.Pp.pp_record_field ~first:false "dropped_attributes_count" Pbrt.Pp.pp_int32 fmt v.Resource_types.dropped_attributes_count; + in + Pbrt.Pp.pp_brk pp_i fmt () diff --git a/src/proto/resource_pp.mli b/src/proto/resource_pp.mli new file mode 100644 index 00000000..f18aa338 --- /dev/null +++ b/src/proto/resource_pp.mli @@ -0,0 +1,8 @@ + +(** resource.proto Pretty Printing *) + + +(** {2 Formatters} *) + +val pp_resource : Format.formatter -> Resource_types.resource -> unit +(** [pp_resource v] formats v *) diff --git a/src/proto/resource_types.ml b/src/proto/resource_types.ml new file mode 100644 index 00000000..74b42266 --- /dev/null +++ b/src/proto/resource_types.ml @@ -0,0 +1,15 @@ +[@@@ocaml.warning "-27-30-39"] + + +type resource = { + attributes : Common_types.key_value list; + dropped_attributes_count : int32; +} + +let rec default_resource + ?attributes:((attributes:Common_types.key_value list) = []) + ?dropped_attributes_count:((dropped_attributes_count:int32) = 0l) + () : resource = { + attributes; + dropped_attributes_count; +} diff --git a/src/proto/resource_types.mli b/src/proto/resource_types.mli new file mode 100644 index 00000000..ff01acd2 --- /dev/null +++ b/src/proto/resource_types.mli @@ -0,0 +1,20 @@ +(** resource.proto Types *) + + + +(** {2 Types} *) + +type resource = { + attributes : Common_types.key_value list; + dropped_attributes_count : int32; +} + + +(** {2 Default values} *) + +val default_resource : + ?attributes:Common_types.key_value list -> + ?dropped_attributes_count:int32 -> + unit -> + resource +(** [default_resource ()] is the default value for type [resource] *) diff --git a/src/proto/status.proto b/src/proto/status.proto new file mode 100644 index 00000000..9812db51 --- /dev/null +++ b/src/proto/status.proto @@ -0,0 +1,10 @@ + +syntax = "proto3"; + +// from https://pkg.go.dev/google.golang.org/genproto/googleapis/rpc/status?utm_source=godoc#Status + +message Status { + int32 code = 1; + bytes message = 2; + repeated bytes details = 3; +} diff --git a/src/proto/status_pb.ml b/src/proto/status_pb.ml new file mode 100644 index 00000000..3fba0000 --- /dev/null +++ b/src/proto/status_pb.ml @@ -0,0 +1,56 @@ +[@@@ocaml.warning "-27-30-39"] + +type status_mutable = { + mutable code : int32; + mutable message : bytes; + mutable details : bytes list; +} + +let default_status_mutable () : status_mutable = { + code = 0l; + message = Bytes.create 0; + details = []; +} + + +let rec decode_status d = + let v = default_status_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.details <- List.rev v.details; + ); continue__ := false + | Some (1, Pbrt.Varint) -> begin + v.code <- Pbrt.Decoder.int32_as_varint d; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(status), field(1)" pk + | Some (2, Pbrt.Bytes) -> begin + v.message <- Pbrt.Decoder.bytes d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(status), field(2)" pk + | Some (3, Pbrt.Bytes) -> begin + v.details <- (Pbrt.Decoder.bytes d) :: v.details; + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(status), field(3)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Status_types.code = v.code; + Status_types.message = v.message; + Status_types.details = v.details; + } : Status_types.status) + +let rec encode_status (v:Status_types.status) encoder = + Pbrt.Encoder.key (1, Pbrt.Varint) encoder; + Pbrt.Encoder.int32_as_varint v.Status_types.code encoder; + Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; + Pbrt.Encoder.bytes v.Status_types.message encoder; + List.iter (fun x -> + Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; + Pbrt.Encoder.bytes x encoder; + ) v.Status_types.details; + () diff --git a/src/proto/status_pb.mli b/src/proto/status_pb.mli new file mode 100644 index 00000000..e6bcfaed --- /dev/null +++ b/src/proto/status_pb.mli @@ -0,0 +1,13 @@ +(** status.proto Binary Encoding *) + + +(** {2 Protobuf Encoding} *) + +val encode_status : Status_types.status -> Pbrt.Encoder.t -> unit +(** [encode_status v encoder] encodes [v] with the given [encoder] *) + + +(** {2 Protobuf Decoding} *) + +val decode_status : Pbrt.Decoder.t -> Status_types.status +(** [decode_status decoder] decodes a [status] value from [decoder] *) diff --git a/src/proto/status_pp.ml b/src/proto/status_pp.ml new file mode 100644 index 00000000..c5df29d9 --- /dev/null +++ b/src/proto/status_pp.ml @@ -0,0 +1,9 @@ +[@@@ocaml.warning "-27-30-39"] + +let rec pp_status fmt (v:Status_types.status) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "code" Pbrt.Pp.pp_int32 fmt v.Status_types.code; + Pbrt.Pp.pp_record_field ~first:false "message" Pbrt.Pp.pp_bytes fmt v.Status_types.message; + Pbrt.Pp.pp_record_field ~first:false "details" (Pbrt.Pp.pp_list Pbrt.Pp.pp_bytes) fmt v.Status_types.details; + in + Pbrt.Pp.pp_brk pp_i fmt () diff --git a/src/proto/status_pp.mli b/src/proto/status_pp.mli new file mode 100644 index 00000000..3333057d --- /dev/null +++ b/src/proto/status_pp.mli @@ -0,0 +1,8 @@ + +(** status.proto Pretty Printing *) + + +(** {2 Formatters} *) + +val pp_status : Format.formatter -> Status_types.status -> unit +(** [pp_status v] formats v *) diff --git a/src/proto/status_types.ml b/src/proto/status_types.ml new file mode 100644 index 00000000..14af622b --- /dev/null +++ b/src/proto/status_types.ml @@ -0,0 +1,18 @@ +[@@@ocaml.warning "-27-30-39"] + + +type status = { + code : int32; + message : bytes; + details : bytes list; +} + +let rec default_status + ?code:((code:int32) = 0l) + ?message:((message:bytes) = Bytes.create 0) + ?details:((details:bytes list) = []) + () : status = { + code; + message; + details; +} diff --git a/src/proto/status_types.mli b/src/proto/status_types.mli new file mode 100644 index 00000000..9947bc58 --- /dev/null +++ b/src/proto/status_types.mli @@ -0,0 +1,22 @@ +(** status.proto Types *) + + + +(** {2 Types} *) + +type status = { + code : int32; + message : bytes; + details : bytes list; +} + + +(** {2 Default values} *) + +val default_status : + ?code:int32 -> + ?message:bytes -> + ?details:bytes list -> + unit -> + status +(** [default_status ()] is the default value for type [status] *) diff --git a/src/proto/trace_pb.ml b/src/proto/trace_pb.ml new file mode 100644 index 00000000..1d2acfd9 --- /dev/null +++ b/src/proto/trace_pb.ml @@ -0,0 +1,547 @@ +[@@@ocaml.warning "-27-30-39"] + +type span_event_mutable = { + mutable time_unix_nano : int64; + mutable name : string; + mutable attributes : Common_types.key_value list; + mutable dropped_attributes_count : int32; +} + +let default_span_event_mutable () : span_event_mutable = { + time_unix_nano = 0L; + name = ""; + attributes = []; + dropped_attributes_count = 0l; +} + +type span_link_mutable = { + mutable trace_id : bytes; + mutable span_id : bytes; + mutable trace_state : string; + mutable attributes : Common_types.key_value list; + mutable dropped_attributes_count : int32; +} + +let default_span_link_mutable () : span_link_mutable = { + trace_id = Bytes.create 0; + span_id = Bytes.create 0; + trace_state = ""; + attributes = []; + dropped_attributes_count = 0l; +} + +type status_mutable = { + mutable message : string; + mutable code : Trace_types.status_status_code; +} + +let default_status_mutable () : status_mutable = { + message = ""; + code = Trace_types.default_status_status_code (); +} + +type span_mutable = { + mutable trace_id : bytes; + mutable span_id : bytes; + mutable trace_state : string; + mutable parent_span_id : bytes; + mutable name : string; + mutable kind : Trace_types.span_span_kind; + mutable start_time_unix_nano : int64; + mutable end_time_unix_nano : int64; + mutable attributes : Common_types.key_value list; + mutable dropped_attributes_count : int32; + mutable events : Trace_types.span_event list; + mutable dropped_events_count : int32; + mutable links : Trace_types.span_link list; + mutable dropped_links_count : int32; + mutable status : Trace_types.status option; +} + +let default_span_mutable () : span_mutable = { + trace_id = Bytes.create 0; + span_id = Bytes.create 0; + trace_state = ""; + parent_span_id = Bytes.create 0; + name = ""; + kind = Trace_types.default_span_span_kind (); + start_time_unix_nano = 0L; + end_time_unix_nano = 0L; + attributes = []; + dropped_attributes_count = 0l; + events = []; + dropped_events_count = 0l; + links = []; + dropped_links_count = 0l; + status = None; +} + +type scope_spans_mutable = { + mutable scope : Common_types.instrumentation_scope option; + mutable spans : Trace_types.span list; + mutable schema_url : string; +} + +let default_scope_spans_mutable () : scope_spans_mutable = { + scope = None; + spans = []; + schema_url = ""; +} + +type resource_spans_mutable = { + mutable resource : Resource_types.resource option; + mutable scope_spans : Trace_types.scope_spans list; + mutable schema_url : string; +} + +let default_resource_spans_mutable () : resource_spans_mutable = { + resource = None; + scope_spans = []; + schema_url = ""; +} + +type traces_data_mutable = { + mutable resource_spans : Trace_types.resource_spans list; +} + +let default_traces_data_mutable () : traces_data_mutable = { + resource_spans = []; +} + + +let rec decode_span_span_kind d = + match Pbrt.Decoder.int_as_varint d with + | 0 -> (Trace_types.Span_kind_unspecified:Trace_types.span_span_kind) + | 1 -> (Trace_types.Span_kind_internal:Trace_types.span_span_kind) + | 2 -> (Trace_types.Span_kind_server:Trace_types.span_span_kind) + | 3 -> (Trace_types.Span_kind_client:Trace_types.span_span_kind) + | 4 -> (Trace_types.Span_kind_producer:Trace_types.span_span_kind) + | 5 -> (Trace_types.Span_kind_consumer:Trace_types.span_span_kind) + | _ -> Pbrt.Decoder.malformed_variant "span_span_kind" + +let rec decode_span_event d = + let v = default_span_event_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.attributes <- List.rev v.attributes; + ); continue__ := false + | Some (1, Pbrt.Bits64) -> begin + v.time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span_event), field(1)" pk + | Some (2, Pbrt.Bytes) -> begin + v.name <- Pbrt.Decoder.string d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span_event), field(2)" pk + | Some (3, Pbrt.Bytes) -> begin + v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span_event), field(3)" pk + | Some (4, Pbrt.Varint) -> begin + v.dropped_attributes_count <- Pbrt.Decoder.int32_as_varint d; + end + | Some (4, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span_event), field(4)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Trace_types.time_unix_nano = v.time_unix_nano; + Trace_types.name = v.name; + Trace_types.attributes = v.attributes; + Trace_types.dropped_attributes_count = v.dropped_attributes_count; + } : Trace_types.span_event) + +let rec decode_span_link d = + let v = default_span_link_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.attributes <- List.rev v.attributes; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.trace_id <- Pbrt.Decoder.bytes d; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span_link), field(1)" pk + | Some (2, Pbrt.Bytes) -> begin + v.span_id <- Pbrt.Decoder.bytes d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span_link), field(2)" pk + | Some (3, Pbrt.Bytes) -> begin + v.trace_state <- Pbrt.Decoder.string d; + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span_link), field(3)" pk + | Some (4, Pbrt.Bytes) -> begin + v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; + end + | Some (4, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span_link), field(4)" pk + | Some (5, Pbrt.Varint) -> begin + v.dropped_attributes_count <- Pbrt.Decoder.int32_as_varint d; + end + | Some (5, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span_link), field(5)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Trace_types.trace_id = v.trace_id; + Trace_types.span_id = v.span_id; + Trace_types.trace_state = v.trace_state; + Trace_types.attributes = v.attributes; + Trace_types.dropped_attributes_count = v.dropped_attributes_count; + } : Trace_types.span_link) + +let rec decode_status_status_code d = + match Pbrt.Decoder.int_as_varint d with + | 0 -> (Trace_types.Status_code_unset:Trace_types.status_status_code) + | 1 -> (Trace_types.Status_code_ok:Trace_types.status_status_code) + | 2 -> (Trace_types.Status_code_error:Trace_types.status_status_code) + | _ -> Pbrt.Decoder.malformed_variant "status_status_code" + +let rec decode_status d = + let v = default_status_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + ); continue__ := false + | Some (2, Pbrt.Bytes) -> begin + v.message <- Pbrt.Decoder.string d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(status), field(2)" pk + | Some (3, Pbrt.Varint) -> begin + v.code <- decode_status_status_code d; + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(status), field(3)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Trace_types.message = v.message; + Trace_types.code = v.code; + } : Trace_types.status) + +let rec decode_span d = + let v = default_span_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.links <- List.rev v.links; + v.events <- List.rev v.events; + v.attributes <- List.rev v.attributes; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.trace_id <- Pbrt.Decoder.bytes d; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span), field(1)" pk + | Some (2, Pbrt.Bytes) -> begin + v.span_id <- Pbrt.Decoder.bytes d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span), field(2)" pk + | Some (3, Pbrt.Bytes) -> begin + v.trace_state <- Pbrt.Decoder.string d; + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span), field(3)" pk + | Some (4, Pbrt.Bytes) -> begin + v.parent_span_id <- Pbrt.Decoder.bytes d; + end + | Some (4, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span), field(4)" pk + | Some (5, Pbrt.Bytes) -> begin + v.name <- Pbrt.Decoder.string d; + end + | Some (5, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span), field(5)" pk + | Some (6, Pbrt.Varint) -> begin + v.kind <- decode_span_span_kind d; + end + | Some (6, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span), field(6)" pk + | Some (7, Pbrt.Bits64) -> begin + v.start_time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; + end + | Some (7, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span), field(7)" pk + | Some (8, Pbrt.Bits64) -> begin + v.end_time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; + end + | Some (8, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span), field(8)" pk + | Some (9, Pbrt.Bytes) -> begin + v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; + end + | Some (9, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span), field(9)" pk + | Some (10, Pbrt.Varint) -> begin + v.dropped_attributes_count <- Pbrt.Decoder.int32_as_varint d; + end + | Some (10, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span), field(10)" pk + | Some (11, Pbrt.Bytes) -> begin + v.events <- (decode_span_event (Pbrt.Decoder.nested d)) :: v.events; + end + | Some (11, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span), field(11)" pk + | Some (12, Pbrt.Varint) -> begin + v.dropped_events_count <- Pbrt.Decoder.int32_as_varint d; + end + | Some (12, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span), field(12)" pk + | Some (13, Pbrt.Bytes) -> begin + v.links <- (decode_span_link (Pbrt.Decoder.nested d)) :: v.links; + end + | Some (13, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span), field(13)" pk + | Some (14, Pbrt.Varint) -> begin + v.dropped_links_count <- Pbrt.Decoder.int32_as_varint d; + end + | Some (14, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span), field(14)" pk + | Some (15, Pbrt.Bytes) -> begin + v.status <- Some (decode_status (Pbrt.Decoder.nested d)); + end + | Some (15, pk) -> + Pbrt.Decoder.unexpected_payload "Message(span), field(15)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Trace_types.trace_id = v.trace_id; + Trace_types.span_id = v.span_id; + Trace_types.trace_state = v.trace_state; + Trace_types.parent_span_id = v.parent_span_id; + Trace_types.name = v.name; + Trace_types.kind = v.kind; + Trace_types.start_time_unix_nano = v.start_time_unix_nano; + Trace_types.end_time_unix_nano = v.end_time_unix_nano; + Trace_types.attributes = v.attributes; + Trace_types.dropped_attributes_count = v.dropped_attributes_count; + Trace_types.events = v.events; + Trace_types.dropped_events_count = v.dropped_events_count; + Trace_types.links = v.links; + Trace_types.dropped_links_count = v.dropped_links_count; + Trace_types.status = v.status; + } : Trace_types.span) + +let rec decode_scope_spans d = + let v = default_scope_spans_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.spans <- List.rev v.spans; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.scope <- Some (Common_pb.decode_instrumentation_scope (Pbrt.Decoder.nested d)); + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(scope_spans), field(1)" pk + | Some (2, Pbrt.Bytes) -> begin + v.spans <- (decode_span (Pbrt.Decoder.nested d)) :: v.spans; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(scope_spans), field(2)" pk + | Some (3, Pbrt.Bytes) -> begin + v.schema_url <- Pbrt.Decoder.string d; + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(scope_spans), field(3)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Trace_types.scope = v.scope; + Trace_types.spans = v.spans; + Trace_types.schema_url = v.schema_url; + } : Trace_types.scope_spans) + +let rec decode_resource_spans d = + let v = default_resource_spans_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.scope_spans <- List.rev v.scope_spans; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.resource <- Some (Resource_pb.decode_resource (Pbrt.Decoder.nested d)); + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(resource_spans), field(1)" pk + | Some (2, Pbrt.Bytes) -> begin + v.scope_spans <- (decode_scope_spans (Pbrt.Decoder.nested d)) :: v.scope_spans; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(resource_spans), field(2)" pk + | Some (3, Pbrt.Bytes) -> begin + v.schema_url <- Pbrt.Decoder.string d; + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(resource_spans), field(3)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Trace_types.resource = v.resource; + Trace_types.scope_spans = v.scope_spans; + Trace_types.schema_url = v.schema_url; + } : Trace_types.resource_spans) + +let rec decode_traces_data d = + let v = default_traces_data_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.resource_spans <- List.rev v.resource_spans; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.resource_spans <- (decode_resource_spans (Pbrt.Decoder.nested d)) :: v.resource_spans; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(traces_data), field(1)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Trace_types.resource_spans = v.resource_spans; + } : Trace_types.traces_data) + +let rec encode_span_span_kind (v:Trace_types.span_span_kind) encoder = + match v with + | Trace_types.Span_kind_unspecified -> Pbrt.Encoder.int_as_varint (0) encoder + | Trace_types.Span_kind_internal -> Pbrt.Encoder.int_as_varint 1 encoder + | Trace_types.Span_kind_server -> Pbrt.Encoder.int_as_varint 2 encoder + | Trace_types.Span_kind_client -> Pbrt.Encoder.int_as_varint 3 encoder + | Trace_types.Span_kind_producer -> Pbrt.Encoder.int_as_varint 4 encoder + | Trace_types.Span_kind_consumer -> Pbrt.Encoder.int_as_varint 5 encoder + +let rec encode_span_event (v:Trace_types.span_event) encoder = + Pbrt.Encoder.key (1, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Trace_types.time_unix_nano encoder; + Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; + Pbrt.Encoder.string v.Trace_types.name encoder; + List.iter (fun x -> + Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; + ) v.Trace_types.attributes; + Pbrt.Encoder.key (4, Pbrt.Varint) encoder; + Pbrt.Encoder.int32_as_varint v.Trace_types.dropped_attributes_count encoder; + () + +let rec encode_span_link (v:Trace_types.span_link) encoder = + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.bytes v.Trace_types.trace_id encoder; + Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; + Pbrt.Encoder.bytes v.Trace_types.span_id encoder; + Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; + Pbrt.Encoder.string v.Trace_types.trace_state encoder; + List.iter (fun x -> + Pbrt.Encoder.key (4, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; + ) v.Trace_types.attributes; + Pbrt.Encoder.key (5, Pbrt.Varint) encoder; + Pbrt.Encoder.int32_as_varint v.Trace_types.dropped_attributes_count encoder; + () + +let rec encode_status_status_code (v:Trace_types.status_status_code) encoder = + match v with + | Trace_types.Status_code_unset -> Pbrt.Encoder.int_as_varint (0) encoder + | Trace_types.Status_code_ok -> Pbrt.Encoder.int_as_varint 1 encoder + | Trace_types.Status_code_error -> Pbrt.Encoder.int_as_varint 2 encoder + +let rec encode_status (v:Trace_types.status) encoder = + Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; + Pbrt.Encoder.string v.Trace_types.message encoder; + Pbrt.Encoder.key (3, Pbrt.Varint) encoder; + encode_status_status_code v.Trace_types.code encoder; + () + +let rec encode_span (v:Trace_types.span) encoder = + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.bytes v.Trace_types.trace_id encoder; + Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; + Pbrt.Encoder.bytes v.Trace_types.span_id encoder; + Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; + Pbrt.Encoder.string v.Trace_types.trace_state encoder; + Pbrt.Encoder.key (4, Pbrt.Bytes) encoder; + Pbrt.Encoder.bytes v.Trace_types.parent_span_id encoder; + Pbrt.Encoder.key (5, Pbrt.Bytes) encoder; + Pbrt.Encoder.string v.Trace_types.name encoder; + Pbrt.Encoder.key (6, Pbrt.Varint) encoder; + encode_span_span_kind v.Trace_types.kind encoder; + Pbrt.Encoder.key (7, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Trace_types.start_time_unix_nano encoder; + Pbrt.Encoder.key (8, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Trace_types.end_time_unix_nano encoder; + List.iter (fun x -> + Pbrt.Encoder.key (9, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; + ) v.Trace_types.attributes; + Pbrt.Encoder.key (10, Pbrt.Varint) encoder; + Pbrt.Encoder.int32_as_varint v.Trace_types.dropped_attributes_count encoder; + List.iter (fun x -> + Pbrt.Encoder.key (11, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_span_event x) encoder; + ) v.Trace_types.events; + Pbrt.Encoder.key (12, Pbrt.Varint) encoder; + Pbrt.Encoder.int32_as_varint v.Trace_types.dropped_events_count encoder; + List.iter (fun x -> + Pbrt.Encoder.key (13, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_span_link x) encoder; + ) v.Trace_types.links; + Pbrt.Encoder.key (14, Pbrt.Varint) encoder; + Pbrt.Encoder.int32_as_varint v.Trace_types.dropped_links_count encoder; + begin match v.Trace_types.status with + | Some x -> + Pbrt.Encoder.key (15, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_status x) encoder; + | None -> (); + end; + () + +let rec encode_scope_spans (v:Trace_types.scope_spans) encoder = + begin match v.Trace_types.scope with + | Some x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (Common_pb.encode_instrumentation_scope x) encoder; + | None -> (); + end; + List.iter (fun x -> + Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_span x) encoder; + ) v.Trace_types.spans; + Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; + Pbrt.Encoder.string v.Trace_types.schema_url encoder; + () + +let rec encode_resource_spans (v:Trace_types.resource_spans) encoder = + begin match v.Trace_types.resource with + | Some x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (Resource_pb.encode_resource x) encoder; + | None -> (); + end; + List.iter (fun x -> + Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_scope_spans x) encoder; + ) v.Trace_types.scope_spans; + Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; + Pbrt.Encoder.string v.Trace_types.schema_url encoder; + () + +let rec encode_traces_data (v:Trace_types.traces_data) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_resource_spans x) encoder; + ) v.Trace_types.resource_spans; + () diff --git a/src/proto/trace_pb.mli b/src/proto/trace_pb.mli new file mode 100644 index 00000000..8e93dba6 --- /dev/null +++ b/src/proto/trace_pb.mli @@ -0,0 +1,61 @@ +(** trace.proto Binary Encoding *) + + +(** {2 Protobuf Encoding} *) + +val encode_span_span_kind : Trace_types.span_span_kind -> Pbrt.Encoder.t -> unit +(** [encode_span_span_kind v encoder] encodes [v] with the given [encoder] *) + +val encode_span_event : Trace_types.span_event -> Pbrt.Encoder.t -> unit +(** [encode_span_event v encoder] encodes [v] with the given [encoder] *) + +val encode_span_link : Trace_types.span_link -> Pbrt.Encoder.t -> unit +(** [encode_span_link v encoder] encodes [v] with the given [encoder] *) + +val encode_status_status_code : Trace_types.status_status_code -> Pbrt.Encoder.t -> unit +(** [encode_status_status_code v encoder] encodes [v] with the given [encoder] *) + +val encode_status : Trace_types.status -> Pbrt.Encoder.t -> unit +(** [encode_status v encoder] encodes [v] with the given [encoder] *) + +val encode_span : Trace_types.span -> Pbrt.Encoder.t -> unit +(** [encode_span v encoder] encodes [v] with the given [encoder] *) + +val encode_scope_spans : Trace_types.scope_spans -> Pbrt.Encoder.t -> unit +(** [encode_scope_spans v encoder] encodes [v] with the given [encoder] *) + +val encode_resource_spans : Trace_types.resource_spans -> Pbrt.Encoder.t -> unit +(** [encode_resource_spans v encoder] encodes [v] with the given [encoder] *) + +val encode_traces_data : Trace_types.traces_data -> Pbrt.Encoder.t -> unit +(** [encode_traces_data v encoder] encodes [v] with the given [encoder] *) + + +(** {2 Protobuf Decoding} *) + +val decode_span_span_kind : Pbrt.Decoder.t -> Trace_types.span_span_kind +(** [decode_span_span_kind decoder] decodes a [span_span_kind] value from [decoder] *) + +val decode_span_event : Pbrt.Decoder.t -> Trace_types.span_event +(** [decode_span_event decoder] decodes a [span_event] value from [decoder] *) + +val decode_span_link : Pbrt.Decoder.t -> Trace_types.span_link +(** [decode_span_link decoder] decodes a [span_link] value from [decoder] *) + +val decode_status_status_code : Pbrt.Decoder.t -> Trace_types.status_status_code +(** [decode_status_status_code decoder] decodes a [status_status_code] value from [decoder] *) + +val decode_status : Pbrt.Decoder.t -> Trace_types.status +(** [decode_status decoder] decodes a [status] value from [decoder] *) + +val decode_span : Pbrt.Decoder.t -> Trace_types.span +(** [decode_span decoder] decodes a [span] value from [decoder] *) + +val decode_scope_spans : Pbrt.Decoder.t -> Trace_types.scope_spans +(** [decode_scope_spans decoder] decodes a [scope_spans] value from [decoder] *) + +val decode_resource_spans : Pbrt.Decoder.t -> Trace_types.resource_spans +(** [decode_resource_spans decoder] decodes a [resource_spans] value from [decoder] *) + +val decode_traces_data : Pbrt.Decoder.t -> Trace_types.traces_data +(** [decode_traces_data decoder] decodes a [traces_data] value from [decoder] *) diff --git a/src/proto/trace_pp.ml b/src/proto/trace_pp.ml new file mode 100644 index 00000000..97faa78b --- /dev/null +++ b/src/proto/trace_pp.ml @@ -0,0 +1,84 @@ +[@@@ocaml.warning "-27-30-39"] + +let rec pp_span_span_kind fmt (v:Trace_types.span_span_kind) = + match v with + | Trace_types.Span_kind_unspecified -> Format.fprintf fmt "Span_kind_unspecified" + | Trace_types.Span_kind_internal -> Format.fprintf fmt "Span_kind_internal" + | Trace_types.Span_kind_server -> Format.fprintf fmt "Span_kind_server" + | Trace_types.Span_kind_client -> Format.fprintf fmt "Span_kind_client" + | Trace_types.Span_kind_producer -> Format.fprintf fmt "Span_kind_producer" + | Trace_types.Span_kind_consumer -> Format.fprintf fmt "Span_kind_consumer" + +let rec pp_span_event fmt (v:Trace_types.span_event) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Trace_types.time_unix_nano; + Pbrt.Pp.pp_record_field ~first:false "name" Pbrt.Pp.pp_string fmt v.Trace_types.name; + Pbrt.Pp.pp_record_field ~first:false "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Trace_types.attributes; + Pbrt.Pp.pp_record_field ~first:false "dropped_attributes_count" Pbrt.Pp.pp_int32 fmt v.Trace_types.dropped_attributes_count; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_span_link fmt (v:Trace_types.span_link) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "trace_id" Pbrt.Pp.pp_bytes fmt v.Trace_types.trace_id; + Pbrt.Pp.pp_record_field ~first:false "span_id" Pbrt.Pp.pp_bytes fmt v.Trace_types.span_id; + Pbrt.Pp.pp_record_field ~first:false "trace_state" Pbrt.Pp.pp_string fmt v.Trace_types.trace_state; + Pbrt.Pp.pp_record_field ~first:false "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Trace_types.attributes; + Pbrt.Pp.pp_record_field ~first:false "dropped_attributes_count" Pbrt.Pp.pp_int32 fmt v.Trace_types.dropped_attributes_count; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_status_status_code fmt (v:Trace_types.status_status_code) = + match v with + | Trace_types.Status_code_unset -> Format.fprintf fmt "Status_code_unset" + | Trace_types.Status_code_ok -> Format.fprintf fmt "Status_code_ok" + | Trace_types.Status_code_error -> Format.fprintf fmt "Status_code_error" + +let rec pp_status fmt (v:Trace_types.status) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "message" Pbrt.Pp.pp_string fmt v.Trace_types.message; + Pbrt.Pp.pp_record_field ~first:false "code" pp_status_status_code fmt v.Trace_types.code; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_span fmt (v:Trace_types.span) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "trace_id" Pbrt.Pp.pp_bytes fmt v.Trace_types.trace_id; + Pbrt.Pp.pp_record_field ~first:false "span_id" Pbrt.Pp.pp_bytes fmt v.Trace_types.span_id; + Pbrt.Pp.pp_record_field ~first:false "trace_state" Pbrt.Pp.pp_string fmt v.Trace_types.trace_state; + Pbrt.Pp.pp_record_field ~first:false "parent_span_id" Pbrt.Pp.pp_bytes fmt v.Trace_types.parent_span_id; + Pbrt.Pp.pp_record_field ~first:false "name" Pbrt.Pp.pp_string fmt v.Trace_types.name; + Pbrt.Pp.pp_record_field ~first:false "kind" pp_span_span_kind fmt v.Trace_types.kind; + Pbrt.Pp.pp_record_field ~first:false "start_time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Trace_types.start_time_unix_nano; + Pbrt.Pp.pp_record_field ~first:false "end_time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Trace_types.end_time_unix_nano; + Pbrt.Pp.pp_record_field ~first:false "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Trace_types.attributes; + Pbrt.Pp.pp_record_field ~first:false "dropped_attributes_count" Pbrt.Pp.pp_int32 fmt v.Trace_types.dropped_attributes_count; + Pbrt.Pp.pp_record_field ~first:false "events" (Pbrt.Pp.pp_list pp_span_event) fmt v.Trace_types.events; + Pbrt.Pp.pp_record_field ~first:false "dropped_events_count" Pbrt.Pp.pp_int32 fmt v.Trace_types.dropped_events_count; + Pbrt.Pp.pp_record_field ~first:false "links" (Pbrt.Pp.pp_list pp_span_link) fmt v.Trace_types.links; + Pbrt.Pp.pp_record_field ~first:false "dropped_links_count" Pbrt.Pp.pp_int32 fmt v.Trace_types.dropped_links_count; + Pbrt.Pp.pp_record_field ~first:false "status" (Pbrt.Pp.pp_option pp_status) fmt v.Trace_types.status; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_scope_spans fmt (v:Trace_types.scope_spans) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "scope" (Pbrt.Pp.pp_option Common_pp.pp_instrumentation_scope) fmt v.Trace_types.scope; + Pbrt.Pp.pp_record_field ~first:false "spans" (Pbrt.Pp.pp_list pp_span) fmt v.Trace_types.spans; + Pbrt.Pp.pp_record_field ~first:false "schema_url" Pbrt.Pp.pp_string fmt v.Trace_types.schema_url; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_resource_spans fmt (v:Trace_types.resource_spans) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "resource" (Pbrt.Pp.pp_option Resource_pp.pp_resource) fmt v.Trace_types.resource; + Pbrt.Pp.pp_record_field ~first:false "scope_spans" (Pbrt.Pp.pp_list pp_scope_spans) fmt v.Trace_types.scope_spans; + Pbrt.Pp.pp_record_field ~first:false "schema_url" Pbrt.Pp.pp_string fmt v.Trace_types.schema_url; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_traces_data fmt (v:Trace_types.traces_data) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "resource_spans" (Pbrt.Pp.pp_list pp_resource_spans) fmt v.Trace_types.resource_spans; + in + Pbrt.Pp.pp_brk pp_i fmt () diff --git a/src/proto/trace_pp.mli b/src/proto/trace_pp.mli new file mode 100644 index 00000000..ea7ffdc9 --- /dev/null +++ b/src/proto/trace_pp.mli @@ -0,0 +1,32 @@ + +(** trace.proto Pretty Printing *) + + +(** {2 Formatters} *) + +val pp_span_span_kind : Format.formatter -> Trace_types.span_span_kind -> unit +(** [pp_span_span_kind v] formats v *) + +val pp_span_event : Format.formatter -> Trace_types.span_event -> unit +(** [pp_span_event v] formats v *) + +val pp_span_link : Format.formatter -> Trace_types.span_link -> unit +(** [pp_span_link v] formats v *) + +val pp_status_status_code : Format.formatter -> Trace_types.status_status_code -> unit +(** [pp_status_status_code v] formats v *) + +val pp_status : Format.formatter -> Trace_types.status -> unit +(** [pp_status v] formats v *) + +val pp_span : Format.formatter -> Trace_types.span -> unit +(** [pp_span v] formats v *) + +val pp_scope_spans : Format.formatter -> Trace_types.scope_spans -> unit +(** [pp_scope_spans v] formats v *) + +val pp_resource_spans : Format.formatter -> Trace_types.resource_spans -> unit +(** [pp_resource_spans v] formats v *) + +val pp_traces_data : Format.formatter -> Trace_types.traces_data -> unit +(** [pp_traces_data v] formats v *) diff --git a/src/proto/trace_service_pb.ml b/src/proto/trace_service_pb.ml new file mode 100644 index 00000000..68733bcf --- /dev/null +++ b/src/proto/trace_service_pb.ml @@ -0,0 +1,112 @@ +[@@@ocaml.warning "-27-30-39"] + +type export_trace_service_request_mutable = { + mutable resource_spans : Trace_types.resource_spans list; +} + +let default_export_trace_service_request_mutable () : export_trace_service_request_mutable = { + resource_spans = []; +} + +type export_trace_partial_success_mutable = { + mutable rejected_spans : int64; + mutable error_message : string; +} + +let default_export_trace_partial_success_mutable () : export_trace_partial_success_mutable = { + rejected_spans = 0L; + error_message = ""; +} + +type export_trace_service_response_mutable = { + mutable partial_success : Trace_service_types.export_trace_partial_success option; +} + +let default_export_trace_service_response_mutable () : export_trace_service_response_mutable = { + partial_success = None; +} + + +let rec decode_export_trace_service_request d = + let v = default_export_trace_service_request_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.resource_spans <- List.rev v.resource_spans; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.resource_spans <- (Trace_pb.decode_resource_spans (Pbrt.Decoder.nested d)) :: v.resource_spans; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(export_trace_service_request), field(1)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Trace_service_types.resource_spans = v.resource_spans; + } : Trace_service_types.export_trace_service_request) + +let rec decode_export_trace_partial_success d = + let v = default_export_trace_partial_success_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + ); continue__ := false + | Some (1, Pbrt.Varint) -> begin + v.rejected_spans <- Pbrt.Decoder.int64_as_varint d; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(export_trace_partial_success), field(1)" pk + | Some (2, Pbrt.Bytes) -> begin + v.error_message <- Pbrt.Decoder.string d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(export_trace_partial_success), field(2)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Trace_service_types.rejected_spans = v.rejected_spans; + Trace_service_types.error_message = v.error_message; + } : Trace_service_types.export_trace_partial_success) + +let rec decode_export_trace_service_response d = + let v = default_export_trace_service_response_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.partial_success <- Some (decode_export_trace_partial_success (Pbrt.Decoder.nested d)); + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(export_trace_service_response), field(1)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Trace_service_types.partial_success = v.partial_success; + } : Trace_service_types.export_trace_service_response) + +let rec encode_export_trace_service_request (v:Trace_service_types.export_trace_service_request) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (Trace_pb.encode_resource_spans x) encoder; + ) v.Trace_service_types.resource_spans; + () + +let rec encode_export_trace_partial_success (v:Trace_service_types.export_trace_partial_success) encoder = + Pbrt.Encoder.key (1, Pbrt.Varint) encoder; + Pbrt.Encoder.int64_as_varint v.Trace_service_types.rejected_spans encoder; + Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; + Pbrt.Encoder.string v.Trace_service_types.error_message encoder; + () + +let rec encode_export_trace_service_response (v:Trace_service_types.export_trace_service_response) encoder = + begin match v.Trace_service_types.partial_success with + | Some x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_export_trace_partial_success x) encoder; + | None -> (); + end; + () diff --git a/src/proto/trace_service_pb.mli b/src/proto/trace_service_pb.mli new file mode 100644 index 00000000..afd94a31 --- /dev/null +++ b/src/proto/trace_service_pb.mli @@ -0,0 +1,25 @@ +(** trace_service.proto Binary Encoding *) + + +(** {2 Protobuf Encoding} *) + +val encode_export_trace_service_request : Trace_service_types.export_trace_service_request -> Pbrt.Encoder.t -> unit +(** [encode_export_trace_service_request v encoder] encodes [v] with the given [encoder] *) + +val encode_export_trace_partial_success : Trace_service_types.export_trace_partial_success -> Pbrt.Encoder.t -> unit +(** [encode_export_trace_partial_success v encoder] encodes [v] with the given [encoder] *) + +val encode_export_trace_service_response : Trace_service_types.export_trace_service_response -> Pbrt.Encoder.t -> unit +(** [encode_export_trace_service_response v encoder] encodes [v] with the given [encoder] *) + + +(** {2 Protobuf Decoding} *) + +val decode_export_trace_service_request : Pbrt.Decoder.t -> Trace_service_types.export_trace_service_request +(** [decode_export_trace_service_request decoder] decodes a [export_trace_service_request] value from [decoder] *) + +val decode_export_trace_partial_success : Pbrt.Decoder.t -> Trace_service_types.export_trace_partial_success +(** [decode_export_trace_partial_success decoder] decodes a [export_trace_partial_success] value from [decoder] *) + +val decode_export_trace_service_response : Pbrt.Decoder.t -> Trace_service_types.export_trace_service_response +(** [decode_export_trace_service_response decoder] decodes a [export_trace_service_response] value from [decoder] *) diff --git a/src/proto/trace_service_pp.ml b/src/proto/trace_service_pp.ml new file mode 100644 index 00000000..edc069f2 --- /dev/null +++ b/src/proto/trace_service_pp.ml @@ -0,0 +1,20 @@ +[@@@ocaml.warning "-27-30-39"] + +let rec pp_export_trace_service_request fmt (v:Trace_service_types.export_trace_service_request) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "resource_spans" (Pbrt.Pp.pp_list Trace_pp.pp_resource_spans) fmt v.Trace_service_types.resource_spans; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_export_trace_partial_success fmt (v:Trace_service_types.export_trace_partial_success) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "rejected_spans" Pbrt.Pp.pp_int64 fmt v.Trace_service_types.rejected_spans; + Pbrt.Pp.pp_record_field ~first:false "error_message" Pbrt.Pp.pp_string fmt v.Trace_service_types.error_message; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_export_trace_service_response fmt (v:Trace_service_types.export_trace_service_response) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "partial_success" (Pbrt.Pp.pp_option pp_export_trace_partial_success) fmt v.Trace_service_types.partial_success; + in + Pbrt.Pp.pp_brk pp_i fmt () diff --git a/src/proto/trace_service_pp.mli b/src/proto/trace_service_pp.mli new file mode 100644 index 00000000..63b19223 --- /dev/null +++ b/src/proto/trace_service_pp.mli @@ -0,0 +1,14 @@ + +(** trace_service.proto Pretty Printing *) + + +(** {2 Formatters} *) + +val pp_export_trace_service_request : Format.formatter -> Trace_service_types.export_trace_service_request -> unit +(** [pp_export_trace_service_request v] formats v *) + +val pp_export_trace_partial_success : Format.formatter -> Trace_service_types.export_trace_partial_success -> unit +(** [pp_export_trace_partial_success v] formats v *) + +val pp_export_trace_service_response : Format.formatter -> Trace_service_types.export_trace_service_response -> unit +(** [pp_export_trace_service_response v] formats v *) diff --git a/src/proto/trace_service_types.ml b/src/proto/trace_service_types.ml new file mode 100644 index 00000000..6476d53c --- /dev/null +++ b/src/proto/trace_service_types.ml @@ -0,0 +1,35 @@ +[@@@ocaml.warning "-27-30-39"] + + +type export_trace_service_request = { + resource_spans : Trace_types.resource_spans list; +} + +type export_trace_partial_success = { + rejected_spans : int64; + error_message : string; +} + +type export_trace_service_response = { + partial_success : export_trace_partial_success option; +} + +let rec default_export_trace_service_request + ?resource_spans:((resource_spans:Trace_types.resource_spans list) = []) + () : export_trace_service_request = { + resource_spans; +} + +let rec default_export_trace_partial_success + ?rejected_spans:((rejected_spans:int64) = 0L) + ?error_message:((error_message:string) = "") + () : export_trace_partial_success = { + rejected_spans; + error_message; +} + +let rec default_export_trace_service_response + ?partial_success:((partial_success:export_trace_partial_success option) = None) + () : export_trace_service_response = { + partial_success; +} diff --git a/src/proto/trace_service_types.mli b/src/proto/trace_service_types.mli new file mode 100644 index 00000000..e7480e77 --- /dev/null +++ b/src/proto/trace_service_types.mli @@ -0,0 +1,40 @@ +(** trace_service.proto Types *) + + + +(** {2 Types} *) + +type export_trace_service_request = { + resource_spans : Trace_types.resource_spans list; +} + +type export_trace_partial_success = { + rejected_spans : int64; + error_message : string; +} + +type export_trace_service_response = { + partial_success : export_trace_partial_success option; +} + + +(** {2 Default values} *) + +val default_export_trace_service_request : + ?resource_spans:Trace_types.resource_spans list -> + unit -> + export_trace_service_request +(** [default_export_trace_service_request ()] is the default value for type [export_trace_service_request] *) + +val default_export_trace_partial_success : + ?rejected_spans:int64 -> + ?error_message:string -> + unit -> + export_trace_partial_success +(** [default_export_trace_partial_success ()] is the default value for type [export_trace_partial_success] *) + +val default_export_trace_service_response : + ?partial_success:export_trace_partial_success option -> + unit -> + export_trace_service_response +(** [default_export_trace_service_response ()] is the default value for type [export_trace_service_response] *) diff --git a/src/proto/trace_types.ml b/src/proto/trace_types.ml new file mode 100644 index 00000000..3e51df35 --- /dev/null +++ b/src/proto/trace_types.ml @@ -0,0 +1,167 @@ +[@@@ocaml.warning "-27-30-39"] + + +type span_span_kind = + | Span_kind_unspecified + | Span_kind_internal + | Span_kind_server + | Span_kind_client + | Span_kind_producer + | Span_kind_consumer + +type span_event = { + time_unix_nano : int64; + name : string; + attributes : Common_types.key_value list; + dropped_attributes_count : int32; +} + +type span_link = { + trace_id : bytes; + span_id : bytes; + trace_state : string; + attributes : Common_types.key_value list; + dropped_attributes_count : int32; +} + +type status_status_code = + | Status_code_unset + | Status_code_ok + | Status_code_error + +type status = { + message : string; + code : status_status_code; +} + +type span = { + trace_id : bytes; + span_id : bytes; + trace_state : string; + parent_span_id : bytes; + name : string; + kind : span_span_kind; + start_time_unix_nano : int64; + end_time_unix_nano : int64; + attributes : Common_types.key_value list; + dropped_attributes_count : int32; + events : span_event list; + dropped_events_count : int32; + links : span_link list; + dropped_links_count : int32; + status : status option; +} + +type scope_spans = { + scope : Common_types.instrumentation_scope option; + spans : span list; + schema_url : string; +} + +type resource_spans = { + resource : Resource_types.resource option; + scope_spans : scope_spans list; + schema_url : string; +} + +type traces_data = { + resource_spans : resource_spans list; +} + +let rec default_span_span_kind () = (Span_kind_unspecified:span_span_kind) + +let rec default_span_event + ?time_unix_nano:((time_unix_nano:int64) = 0L) + ?name:((name:string) = "") + ?attributes:((attributes:Common_types.key_value list) = []) + ?dropped_attributes_count:((dropped_attributes_count:int32) = 0l) + () : span_event = { + time_unix_nano; + name; + attributes; + dropped_attributes_count; +} + +let rec default_span_link + ?trace_id:((trace_id:bytes) = Bytes.create 0) + ?span_id:((span_id:bytes) = Bytes.create 0) + ?trace_state:((trace_state:string) = "") + ?attributes:((attributes:Common_types.key_value list) = []) + ?dropped_attributes_count:((dropped_attributes_count:int32) = 0l) + () : span_link = { + trace_id; + span_id; + trace_state; + attributes; + dropped_attributes_count; +} + +let rec default_status_status_code () = (Status_code_unset:status_status_code) + +let rec default_status + ?message:((message:string) = "") + ?code:((code:status_status_code) = default_status_status_code ()) + () : status = { + message; + code; +} + +let rec default_span + ?trace_id:((trace_id:bytes) = Bytes.create 0) + ?span_id:((span_id:bytes) = Bytes.create 0) + ?trace_state:((trace_state:string) = "") + ?parent_span_id:((parent_span_id:bytes) = Bytes.create 0) + ?name:((name:string) = "") + ?kind:((kind:span_span_kind) = default_span_span_kind ()) + ?start_time_unix_nano:((start_time_unix_nano:int64) = 0L) + ?end_time_unix_nano:((end_time_unix_nano:int64) = 0L) + ?attributes:((attributes:Common_types.key_value list) = []) + ?dropped_attributes_count:((dropped_attributes_count:int32) = 0l) + ?events:((events:span_event list) = []) + ?dropped_events_count:((dropped_events_count:int32) = 0l) + ?links:((links:span_link list) = []) + ?dropped_links_count:((dropped_links_count:int32) = 0l) + ?status:((status:status option) = None) + () : span = { + trace_id; + span_id; + trace_state; + parent_span_id; + name; + kind; + start_time_unix_nano; + end_time_unix_nano; + attributes; + dropped_attributes_count; + events; + dropped_events_count; + links; + dropped_links_count; + status; +} + +let rec default_scope_spans + ?scope:((scope:Common_types.instrumentation_scope option) = None) + ?spans:((spans:span list) = []) + ?schema_url:((schema_url:string) = "") + () : scope_spans = { + scope; + spans; + schema_url; +} + +let rec default_resource_spans + ?resource:((resource:Resource_types.resource option) = None) + ?scope_spans:((scope_spans:scope_spans list) = []) + ?schema_url:((schema_url:string) = "") + () : resource_spans = { + resource; + scope_spans; + schema_url; +} + +let rec default_traces_data + ?resource_spans:((resource_spans:resource_spans list) = []) + () : traces_data = { + resource_spans; +} diff --git a/src/proto/trace_types.mli b/src/proto/trace_types.mli new file mode 100644 index 00000000..ef7ac6dc --- /dev/null +++ b/src/proto/trace_types.mli @@ -0,0 +1,149 @@ +(** trace.proto Types *) + + + +(** {2 Types} *) + +type span_span_kind = + | Span_kind_unspecified + | Span_kind_internal + | Span_kind_server + | Span_kind_client + | Span_kind_producer + | Span_kind_consumer + +type span_event = { + time_unix_nano : int64; + name : string; + attributes : Common_types.key_value list; + dropped_attributes_count : int32; +} + +type span_link = { + trace_id : bytes; + span_id : bytes; + trace_state : string; + attributes : Common_types.key_value list; + dropped_attributes_count : int32; +} + +type status_status_code = + | Status_code_unset + | Status_code_ok + | Status_code_error + +type status = { + message : string; + code : status_status_code; +} + +type span = { + trace_id : bytes; + span_id : bytes; + trace_state : string; + parent_span_id : bytes; + name : string; + kind : span_span_kind; + start_time_unix_nano : int64; + end_time_unix_nano : int64; + attributes : Common_types.key_value list; + dropped_attributes_count : int32; + events : span_event list; + dropped_events_count : int32; + links : span_link list; + dropped_links_count : int32; + status : status option; +} + +type scope_spans = { + scope : Common_types.instrumentation_scope option; + spans : span list; + schema_url : string; +} + +type resource_spans = { + resource : Resource_types.resource option; + scope_spans : scope_spans list; + schema_url : string; +} + +type traces_data = { + resource_spans : resource_spans list; +} + + +(** {2 Default values} *) + +val default_span_span_kind : unit -> span_span_kind +(** [default_span_span_kind ()] is the default value for type [span_span_kind] *) + +val default_span_event : + ?time_unix_nano:int64 -> + ?name:string -> + ?attributes:Common_types.key_value list -> + ?dropped_attributes_count:int32 -> + unit -> + span_event +(** [default_span_event ()] is the default value for type [span_event] *) + +val default_span_link : + ?trace_id:bytes -> + ?span_id:bytes -> + ?trace_state:string -> + ?attributes:Common_types.key_value list -> + ?dropped_attributes_count:int32 -> + unit -> + span_link +(** [default_span_link ()] is the default value for type [span_link] *) + +val default_status_status_code : unit -> status_status_code +(** [default_status_status_code ()] is the default value for type [status_status_code] *) + +val default_status : + ?message:string -> + ?code:status_status_code -> + unit -> + status +(** [default_status ()] is the default value for type [status] *) + +val default_span : + ?trace_id:bytes -> + ?span_id:bytes -> + ?trace_state:string -> + ?parent_span_id:bytes -> + ?name:string -> + ?kind:span_span_kind -> + ?start_time_unix_nano:int64 -> + ?end_time_unix_nano:int64 -> + ?attributes:Common_types.key_value list -> + ?dropped_attributes_count:int32 -> + ?events:span_event list -> + ?dropped_events_count:int32 -> + ?links:span_link list -> + ?dropped_links_count:int32 -> + ?status:status option -> + unit -> + span +(** [default_span ()] is the default value for type [span] *) + +val default_scope_spans : + ?scope:Common_types.instrumentation_scope option -> + ?spans:span list -> + ?schema_url:string -> + unit -> + scope_spans +(** [default_scope_spans ()] is the default value for type [scope_spans] *) + +val default_resource_spans : + ?resource:Resource_types.resource option -> + ?scope_spans:scope_spans list -> + ?schema_url:string -> + unit -> + resource_spans +(** [default_resource_spans ()] is the default value for type [resource_spans] *) + +val default_traces_data : + ?resource_spans:resource_spans list -> + unit -> + traces_data +(** [default_traces_data ()] is the default value for type [traces_data] *) From 16b385985608ada3f71406be573ff2aaae5512c5 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Wed, 8 Nov 2023 12:01:32 -0500 Subject: [PATCH 35/40] ocamlformat --- src/proto/.ocamlformat-ignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/proto/.ocamlformat-ignore diff --git a/src/proto/.ocamlformat-ignore b/src/proto/.ocamlformat-ignore new file mode 100644 index 00000000..72e8ffc0 --- /dev/null +++ b/src/proto/.ocamlformat-ignore @@ -0,0 +1 @@ +* From 65e9af609174469b5beb53846c546d327a7e2488 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Wed, 8 Nov 2023 12:01:50 -0500 Subject: [PATCH 36/40] format --- src/proto/dune | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/proto/dune b/src/proto/dune index a87df75d..b786b70e 100644 --- a/src/proto/dune +++ b/src/proto/dune @@ -1,4 +1,3 @@ - (library (name opentelemetry_proto) (public_name opentelemetry.proto) @@ -123,4 +122,3 @@ (action (run ocaml-protoc %{file} -I %{project_root}/vendor/opentelemetry-proto/ -ml_out . -pp -binary))) - From 705d541c3f5371b5c85f99fa90b6b3792cf45266 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Wed, 8 Nov 2023 12:11:32 -0500 Subject: [PATCH 37/40] chore: use protoc 2.4 in CI --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ff924cff..bed4addf 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -40,7 +40,7 @@ jobs: - run: opam exec -- dune build @install -p opentelemetry,opentelemetry-lwt,opentelemetry-client-ocurl,opentelemetry-cohttp-lwt,opentelemetry-client-cohttp-lwt - - run: opam pin ocaml-protoc 2.3 -y + - run: opam pin ocaml-protoc 2.4 -y - run: opam exec -- dune build @lint From 9c096411a2bd2144c6f3af34193ee865d74fb885 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Tue, 14 Nov 2023 22:42:39 -0500 Subject: [PATCH 38/40] debug git diff --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index bed4addf..47f93677 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -45,7 +45,7 @@ jobs: - run: opam exec -- dune build @lint # check that nothing changed - - run: git diff --quiet --exit-code + - run: git diff --exit-code - run: opam exec -- dune build @runtest if: ${{ matrix.os == 'ubuntu-latest' }} From 794527ebbdab69b3f2b9d4cfcc7300446c0e7aa1 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Tue, 14 Nov 2023 23:43:20 -0500 Subject: [PATCH 39/40] fix: regenerate code with a non-pinned ocaml-protoc --- src/proto/common_pb.ml | 116 ++-- src/proto/common_pb.mli | 12 +- src/proto/common_pp.ml | 24 +- src/proto/common_pp.mli | 7 +- src/proto/common_types.ml | 34 +- src/proto/common_types.mli | 32 +- src/proto/logs_pp.mli | 1 - src/proto/logs_service_pp.mli | 1 - src/proto/metrics_pb.ml | 1028 +++++++++++++++--------------- src/proto/metrics_pb.mli | 96 +-- src/proto/metrics_pp.ml | 124 ++-- src/proto/metrics_pp.mli | 49 +- src/proto/metrics_service_pp.mli | 1 - src/proto/metrics_types.ml | 274 ++++---- src/proto/metrics_types.mli | 236 +++---- src/proto/resource_pp.mli | 1 - src/proto/status_pp.mli | 1 - src/proto/trace_pp.mli | 1 - src/proto/trace_service_pp.mli | 1 - 19 files changed, 1015 insertions(+), 1024 deletions(-) diff --git a/src/proto/common_pb.ml b/src/proto/common_pb.ml index cc2f7034..07425f0f 100644 --- a/src/proto/common_pb.ml +++ b/src/proto/common_pb.ml @@ -1,5 +1,13 @@ [@@@ocaml.warning "-27-30-39"] +type array_value_mutable = { + mutable values : Common_types.any_value list; +} + +let default_array_value_mutable () : array_value_mutable = { + values = []; +} + type key_value_list_mutable = { mutable values : Common_types.key_value list; } @@ -18,14 +26,6 @@ let default_key_value_mutable () : key_value_mutable = { value = None; } -type array_value_mutable = { - mutable values : Common_types.any_value list; -} - -let default_array_value_mutable () : array_value_mutable = { - values = []; -} - type instrumentation_scope_mutable = { mutable name : string; mutable version : string; @@ -45,13 +45,13 @@ let rec decode_any_value d = let rec loop () = let ret:Common_types.any_value = match Pbrt.Decoder.key d with | None -> Pbrt.Decoder.malformed_variant "any_value" - | Some (7, _) -> (Common_types.Bytes_value (Pbrt.Decoder.bytes d) : Common_types.any_value) - | Some (6, _) -> (Common_types.Kvlist_value (decode_key_value_list (Pbrt.Decoder.nested d)) : Common_types.any_value) - | Some (5, _) -> (Common_types.Array_value (decode_array_value (Pbrt.Decoder.nested d)) : Common_types.any_value) - | Some (4, _) -> (Common_types.Double_value (Pbrt.Decoder.float_as_bits64 d) : Common_types.any_value) - | Some (3, _) -> (Common_types.Int_value (Pbrt.Decoder.int64_as_varint d) : Common_types.any_value) - | Some (2, _) -> (Common_types.Bool_value (Pbrt.Decoder.bool d) : Common_types.any_value) | Some (1, _) -> (Common_types.String_value (Pbrt.Decoder.string d) : Common_types.any_value) + | Some (2, _) -> (Common_types.Bool_value (Pbrt.Decoder.bool d) : Common_types.any_value) + | Some (3, _) -> (Common_types.Int_value (Pbrt.Decoder.int64_as_varint d) : Common_types.any_value) + | Some (4, _) -> (Common_types.Double_value (Pbrt.Decoder.float_as_bits64 d) : Common_types.any_value) + | Some (5, _) -> (Common_types.Array_value (decode_array_value (Pbrt.Decoder.nested d)) : Common_types.any_value) + | Some (6, _) -> (Common_types.Kvlist_value (decode_key_value_list (Pbrt.Decoder.nested d)) : Common_types.any_value) + | Some (7, _) -> (Common_types.Bytes_value (Pbrt.Decoder.bytes d) : Common_types.any_value) | Some (n, payload_kind) -> ( Pbrt.Decoder.skip d payload_kind; loop () @@ -61,6 +61,25 @@ let rec decode_any_value d = in loop () +and decode_array_value d = + let v = default_array_value_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.values <- List.rev v.values; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.values <- (decode_any_value (Pbrt.Decoder.nested d)) :: v.values; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(array_value), field(1)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Common_types.values = v.values; + } : Common_types.array_value) + and decode_key_value_list d = let v = default_key_value_list_mutable () in let continue__= ref true in @@ -104,25 +123,6 @@ and decode_key_value d = Common_types.value = v.value; } : Common_types.key_value) -and decode_array_value d = - let v = default_array_value_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.values <- List.rev v.values; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.values <- (decode_any_value (Pbrt.Decoder.nested d)) :: v.values; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(array_value), field(1)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Common_types.values = v.values; - } : Common_types.array_value) - let rec decode_instrumentation_scope d = let v = default_instrumentation_scope_mutable () in let continue__= ref true in @@ -162,29 +162,36 @@ let rec decode_instrumentation_scope d = let rec encode_any_value (v:Common_types.any_value) encoder = begin match v with - | Common_types.Bytes_value x -> - Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; - Pbrt.Encoder.bytes x encoder; - | Common_types.Kvlist_value x -> - Pbrt.Encoder.key (6, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_key_value_list x) encoder; - | Common_types.Array_value x -> - Pbrt.Encoder.key (5, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_array_value x) encoder; - | Common_types.Double_value x -> - Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 x encoder; - | Common_types.Int_value x -> - Pbrt.Encoder.key (3, Pbrt.Varint) encoder; - Pbrt.Encoder.int64_as_varint x encoder; - | Common_types.Bool_value x -> - Pbrt.Encoder.key (2, Pbrt.Varint) encoder; - Pbrt.Encoder.bool x encoder; | Common_types.String_value x -> Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; Pbrt.Encoder.string x encoder; + | Common_types.Bool_value x -> + Pbrt.Encoder.key (2, Pbrt.Varint) encoder; + Pbrt.Encoder.bool x encoder; + | Common_types.Int_value x -> + Pbrt.Encoder.key (3, Pbrt.Varint) encoder; + Pbrt.Encoder.int64_as_varint x encoder; + | Common_types.Double_value x -> + Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 x encoder; + | Common_types.Array_value x -> + Pbrt.Encoder.key (5, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_array_value x) encoder; + | Common_types.Kvlist_value x -> + Pbrt.Encoder.key (6, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_key_value_list x) encoder; + | Common_types.Bytes_value x -> + Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; + Pbrt.Encoder.bytes x encoder; end +and encode_array_value (v:Common_types.array_value) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_any_value x) encoder; + ) v.Common_types.values; + () + and encode_key_value_list (v:Common_types.key_value_list) encoder = List.iter (fun x -> Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; @@ -203,13 +210,6 @@ and encode_key_value (v:Common_types.key_value) encoder = end; () -and encode_array_value (v:Common_types.array_value) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_any_value x) encoder; - ) v.Common_types.values; - () - let rec encode_instrumentation_scope (v:Common_types.instrumentation_scope) encoder = Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; Pbrt.Encoder.string v.Common_types.name encoder; diff --git a/src/proto/common_pb.mli b/src/proto/common_pb.mli index a415b483..7ece8615 100644 --- a/src/proto/common_pb.mli +++ b/src/proto/common_pb.mli @@ -6,15 +6,15 @@ val encode_any_value : Common_types.any_value -> Pbrt.Encoder.t -> unit (** [encode_any_value v encoder] encodes [v] with the given [encoder] *) +val encode_array_value : Common_types.array_value -> Pbrt.Encoder.t -> unit +(** [encode_array_value v encoder] encodes [v] with the given [encoder] *) + val encode_key_value_list : Common_types.key_value_list -> Pbrt.Encoder.t -> unit (** [encode_key_value_list v encoder] encodes [v] with the given [encoder] *) val encode_key_value : Common_types.key_value -> Pbrt.Encoder.t -> unit (** [encode_key_value v encoder] encodes [v] with the given [encoder] *) -val encode_array_value : Common_types.array_value -> Pbrt.Encoder.t -> unit -(** [encode_array_value v encoder] encodes [v] with the given [encoder] *) - val encode_instrumentation_scope : Common_types.instrumentation_scope -> Pbrt.Encoder.t -> unit (** [encode_instrumentation_scope v encoder] encodes [v] with the given [encoder] *) @@ -24,14 +24,14 @@ val encode_instrumentation_scope : Common_types.instrumentation_scope -> Pbrt.En val decode_any_value : Pbrt.Decoder.t -> Common_types.any_value (** [decode_any_value decoder] decodes a [any_value] value from [decoder] *) +val decode_array_value : Pbrt.Decoder.t -> Common_types.array_value +(** [decode_array_value decoder] decodes a [array_value] value from [decoder] *) + val decode_key_value_list : Pbrt.Decoder.t -> Common_types.key_value_list (** [decode_key_value_list decoder] decodes a [key_value_list] value from [decoder] *) val decode_key_value : Pbrt.Decoder.t -> Common_types.key_value (** [decode_key_value decoder] decodes a [key_value] value from [decoder] *) -val decode_array_value : Pbrt.Decoder.t -> Common_types.array_value -(** [decode_array_value decoder] decodes a [array_value] value from [decoder] *) - val decode_instrumentation_scope : Pbrt.Decoder.t -> Common_types.instrumentation_scope (** [decode_instrumentation_scope decoder] decodes a [instrumentation_scope] value from [decoder] *) diff --git a/src/proto/common_pp.ml b/src/proto/common_pp.ml index 0bbc2906..e809bafc 100644 --- a/src/proto/common_pp.ml +++ b/src/proto/common_pp.ml @@ -2,13 +2,19 @@ let rec pp_any_value fmt (v:Common_types.any_value) = match v with - | Common_types.Bytes_value x -> Format.fprintf fmt "@[Bytes_value(@,%a)@]" Pbrt.Pp.pp_bytes x - | Common_types.Kvlist_value x -> Format.fprintf fmt "@[Kvlist_value(@,%a)@]" pp_key_value_list x - | Common_types.Array_value x -> Format.fprintf fmt "@[Array_value(@,%a)@]" pp_array_value x - | Common_types.Double_value x -> Format.fprintf fmt "@[Double_value(@,%a)@]" Pbrt.Pp.pp_float x - | Common_types.Int_value x -> Format.fprintf fmt "@[Int_value(@,%a)@]" Pbrt.Pp.pp_int64 x - | Common_types.Bool_value x -> Format.fprintf fmt "@[Bool_value(@,%a)@]" Pbrt.Pp.pp_bool x | Common_types.String_value x -> Format.fprintf fmt "@[String_value(@,%a)@]" Pbrt.Pp.pp_string x + | Common_types.Bool_value x -> Format.fprintf fmt "@[Bool_value(@,%a)@]" Pbrt.Pp.pp_bool x + | Common_types.Int_value x -> Format.fprintf fmt "@[Int_value(@,%a)@]" Pbrt.Pp.pp_int64 x + | Common_types.Double_value x -> Format.fprintf fmt "@[Double_value(@,%a)@]" Pbrt.Pp.pp_float x + | Common_types.Array_value x -> Format.fprintf fmt "@[Array_value(@,%a)@]" pp_array_value x + | Common_types.Kvlist_value x -> Format.fprintf fmt "@[Kvlist_value(@,%a)@]" pp_key_value_list x + | Common_types.Bytes_value x -> Format.fprintf fmt "@[Bytes_value(@,%a)@]" Pbrt.Pp.pp_bytes x + +and pp_array_value fmt (v:Common_types.array_value) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "values" (Pbrt.Pp.pp_list pp_any_value) fmt v.Common_types.values; + in + Pbrt.Pp.pp_brk pp_i fmt () and pp_key_value_list fmt (v:Common_types.key_value_list) = let pp_i fmt () = @@ -23,12 +29,6 @@ and pp_key_value fmt (v:Common_types.key_value) = in Pbrt.Pp.pp_brk pp_i fmt () -and pp_array_value fmt (v:Common_types.array_value) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "values" (Pbrt.Pp.pp_list pp_any_value) fmt v.Common_types.values; - in - Pbrt.Pp.pp_brk pp_i fmt () - let rec pp_instrumentation_scope fmt (v:Common_types.instrumentation_scope) = let pp_i fmt () = Pbrt.Pp.pp_record_field ~first:true "name" Pbrt.Pp.pp_string fmt v.Common_types.name; diff --git a/src/proto/common_pp.mli b/src/proto/common_pp.mli index 64c5f919..4c2fc14d 100644 --- a/src/proto/common_pp.mli +++ b/src/proto/common_pp.mli @@ -1,4 +1,3 @@ - (** common.proto Pretty Printing *) @@ -7,14 +6,14 @@ val pp_any_value : Format.formatter -> Common_types.any_value -> unit (** [pp_any_value v] formats v *) +val pp_array_value : Format.formatter -> Common_types.array_value -> unit +(** [pp_array_value v] formats v *) + val pp_key_value_list : Format.formatter -> Common_types.key_value_list -> unit (** [pp_key_value_list v] formats v *) val pp_key_value : Format.formatter -> Common_types.key_value -> unit (** [pp_key_value v] formats v *) -val pp_array_value : Format.formatter -> Common_types.array_value -> unit -(** [pp_array_value v] formats v *) - val pp_instrumentation_scope : Format.formatter -> Common_types.instrumentation_scope -> unit (** [pp_instrumentation_scope v] formats v *) diff --git a/src/proto/common_types.ml b/src/proto/common_types.ml index 3d010172..bddc9354 100644 --- a/src/proto/common_types.ml +++ b/src/proto/common_types.ml @@ -2,13 +2,17 @@ type any_value = - | Bytes_value of bytes - | Kvlist_value of key_value_list - | Array_value of array_value - | Double_value of float - | Int_value of int64 - | Bool_value of bool | String_value of string + | Bool_value of bool + | Int_value of int64 + | Double_value of float + | Array_value of array_value + | Kvlist_value of key_value_list + | Bytes_value of bytes + +and array_value = { + values : any_value list; +} and key_value_list = { values : key_value list; @@ -19,10 +23,6 @@ and key_value = { value : any_value option; } -and array_value = { - values : any_value list; -} - type instrumentation_scope = { name : string; version : string; @@ -30,7 +30,13 @@ type instrumentation_scope = { dropped_attributes_count : int32; } -let rec default_any_value () : any_value = Bytes_value (Bytes.create 0) +let rec default_any_value () : any_value = String_value ("") + +and default_array_value + ?values:((values:any_value list) = []) + () : array_value = { + values; +} and default_key_value_list ?values:((values:key_value list) = []) @@ -46,12 +52,6 @@ and default_key_value value; } -and default_array_value - ?values:((values:any_value list) = []) - () : array_value = { - values; -} - let rec default_instrumentation_scope ?name:((name:string) = "") ?version:((version:string) = "") diff --git a/src/proto/common_types.mli b/src/proto/common_types.mli index 2e72d579..8427638a 100644 --- a/src/proto/common_types.mli +++ b/src/proto/common_types.mli @@ -5,13 +5,17 @@ (** {2 Types} *) type any_value = - | Bytes_value of bytes - | Kvlist_value of key_value_list - | Array_value of array_value - | Double_value of float - | Int_value of int64 - | Bool_value of bool | String_value of string + | Bool_value of bool + | Int_value of int64 + | Double_value of float + | Array_value of array_value + | Kvlist_value of key_value_list + | Bytes_value of bytes + +and array_value = { + values : any_value list; +} and key_value_list = { values : key_value list; @@ -22,10 +26,6 @@ and key_value = { value : any_value option; } -and array_value = { - values : any_value list; -} - type instrumentation_scope = { name : string; version : string; @@ -39,6 +39,12 @@ type instrumentation_scope = { val default_any_value : unit -> any_value (** [default_any_value ()] is the default value for type [any_value] *) +val default_array_value : + ?values:any_value list -> + unit -> + array_value +(** [default_array_value ()] is the default value for type [array_value] *) + val default_key_value_list : ?values:key_value list -> unit -> @@ -52,12 +58,6 @@ val default_key_value : key_value (** [default_key_value ()] is the default value for type [key_value] *) -val default_array_value : - ?values:any_value list -> - unit -> - array_value -(** [default_array_value ()] is the default value for type [array_value] *) - val default_instrumentation_scope : ?name:string -> ?version:string -> diff --git a/src/proto/logs_pp.mli b/src/proto/logs_pp.mli index ecbc28a2..fd952524 100644 --- a/src/proto/logs_pp.mli +++ b/src/proto/logs_pp.mli @@ -1,4 +1,3 @@ - (** logs.proto Pretty Printing *) diff --git a/src/proto/logs_service_pp.mli b/src/proto/logs_service_pp.mli index 31d4613a..6aa6319f 100644 --- a/src/proto/logs_service_pp.mli +++ b/src/proto/logs_service_pp.mli @@ -1,4 +1,3 @@ - (** logs_service.proto Pretty Printing *) diff --git a/src/proto/metrics_pb.ml b/src/proto/metrics_pb.ml index 0c4ed447..d85e1e72 100644 --- a/src/proto/metrics_pb.ml +++ b/src/proto/metrics_pb.ml @@ -1,41 +1,95 @@ [@@@ocaml.warning "-27-30-39"] -type summary_data_point_value_at_quantile_mutable = { - mutable quantile : float; - mutable value : float; +type exemplar_mutable = { + mutable filtered_attributes : Common_types.key_value list; + mutable time_unix_nano : int64; + mutable value : Metrics_types.exemplar_value; + mutable span_id : bytes; + mutable trace_id : bytes; } -let default_summary_data_point_value_at_quantile_mutable () : summary_data_point_value_at_quantile_mutable = { - quantile = 0.; - value = 0.; +let default_exemplar_mutable () : exemplar_mutable = { + filtered_attributes = []; + time_unix_nano = 0L; + value = Metrics_types.As_double (0.); + span_id = Bytes.create 0; + trace_id = Bytes.create 0; } -type summary_data_point_mutable = { +type number_data_point_mutable = { + mutable attributes : Common_types.key_value list; + mutable start_time_unix_nano : int64; + mutable time_unix_nano : int64; + mutable value : Metrics_types.number_data_point_value; + mutable exemplars : Metrics_types.exemplar list; + mutable flags : int32; +} + +let default_number_data_point_mutable () : number_data_point_mutable = { + attributes = []; + start_time_unix_nano = 0L; + time_unix_nano = 0L; + value = Metrics_types.As_double (0.); + exemplars = []; + flags = 0l; +} + +type gauge_mutable = { + mutable data_points : Metrics_types.number_data_point list; +} + +let default_gauge_mutable () : gauge_mutable = { + data_points = []; +} + +type sum_mutable = { + mutable data_points : Metrics_types.number_data_point list; + mutable aggregation_temporality : Metrics_types.aggregation_temporality; + mutable is_monotonic : bool; +} + +let default_sum_mutable () : sum_mutable = { + data_points = []; + aggregation_temporality = Metrics_types.default_aggregation_temporality (); + is_monotonic = false; +} + +type histogram_data_point_mutable = { mutable attributes : Common_types.key_value list; mutable start_time_unix_nano : int64; mutable time_unix_nano : int64; mutable count : int64; - mutable sum : float; - mutable quantile_values : Metrics_types.summary_data_point_value_at_quantile list; + mutable sum : float option; + mutable bucket_counts : int64 list; + mutable explicit_bounds : float list; + mutable exemplars : Metrics_types.exemplar list; mutable flags : int32; + mutable min : float option; + mutable max : float option; } -let default_summary_data_point_mutable () : summary_data_point_mutable = { +let default_histogram_data_point_mutable () : histogram_data_point_mutable = { attributes = []; start_time_unix_nano = 0L; time_unix_nano = 0L; count = 0L; - sum = 0.; - quantile_values = []; + sum = None; + bucket_counts = []; + explicit_bounds = []; + exemplars = []; flags = 0l; + min = None; + max = None; } -type summary_mutable = { - mutable data_points : Metrics_types.summary_data_point list; +type histogram_mutable = { + mutable data_points : Metrics_types.histogram_data_point list; + mutable aggregation_temporality : Metrics_types.aggregation_temporality; } -let default_summary_mutable () : summary_mutable = { +let default_histogram_mutable () : histogram_mutable = { data_points = []; + aggregation_temporality = Metrics_types.default_aggregation_temporality (); } type exponential_histogram_data_point_buckets_mutable = { @@ -48,22 +102,6 @@ let default_exponential_histogram_data_point_buckets_mutable () : exponential_hi bucket_counts = []; } -type exemplar_mutable = { - mutable filtered_attributes : Common_types.key_value list; - mutable time_unix_nano : int64; - mutable value : Metrics_types.exemplar_value; - mutable span_id : bytes; - mutable trace_id : bytes; -} - -let default_exemplar_mutable () : exemplar_mutable = { - filtered_attributes = []; - time_unix_nano = 0L; - value = Metrics_types.As_int (0L); - span_id = Bytes.create 0; - trace_id = Bytes.create 0; -} - type exponential_histogram_data_point_mutable = { mutable attributes : Common_types.key_value list; mutable start_time_unix_nano : int64; @@ -108,79 +146,41 @@ let default_exponential_histogram_mutable () : exponential_histogram_mutable = { aggregation_temporality = Metrics_types.default_aggregation_temporality (); } -type histogram_data_point_mutable = { - mutable attributes : Common_types.key_value list; - mutable start_time_unix_nano : int64; - mutable time_unix_nano : int64; - mutable count : int64; - mutable sum : float option; - mutable bucket_counts : int64 list; - mutable explicit_bounds : float list; - mutable exemplars : Metrics_types.exemplar list; - mutable flags : int32; - mutable min : float option; - mutable max : float option; -} - -let default_histogram_data_point_mutable () : histogram_data_point_mutable = { - attributes = []; - start_time_unix_nano = 0L; - time_unix_nano = 0L; - count = 0L; - sum = None; - bucket_counts = []; - explicit_bounds = []; - exemplars = []; - flags = 0l; - min = None; - max = None; -} - -type histogram_mutable = { - mutable data_points : Metrics_types.histogram_data_point list; - mutable aggregation_temporality : Metrics_types.aggregation_temporality; +type summary_data_point_value_at_quantile_mutable = { + mutable quantile : float; + mutable value : float; } -let default_histogram_mutable () : histogram_mutable = { - data_points = []; - aggregation_temporality = Metrics_types.default_aggregation_temporality (); +let default_summary_data_point_value_at_quantile_mutable () : summary_data_point_value_at_quantile_mutable = { + quantile = 0.; + value = 0.; } -type number_data_point_mutable = { +type summary_data_point_mutable = { mutable attributes : Common_types.key_value list; mutable start_time_unix_nano : int64; mutable time_unix_nano : int64; - mutable value : Metrics_types.number_data_point_value; - mutable exemplars : Metrics_types.exemplar list; + mutable count : int64; + mutable sum : float; + mutable quantile_values : Metrics_types.summary_data_point_value_at_quantile list; mutable flags : int32; } -let default_number_data_point_mutable () : number_data_point_mutable = { +let default_summary_data_point_mutable () : summary_data_point_mutable = { attributes = []; start_time_unix_nano = 0L; time_unix_nano = 0L; - value = Metrics_types.As_int (0L); - exemplars = []; + count = 0L; + sum = 0.; + quantile_values = []; flags = 0l; } -type sum_mutable = { - mutable data_points : Metrics_types.number_data_point list; - mutable aggregation_temporality : Metrics_types.aggregation_temporality; - mutable is_monotonic : bool; -} - -let default_sum_mutable () : sum_mutable = { - data_points = []; - aggregation_temporality = Metrics_types.default_aggregation_temporality (); - is_monotonic = false; -} - -type gauge_mutable = { - mutable data_points : Metrics_types.number_data_point list; +type summary_mutable = { + mutable data_points : Metrics_types.summary_data_point list; } -let default_gauge_mutable () : gauge_mutable = { +let default_summary_mutable () : summary_mutable = { data_points = []; } @@ -195,7 +195,7 @@ let default_metric_mutable () : metric_mutable = { name = ""; description = ""; unit_ = ""; - data = Metrics_types.Summary (Metrics_types.default_summary ()); + data = Metrics_types.Gauge (Metrics_types.default_gauge ()); } type scope_metrics_mutable = { @@ -231,88 +231,141 @@ let default_metrics_data_mutable () : metrics_data_mutable = { } -let rec decode_summary_data_point_value_at_quantile d = - let v = default_summary_data_point_value_at_quantile_mutable () in +let rec decode_exemplar_value d = + let rec loop () = + let ret:Metrics_types.exemplar_value = match Pbrt.Decoder.key d with + | None -> Pbrt.Decoder.malformed_variant "exemplar_value" + | Some (3, _) -> (Metrics_types.As_double (Pbrt.Decoder.float_as_bits64 d) : Metrics_types.exemplar_value) + | Some (6, _) -> (Metrics_types.As_int (Pbrt.Decoder.int64_as_bits64 d) : Metrics_types.exemplar_value) + | Some (n, payload_kind) -> ( + Pbrt.Decoder.skip d payload_kind; + loop () + ) + in + ret + in + loop () + +and decode_exemplar d = + let v = default_exemplar_mutable () in let continue__= ref true in while !continue__ do match Pbrt.Decoder.key d with | None -> ( + v.filtered_attributes <- List.rev v.filtered_attributes; ); continue__ := false - | Some (1, Pbrt.Bits64) -> begin - v.quantile <- Pbrt.Decoder.float_as_bits64 d; + | Some (7, Pbrt.Bytes) -> begin + v.filtered_attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.filtered_attributes; end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(summary_data_point_value_at_quantile), field(1)" pk + | Some (7, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exemplar), field(7)" pk | Some (2, Pbrt.Bits64) -> begin - v.value <- Pbrt.Decoder.float_as_bits64 d; + v.time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; end | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(summary_data_point_value_at_quantile), field(2)" pk + Pbrt.Decoder.unexpected_payload "Message(exemplar), field(2)" pk + | Some (3, Pbrt.Bits64) -> begin + v.value <- Metrics_types.As_double (Pbrt.Decoder.float_as_bits64 d); + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exemplar), field(3)" pk + | Some (6, Pbrt.Bits64) -> begin + v.value <- Metrics_types.As_int (Pbrt.Decoder.int64_as_bits64 d); + end + | Some (6, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exemplar), field(6)" pk + | Some (4, Pbrt.Bytes) -> begin + v.span_id <- Pbrt.Decoder.bytes d; + end + | Some (4, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exemplar), field(4)" pk + | Some (5, Pbrt.Bytes) -> begin + v.trace_id <- Pbrt.Decoder.bytes d; + end + | Some (5, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exemplar), field(5)" pk | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind done; ({ - Metrics_types.quantile = v.quantile; + Metrics_types.filtered_attributes = v.filtered_attributes; + Metrics_types.time_unix_nano = v.time_unix_nano; Metrics_types.value = v.value; - } : Metrics_types.summary_data_point_value_at_quantile) + Metrics_types.span_id = v.span_id; + Metrics_types.trace_id = v.trace_id; + } : Metrics_types.exemplar) -let rec decode_summary_data_point d = - let v = default_summary_data_point_mutable () in +let rec decode_number_data_point_value d = + let rec loop () = + let ret:Metrics_types.number_data_point_value = match Pbrt.Decoder.key d with + | None -> Pbrt.Decoder.malformed_variant "number_data_point_value" + | Some (4, _) -> (Metrics_types.As_double (Pbrt.Decoder.float_as_bits64 d) : Metrics_types.number_data_point_value) + | Some (6, _) -> (Metrics_types.As_int (Pbrt.Decoder.int64_as_bits64 d) : Metrics_types.number_data_point_value) + | Some (n, payload_kind) -> ( + Pbrt.Decoder.skip d payload_kind; + loop () + ) + in + ret + in + loop () + +and decode_number_data_point d = + let v = default_number_data_point_mutable () in let continue__= ref true in while !continue__ do match Pbrt.Decoder.key d with | None -> ( - v.quantile_values <- List.rev v.quantile_values; + v.exemplars <- List.rev v.exemplars; v.attributes <- List.rev v.attributes; ); continue__ := false | Some (7, Pbrt.Bytes) -> begin v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; end | Some (7, pk) -> - Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(7)" pk + Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(7)" pk | Some (2, Pbrt.Bits64) -> begin v.start_time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; end | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(2)" pk + Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(2)" pk | Some (3, Pbrt.Bits64) -> begin v.time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; end | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(3)" pk + Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(3)" pk | Some (4, Pbrt.Bits64) -> begin - v.count <- Pbrt.Decoder.int64_as_bits64 d; + v.value <- Metrics_types.As_double (Pbrt.Decoder.float_as_bits64 d); end | Some (4, pk) -> - Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(4)" pk - | Some (5, Pbrt.Bits64) -> begin - v.sum <- Pbrt.Decoder.float_as_bits64 d; - end - | Some (5, pk) -> - Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(5)" pk - | Some (6, Pbrt.Bytes) -> begin - v.quantile_values <- (decode_summary_data_point_value_at_quantile (Pbrt.Decoder.nested d)) :: v.quantile_values; + Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(4)" pk + | Some (6, Pbrt.Bits64) -> begin + v.value <- Metrics_types.As_int (Pbrt.Decoder.int64_as_bits64 d); end | Some (6, pk) -> - Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(6)" pk + Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(6)" pk + | Some (5, Pbrt.Bytes) -> begin + v.exemplars <- (decode_exemplar (Pbrt.Decoder.nested d)) :: v.exemplars; + end + | Some (5, pk) -> + Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(5)" pk | Some (8, Pbrt.Varint) -> begin v.flags <- Pbrt.Decoder.int32_as_varint d; end | Some (8, pk) -> - Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(8)" pk + Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(8)" pk | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind done; ({ Metrics_types.attributes = v.attributes; Metrics_types.start_time_unix_nano = v.start_time_unix_nano; Metrics_types.time_unix_nano = v.time_unix_nano; - Metrics_types.count = v.count; - Metrics_types.sum = v.sum; - Metrics_types.quantile_values = v.quantile_values; + Metrics_types.value = v.value; + Metrics_types.exemplars = v.exemplars; Metrics_types.flags = v.flags; - } : Metrics_types.summary_data_point) + } : Metrics_types.number_data_point) -let rec decode_summary d = - let v = default_summary_mutable () in +let rec decode_gauge d = + let v = default_gauge_mutable () in let continue__= ref true in while !continue__ do match Pbrt.Decoder.key d with @@ -320,103 +373,185 @@ let rec decode_summary d = v.data_points <- List.rev v.data_points; ); continue__ := false | Some (1, Pbrt.Bytes) -> begin - v.data_points <- (decode_summary_data_point (Pbrt.Decoder.nested d)) :: v.data_points; + v.data_points <- (decode_number_data_point (Pbrt.Decoder.nested d)) :: v.data_points; end | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(summary), field(1)" pk + Pbrt.Decoder.unexpected_payload "Message(gauge), field(1)" pk | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind done; ({ Metrics_types.data_points = v.data_points; - } : Metrics_types.summary) + } : Metrics_types.gauge) -let rec decode_exponential_histogram_data_point_buckets d = - let v = default_exponential_histogram_data_point_buckets_mutable () in +let rec decode_aggregation_temporality d = + match Pbrt.Decoder.int_as_varint d with + | 0 -> (Metrics_types.Aggregation_temporality_unspecified:Metrics_types.aggregation_temporality) + | 1 -> (Metrics_types.Aggregation_temporality_delta:Metrics_types.aggregation_temporality) + | 2 -> (Metrics_types.Aggregation_temporality_cumulative:Metrics_types.aggregation_temporality) + | _ -> Pbrt.Decoder.malformed_variant "aggregation_temporality" + +let rec decode_sum d = + let v = default_sum_mutable () in let continue__= ref true in while !continue__ do match Pbrt.Decoder.key d with | None -> ( - v.bucket_counts <- List.rev v.bucket_counts; + v.data_points <- List.rev v.data_points; ); continue__ := false - | Some (1, Pbrt.Varint) -> begin - v.offset <- Pbrt.Decoder.int32_as_zigzag d; + | Some (1, Pbrt.Bytes) -> begin + v.data_points <- (decode_number_data_point (Pbrt.Decoder.nested d)) :: v.data_points; end | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point_buckets), field(1)" pk - | Some (2, Pbrt.Bytes) -> begin - v.bucket_counts <- Pbrt.Decoder.packed_fold (fun l d -> (Pbrt.Decoder.int64_as_varint d)::l) [] d; + Pbrt.Decoder.unexpected_payload "Message(sum), field(1)" pk + | Some (2, Pbrt.Varint) -> begin + v.aggregation_temporality <- decode_aggregation_temporality d; end | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point_buckets), field(2)" pk + Pbrt.Decoder.unexpected_payload "Message(sum), field(2)" pk + | Some (3, Pbrt.Varint) -> begin + v.is_monotonic <- Pbrt.Decoder.bool d; + end + | Some (3, pk) -> + Pbrt.Decoder.unexpected_payload "Message(sum), field(3)" pk | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind done; ({ - Metrics_types.offset = v.offset; - Metrics_types.bucket_counts = v.bucket_counts; - } : Metrics_types.exponential_histogram_data_point_buckets) - -let rec decode_exemplar_value d = - let rec loop () = - let ret:Metrics_types.exemplar_value = match Pbrt.Decoder.key d with - | None -> Pbrt.Decoder.malformed_variant "exemplar_value" - | Some (6, _) -> (Metrics_types.As_int (Pbrt.Decoder.int64_as_bits64 d) : Metrics_types.exemplar_value) - | Some (3, _) -> (Metrics_types.As_double (Pbrt.Decoder.float_as_bits64 d) : Metrics_types.exemplar_value) - | Some (n, payload_kind) -> ( - Pbrt.Decoder.skip d payload_kind; - loop () - ) - in - ret - in - loop () + Metrics_types.data_points = v.data_points; + Metrics_types.aggregation_temporality = v.aggregation_temporality; + Metrics_types.is_monotonic = v.is_monotonic; + } : Metrics_types.sum) -and decode_exemplar d = - let v = default_exemplar_mutable () in +let rec decode_histogram_data_point d = + let v = default_histogram_data_point_mutable () in let continue__= ref true in while !continue__ do match Pbrt.Decoder.key d with | None -> ( - v.filtered_attributes <- List.rev v.filtered_attributes; + v.exemplars <- List.rev v.exemplars; + v.explicit_bounds <- List.rev v.explicit_bounds; + v.bucket_counts <- List.rev v.bucket_counts; + v.attributes <- List.rev v.attributes; ); continue__ := false - | Some (7, Pbrt.Bytes) -> begin - v.filtered_attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.filtered_attributes; + | Some (9, Pbrt.Bytes) -> begin + v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; end - | Some (7, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exemplar), field(7)" pk + | Some (9, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(9)" pk | Some (2, Pbrt.Bits64) -> begin - v.time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; + v.start_time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; end | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exemplar), field(2)" pk - | Some (6, Pbrt.Bits64) -> begin - v.value <- Metrics_types.As_int (Pbrt.Decoder.int64_as_bits64 d); - end - | Some (6, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exemplar), field(6)" pk + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(2)" pk | Some (3, Pbrt.Bits64) -> begin - v.value <- Metrics_types.As_double (Pbrt.Decoder.float_as_bits64 d); + v.time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; end | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exemplar), field(3)" pk - | Some (4, Pbrt.Bytes) -> begin - v.span_id <- Pbrt.Decoder.bytes d; + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(3)" pk + | Some (4, Pbrt.Bits64) -> begin + v.count <- Pbrt.Decoder.int64_as_bits64 d; end | Some (4, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exemplar), field(4)" pk - | Some (5, Pbrt.Bytes) -> begin - v.trace_id <- Pbrt.Decoder.bytes d; + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(4)" pk + | Some (5, Pbrt.Bits64) -> begin + v.sum <- Some (Pbrt.Decoder.float_as_bits64 d); end | Some (5, pk) -> - Pbrt.Decoder.unexpected_payload "Message(exemplar), field(5)" pk + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(5)" pk + | Some (6, Pbrt.Bytes) -> begin + v.bucket_counts <- Pbrt.Decoder.packed_fold (fun l d -> (Pbrt.Decoder.int64_as_bits64 d)::l) [] d; + end + | Some (6, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(6)" pk + | Some (7, Pbrt.Bytes) -> begin + v.explicit_bounds <- Pbrt.Decoder.packed_fold (fun l d -> (Pbrt.Decoder.float_as_bits64 d)::l) [] d; + end + | Some (7, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(7)" pk + | Some (8, Pbrt.Bytes) -> begin + v.exemplars <- (decode_exemplar (Pbrt.Decoder.nested d)) :: v.exemplars; + end + | Some (8, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(8)" pk + | Some (10, Pbrt.Varint) -> begin + v.flags <- Pbrt.Decoder.int32_as_varint d; + end + | Some (10, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(10)" pk + | Some (11, Pbrt.Bits64) -> begin + v.min <- Some (Pbrt.Decoder.float_as_bits64 d); + end + | Some (11, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(11)" pk + | Some (12, Pbrt.Bits64) -> begin + v.max <- Some (Pbrt.Decoder.float_as_bits64 d); + end + | Some (12, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(12)" pk | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind done; ({ - Metrics_types.filtered_attributes = v.filtered_attributes; + Metrics_types.attributes = v.attributes; + Metrics_types.start_time_unix_nano = v.start_time_unix_nano; Metrics_types.time_unix_nano = v.time_unix_nano; - Metrics_types.value = v.value; - Metrics_types.span_id = v.span_id; - Metrics_types.trace_id = v.trace_id; - } : Metrics_types.exemplar) + Metrics_types.count = v.count; + Metrics_types.sum = v.sum; + Metrics_types.bucket_counts = v.bucket_counts; + Metrics_types.explicit_bounds = v.explicit_bounds; + Metrics_types.exemplars = v.exemplars; + Metrics_types.flags = v.flags; + Metrics_types.min = v.min; + Metrics_types.max = v.max; + } : Metrics_types.histogram_data_point) + +let rec decode_histogram d = + let v = default_histogram_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.data_points <- List.rev v.data_points; + ); continue__ := false + | Some (1, Pbrt.Bytes) -> begin + v.data_points <- (decode_histogram_data_point (Pbrt.Decoder.nested d)) :: v.data_points; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram), field(1)" pk + | Some (2, Pbrt.Varint) -> begin + v.aggregation_temporality <- decode_aggregation_temporality d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(histogram), field(2)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Metrics_types.data_points = v.data_points; + Metrics_types.aggregation_temporality = v.aggregation_temporality; + } : Metrics_types.histogram) + +let rec decode_exponential_histogram_data_point_buckets d = + let v = default_exponential_histogram_data_point_buckets_mutable () in + let continue__= ref true in + while !continue__ do + match Pbrt.Decoder.key d with + | None -> ( + v.bucket_counts <- List.rev v.bucket_counts; + ); continue__ := false + | Some (1, Pbrt.Varint) -> begin + v.offset <- Pbrt.Decoder.int32_as_zigzag d; + end + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point_buckets), field(1)" pk + | Some (2, Pbrt.Bytes) -> begin + v.bucket_counts <- Pbrt.Decoder.packed_fold (fun l d -> (Pbrt.Decoder.int64_as_varint d)::l) [] d; + end + | Some (2, pk) -> + Pbrt.Decoder.unexpected_payload "Message(exponential_histogram_data_point_buckets), field(2)" pk + | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind + done; + ({ + Metrics_types.offset = v.offset; + Metrics_types.bucket_counts = v.bucket_counts; + } : Metrics_types.exponential_histogram_data_point_buckets) let rec decode_exponential_histogram_data_point d = let v = default_exponential_histogram_data_point_mutable () in @@ -516,13 +651,6 @@ let rec decode_exponential_histogram_data_point d = Metrics_types.zero_threshold = v.zero_threshold; } : Metrics_types.exponential_histogram_data_point) -let rec decode_aggregation_temporality d = - match Pbrt.Decoder.int_as_varint d with - | 0 -> (Metrics_types.Aggregation_temporality_unspecified:Metrics_types.aggregation_temporality) - | 1 -> (Metrics_types.Aggregation_temporality_delta:Metrics_types.aggregation_temporality) - | 2 -> (Metrics_types.Aggregation_temporality_cumulative:Metrics_types.aggregation_temporality) - | _ -> Pbrt.Decoder.malformed_variant "aggregation_temporality" - let rec decode_exponential_histogram d = let v = default_exponential_histogram_mutable () in let continue__= ref true in @@ -548,216 +676,88 @@ let rec decode_exponential_histogram d = Metrics_types.aggregation_temporality = v.aggregation_temporality; } : Metrics_types.exponential_histogram) -let rec decode_histogram_data_point d = - let v = default_histogram_data_point_mutable () in +let rec decode_summary_data_point_value_at_quantile d = + let v = default_summary_data_point_value_at_quantile_mutable () in let continue__= ref true in while !continue__ do match Pbrt.Decoder.key d with | None -> ( - v.exemplars <- List.rev v.exemplars; - v.explicit_bounds <- List.rev v.explicit_bounds; - v.bucket_counts <- List.rev v.bucket_counts; - v.attributes <- List.rev v.attributes; ); continue__ := false - | Some (9, Pbrt.Bytes) -> begin - v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; + | Some (1, Pbrt.Bits64) -> begin + v.quantile <- Pbrt.Decoder.float_as_bits64 d; end - | Some (9, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(9)" pk + | Some (1, pk) -> + Pbrt.Decoder.unexpected_payload "Message(summary_data_point_value_at_quantile), field(1)" pk | Some (2, Pbrt.Bits64) -> begin - v.start_time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; + v.value <- Pbrt.Decoder.float_as_bits64 d; end | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(2)" pk - | Some (3, Pbrt.Bits64) -> begin - v.time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(3)" pk - | Some (4, Pbrt.Bits64) -> begin - v.count <- Pbrt.Decoder.int64_as_bits64 d; - end - | Some (4, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(4)" pk - | Some (5, Pbrt.Bits64) -> begin - v.sum <- Some (Pbrt.Decoder.float_as_bits64 d); - end - | Some (5, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(5)" pk - | Some (6, Pbrt.Bytes) -> begin - v.bucket_counts <- Pbrt.Decoder.packed_fold (fun l d -> (Pbrt.Decoder.int64_as_bits64 d)::l) [] d; - end - | Some (6, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(6)" pk - | Some (7, Pbrt.Bytes) -> begin - v.explicit_bounds <- Pbrt.Decoder.packed_fold (fun l d -> (Pbrt.Decoder.float_as_bits64 d)::l) [] d; - end - | Some (7, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(7)" pk - | Some (8, Pbrt.Bytes) -> begin - v.exemplars <- (decode_exemplar (Pbrt.Decoder.nested d)) :: v.exemplars; - end - | Some (8, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(8)" pk - | Some (10, Pbrt.Varint) -> begin - v.flags <- Pbrt.Decoder.int32_as_varint d; - end - | Some (10, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(10)" pk - | Some (11, Pbrt.Bits64) -> begin - v.min <- Some (Pbrt.Decoder.float_as_bits64 d); - end - | Some (11, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(11)" pk - | Some (12, Pbrt.Bits64) -> begin - v.max <- Some (Pbrt.Decoder.float_as_bits64 d); - end - | Some (12, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram_data_point), field(12)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Metrics_types.attributes = v.attributes; - Metrics_types.start_time_unix_nano = v.start_time_unix_nano; - Metrics_types.time_unix_nano = v.time_unix_nano; - Metrics_types.count = v.count; - Metrics_types.sum = v.sum; - Metrics_types.bucket_counts = v.bucket_counts; - Metrics_types.explicit_bounds = v.explicit_bounds; - Metrics_types.exemplars = v.exemplars; - Metrics_types.flags = v.flags; - Metrics_types.min = v.min; - Metrics_types.max = v.max; - } : Metrics_types.histogram_data_point) - -let rec decode_histogram d = - let v = default_histogram_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.data_points <- List.rev v.data_points; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.data_points <- (decode_histogram_data_point (Pbrt.Decoder.nested d)) :: v.data_points; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram), field(1)" pk - | Some (2, Pbrt.Varint) -> begin - v.aggregation_temporality <- decode_aggregation_temporality d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(histogram), field(2)" pk + Pbrt.Decoder.unexpected_payload "Message(summary_data_point_value_at_quantile), field(2)" pk | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind done; ({ - Metrics_types.data_points = v.data_points; - Metrics_types.aggregation_temporality = v.aggregation_temporality; - } : Metrics_types.histogram) - -let rec decode_number_data_point_value d = - let rec loop () = - let ret:Metrics_types.number_data_point_value = match Pbrt.Decoder.key d with - | None -> Pbrt.Decoder.malformed_variant "number_data_point_value" - | Some (6, _) -> (Metrics_types.As_int (Pbrt.Decoder.int64_as_bits64 d) : Metrics_types.number_data_point_value) - | Some (4, _) -> (Metrics_types.As_double (Pbrt.Decoder.float_as_bits64 d) : Metrics_types.number_data_point_value) - | Some (n, payload_kind) -> ( - Pbrt.Decoder.skip d payload_kind; - loop () - ) - in - ret - in - loop () + Metrics_types.quantile = v.quantile; + Metrics_types.value = v.value; + } : Metrics_types.summary_data_point_value_at_quantile) -and decode_number_data_point d = - let v = default_number_data_point_mutable () in +let rec decode_summary_data_point d = + let v = default_summary_data_point_mutable () in let continue__= ref true in while !continue__ do match Pbrt.Decoder.key d with | None -> ( - v.exemplars <- List.rev v.exemplars; + v.quantile_values <- List.rev v.quantile_values; v.attributes <- List.rev v.attributes; ); continue__ := false | Some (7, Pbrt.Bytes) -> begin v.attributes <- (Common_pb.decode_key_value (Pbrt.Decoder.nested d)) :: v.attributes; end | Some (7, pk) -> - Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(7)" pk + Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(7)" pk | Some (2, Pbrt.Bits64) -> begin v.start_time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; end | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(2)" pk + Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(2)" pk | Some (3, Pbrt.Bits64) -> begin v.time_unix_nano <- Pbrt.Decoder.int64_as_bits64 d; end | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(3)" pk - | Some (6, Pbrt.Bits64) -> begin - v.value <- Metrics_types.As_int (Pbrt.Decoder.int64_as_bits64 d); - end - | Some (6, pk) -> - Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(6)" pk + Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(3)" pk | Some (4, Pbrt.Bits64) -> begin - v.value <- Metrics_types.As_double (Pbrt.Decoder.float_as_bits64 d); + v.count <- Pbrt.Decoder.int64_as_bits64 d; end | Some (4, pk) -> - Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(4)" pk - | Some (5, Pbrt.Bytes) -> begin - v.exemplars <- (decode_exemplar (Pbrt.Decoder.nested d)) :: v.exemplars; + Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(4)" pk + | Some (5, Pbrt.Bits64) -> begin + v.sum <- Pbrt.Decoder.float_as_bits64 d; end | Some (5, pk) -> - Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(5)" pk + Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(5)" pk + | Some (6, Pbrt.Bytes) -> begin + v.quantile_values <- (decode_summary_data_point_value_at_quantile (Pbrt.Decoder.nested d)) :: v.quantile_values; + end + | Some (6, pk) -> + Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(6)" pk | Some (8, Pbrt.Varint) -> begin v.flags <- Pbrt.Decoder.int32_as_varint d; end | Some (8, pk) -> - Pbrt.Decoder.unexpected_payload "Message(number_data_point), field(8)" pk + Pbrt.Decoder.unexpected_payload "Message(summary_data_point), field(8)" pk | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind done; ({ Metrics_types.attributes = v.attributes; Metrics_types.start_time_unix_nano = v.start_time_unix_nano; Metrics_types.time_unix_nano = v.time_unix_nano; - Metrics_types.value = v.value; - Metrics_types.exemplars = v.exemplars; + Metrics_types.count = v.count; + Metrics_types.sum = v.sum; + Metrics_types.quantile_values = v.quantile_values; Metrics_types.flags = v.flags; - } : Metrics_types.number_data_point) - -let rec decode_sum d = - let v = default_sum_mutable () in - let continue__= ref true in - while !continue__ do - match Pbrt.Decoder.key d with - | None -> ( - v.data_points <- List.rev v.data_points; - ); continue__ := false - | Some (1, Pbrt.Bytes) -> begin - v.data_points <- (decode_number_data_point (Pbrt.Decoder.nested d)) :: v.data_points; - end - | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(sum), field(1)" pk - | Some (2, Pbrt.Varint) -> begin - v.aggregation_temporality <- decode_aggregation_temporality d; - end - | Some (2, pk) -> - Pbrt.Decoder.unexpected_payload "Message(sum), field(2)" pk - | Some (3, Pbrt.Varint) -> begin - v.is_monotonic <- Pbrt.Decoder.bool d; - end - | Some (3, pk) -> - Pbrt.Decoder.unexpected_payload "Message(sum), field(3)" pk - | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind - done; - ({ - Metrics_types.data_points = v.data_points; - Metrics_types.aggregation_temporality = v.aggregation_temporality; - Metrics_types.is_monotonic = v.is_monotonic; - } : Metrics_types.sum) + } : Metrics_types.summary_data_point) -let rec decode_gauge d = - let v = default_gauge_mutable () in +let rec decode_summary d = + let v = default_summary_mutable () in let continue__= ref true in while !continue__ do match Pbrt.Decoder.key d with @@ -765,25 +765,25 @@ let rec decode_gauge d = v.data_points <- List.rev v.data_points; ); continue__ := false | Some (1, Pbrt.Bytes) -> begin - v.data_points <- (decode_number_data_point (Pbrt.Decoder.nested d)) :: v.data_points; + v.data_points <- (decode_summary_data_point (Pbrt.Decoder.nested d)) :: v.data_points; end | Some (1, pk) -> - Pbrt.Decoder.unexpected_payload "Message(gauge), field(1)" pk + Pbrt.Decoder.unexpected_payload "Message(summary), field(1)" pk | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind done; ({ Metrics_types.data_points = v.data_points; - } : Metrics_types.gauge) + } : Metrics_types.summary) let rec decode_metric_data d = let rec loop () = let ret:Metrics_types.metric_data = match Pbrt.Decoder.key d with | None -> Pbrt.Decoder.malformed_variant "metric_data" - | Some (11, _) -> (Metrics_types.Summary (decode_summary (Pbrt.Decoder.nested d)) : Metrics_types.metric_data) - | Some (10, _) -> (Metrics_types.Exponential_histogram (decode_exponential_histogram (Pbrt.Decoder.nested d)) : Metrics_types.metric_data) - | Some (9, _) -> (Metrics_types.Histogram (decode_histogram (Pbrt.Decoder.nested d)) : Metrics_types.metric_data) - | Some (7, _) -> (Metrics_types.Sum (decode_sum (Pbrt.Decoder.nested d)) : Metrics_types.metric_data) | Some (5, _) -> (Metrics_types.Gauge (decode_gauge (Pbrt.Decoder.nested d)) : Metrics_types.metric_data) + | Some (7, _) -> (Metrics_types.Sum (decode_sum (Pbrt.Decoder.nested d)) : Metrics_types.metric_data) + | Some (9, _) -> (Metrics_types.Histogram (decode_histogram (Pbrt.Decoder.nested d)) : Metrics_types.metric_data) + | Some (10, _) -> (Metrics_types.Exponential_histogram (decode_exponential_histogram (Pbrt.Decoder.nested d)) : Metrics_types.metric_data) + | Some (11, _) -> (Metrics_types.Summary (decode_summary (Pbrt.Decoder.nested d)) : Metrics_types.metric_data) | Some (n, payload_kind) -> ( Pbrt.Decoder.skip d payload_kind; loop () @@ -815,31 +815,31 @@ and decode_metric d = end | Some (3, pk) -> Pbrt.Decoder.unexpected_payload "Message(metric), field(3)" pk - | Some (11, Pbrt.Bytes) -> begin - v.data <- Metrics_types.Summary (decode_summary (Pbrt.Decoder.nested d)); + | Some (5, Pbrt.Bytes) -> begin + v.data <- Metrics_types.Gauge (decode_gauge (Pbrt.Decoder.nested d)); end - | Some (11, pk) -> - Pbrt.Decoder.unexpected_payload "Message(metric), field(11)" pk - | Some (10, Pbrt.Bytes) -> begin - v.data <- Metrics_types.Exponential_histogram (decode_exponential_histogram (Pbrt.Decoder.nested d)); + | Some (5, pk) -> + Pbrt.Decoder.unexpected_payload "Message(metric), field(5)" pk + | Some (7, Pbrt.Bytes) -> begin + v.data <- Metrics_types.Sum (decode_sum (Pbrt.Decoder.nested d)); end - | Some (10, pk) -> - Pbrt.Decoder.unexpected_payload "Message(metric), field(10)" pk + | Some (7, pk) -> + Pbrt.Decoder.unexpected_payload "Message(metric), field(7)" pk | Some (9, Pbrt.Bytes) -> begin v.data <- Metrics_types.Histogram (decode_histogram (Pbrt.Decoder.nested d)); end | Some (9, pk) -> Pbrt.Decoder.unexpected_payload "Message(metric), field(9)" pk - | Some (7, Pbrt.Bytes) -> begin - v.data <- Metrics_types.Sum (decode_sum (Pbrt.Decoder.nested d)); + | Some (10, Pbrt.Bytes) -> begin + v.data <- Metrics_types.Exponential_histogram (decode_exponential_histogram (Pbrt.Decoder.nested d)); end - | Some (7, pk) -> - Pbrt.Decoder.unexpected_payload "Message(metric), field(7)" pk - | Some (5, Pbrt.Bytes) -> begin - v.data <- Metrics_types.Gauge (decode_gauge (Pbrt.Decoder.nested d)); + | Some (10, pk) -> + Pbrt.Decoder.unexpected_payload "Message(metric), field(10)" pk + | Some (11, Pbrt.Bytes) -> begin + v.data <- Metrics_types.Summary (decode_summary (Pbrt.Decoder.nested d)); end - | Some (5, pk) -> - Pbrt.Decoder.unexpected_payload "Message(metric), field(5)" pk + | Some (11, pk) -> + Pbrt.Decoder.unexpected_payload "Message(metric), field(11)" pk | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind done; ({ @@ -936,60 +936,14 @@ let rec decode_data_point_flags d = | 1 -> (Metrics_types.Data_point_flags_no_recorded_value_mask:Metrics_types.data_point_flags) | _ -> Pbrt.Decoder.malformed_variant "data_point_flags" -let rec encode_summary_data_point_value_at_quantile (v:Metrics_types.summary_data_point_value_at_quantile) encoder = - Pbrt.Encoder.key (1, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 v.Metrics_types.quantile encoder; - Pbrt.Encoder.key (2, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 v.Metrics_types.value encoder; - () - -let rec encode_summary_data_point (v:Metrics_types.summary_data_point) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; - ) v.Metrics_types.attributes; - Pbrt.Encoder.key (2, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Metrics_types.start_time_unix_nano encoder; - Pbrt.Encoder.key (3, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Metrics_types.time_unix_nano encoder; - Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Metrics_types.count encoder; - Pbrt.Encoder.key (5, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 v.Metrics_types.sum encoder; - List.iter (fun x -> - Pbrt.Encoder.key (6, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_summary_data_point_value_at_quantile x) encoder; - ) v.Metrics_types.quantile_values; - Pbrt.Encoder.key (8, Pbrt.Varint) encoder; - Pbrt.Encoder.int32_as_varint v.Metrics_types.flags encoder; - () - -let rec encode_summary (v:Metrics_types.summary) encoder = - List.iter (fun x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_summary_data_point x) encoder; - ) v.Metrics_types.data_points; - () - -let rec encode_exponential_histogram_data_point_buckets (v:Metrics_types.exponential_histogram_data_point_buckets) encoder = - Pbrt.Encoder.key (1, Pbrt.Varint) encoder; - Pbrt.Encoder.int32_as_zigzag v.Metrics_types.offset encoder; - Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (fun encoder -> - List.iter (fun x -> - Pbrt.Encoder.int64_as_varint x encoder; - ) v.Metrics_types.bucket_counts; - ) encoder; - () - let rec encode_exemplar_value (v:Metrics_types.exemplar_value) encoder = begin match v with - | Metrics_types.As_int x -> - Pbrt.Encoder.key (6, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 x encoder; | Metrics_types.As_double x -> Pbrt.Encoder.key (3, Pbrt.Bits64) encoder; Pbrt.Encoder.float_as_bits64 x encoder; + | Metrics_types.As_int x -> + Pbrt.Encoder.key (6, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 x encoder; end and encode_exemplar (v:Metrics_types.exemplar) encoder = @@ -1000,12 +954,12 @@ and encode_exemplar (v:Metrics_types.exemplar) encoder = Pbrt.Encoder.key (2, Pbrt.Bits64) encoder; Pbrt.Encoder.int64_as_bits64 v.Metrics_types.time_unix_nano encoder; begin match v.Metrics_types.value with - | Metrics_types.As_int x -> - Pbrt.Encoder.key (6, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 x encoder; | Metrics_types.As_double x -> Pbrt.Encoder.key (3, Pbrt.Bits64) encoder; Pbrt.Encoder.float_as_bits64 x encoder; + | Metrics_types.As_int x -> + Pbrt.Encoder.key (6, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 x encoder; end; Pbrt.Encoder.key (4, Pbrt.Bytes) encoder; Pbrt.Encoder.bytes v.Metrics_types.span_id encoder; @@ -1013,59 +967,46 @@ and encode_exemplar (v:Metrics_types.exemplar) encoder = Pbrt.Encoder.bytes v.Metrics_types.trace_id encoder; () -let rec encode_exponential_histogram_data_point (v:Metrics_types.exponential_histogram_data_point) encoder = +let rec encode_number_data_point_value (v:Metrics_types.number_data_point_value) encoder = + begin match v with + | Metrics_types.As_double x -> + Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 x encoder; + | Metrics_types.As_int x -> + Pbrt.Encoder.key (6, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 x encoder; + end + +and encode_number_data_point (v:Metrics_types.number_data_point) encoder = List.iter (fun x -> - Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; ) v.Metrics_types.attributes; Pbrt.Encoder.key (2, Pbrt.Bits64) encoder; Pbrt.Encoder.int64_as_bits64 v.Metrics_types.start_time_unix_nano encoder; Pbrt.Encoder.key (3, Pbrt.Bits64) encoder; Pbrt.Encoder.int64_as_bits64 v.Metrics_types.time_unix_nano encoder; - Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Metrics_types.count encoder; - begin match v.Metrics_types.sum with - | Some x -> - Pbrt.Encoder.key (5, Pbrt.Bits64) encoder; + begin match v.Metrics_types.value with + | Metrics_types.As_double x -> + Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; Pbrt.Encoder.float_as_bits64 x encoder; - | None -> (); - end; - Pbrt.Encoder.key (6, Pbrt.Varint) encoder; - Pbrt.Encoder.int32_as_zigzag v.Metrics_types.scale encoder; - Pbrt.Encoder.key (7, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 v.Metrics_types.zero_count encoder; - begin match v.Metrics_types.positive with - | Some x -> - Pbrt.Encoder.key (8, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_exponential_histogram_data_point_buckets x) encoder; - | None -> (); - end; - begin match v.Metrics_types.negative with - | Some x -> - Pbrt.Encoder.key (9, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_exponential_histogram_data_point_buckets x) encoder; - | None -> (); + | Metrics_types.As_int x -> + Pbrt.Encoder.key (6, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 x encoder; end; - Pbrt.Encoder.key (10, Pbrt.Varint) encoder; - Pbrt.Encoder.int32_as_varint v.Metrics_types.flags encoder; List.iter (fun x -> - Pbrt.Encoder.key (11, Pbrt.Bytes) encoder; + Pbrt.Encoder.key (5, Pbrt.Bytes) encoder; Pbrt.Encoder.nested (encode_exemplar x) encoder; ) v.Metrics_types.exemplars; - begin match v.Metrics_types.min with - | Some x -> - Pbrt.Encoder.key (12, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 x encoder; - | None -> (); - end; - begin match v.Metrics_types.max with - | Some x -> - Pbrt.Encoder.key (13, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 x encoder; - | None -> (); - end; - Pbrt.Encoder.key (14, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 v.Metrics_types.zero_threshold encoder; + Pbrt.Encoder.key (8, Pbrt.Varint) encoder; + Pbrt.Encoder.int32_as_varint v.Metrics_types.flags encoder; + () + +let rec encode_gauge (v:Metrics_types.gauge) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_number_data_point x) encoder; + ) v.Metrics_types.data_points; () let rec encode_aggregation_temporality (v:Metrics_types.aggregation_temporality) encoder = @@ -1074,13 +1015,15 @@ let rec encode_aggregation_temporality (v:Metrics_types.aggregation_temporality) | Metrics_types.Aggregation_temporality_delta -> Pbrt.Encoder.int_as_varint 1 encoder | Metrics_types.Aggregation_temporality_cumulative -> Pbrt.Encoder.int_as_varint 2 encoder -let rec encode_exponential_histogram (v:Metrics_types.exponential_histogram) encoder = +let rec encode_sum (v:Metrics_types.sum) encoder = List.iter (fun x -> Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_exponential_histogram_data_point x) encoder; + Pbrt.Encoder.nested (encode_number_data_point x) encoder; ) v.Metrics_types.data_points; Pbrt.Encoder.key (2, Pbrt.Varint) encoder; encode_aggregation_temporality v.Metrics_types.aggregation_temporality encoder; + Pbrt.Encoder.key (3, Pbrt.Varint) encoder; + Pbrt.Encoder.bool v.Metrics_types.is_monotonic encoder; () let rec encode_histogram_data_point (v:Metrics_types.histogram_data_point) encoder = @@ -1141,76 +1084,133 @@ let rec encode_histogram (v:Metrics_types.histogram) encoder = encode_aggregation_temporality v.Metrics_types.aggregation_temporality encoder; () -let rec encode_number_data_point_value (v:Metrics_types.number_data_point_value) encoder = - begin match v with - | Metrics_types.As_int x -> - Pbrt.Encoder.key (6, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 x encoder; - | Metrics_types.As_double x -> - Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; - Pbrt.Encoder.float_as_bits64 x encoder; - end +let rec encode_exponential_histogram_data_point_buckets (v:Metrics_types.exponential_histogram_data_point_buckets) encoder = + Pbrt.Encoder.key (1, Pbrt.Varint) encoder; + Pbrt.Encoder.int32_as_zigzag v.Metrics_types.offset encoder; + Pbrt.Encoder.key (2, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (fun encoder -> + List.iter (fun x -> + Pbrt.Encoder.int64_as_varint x encoder; + ) v.Metrics_types.bucket_counts; + ) encoder; + () -and encode_number_data_point (v:Metrics_types.number_data_point) encoder = +let rec encode_exponential_histogram_data_point (v:Metrics_types.exponential_histogram_data_point) encoder = List.iter (fun x -> - Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; + Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; ) v.Metrics_types.attributes; Pbrt.Encoder.key (2, Pbrt.Bits64) encoder; Pbrt.Encoder.int64_as_bits64 v.Metrics_types.start_time_unix_nano encoder; Pbrt.Encoder.key (3, Pbrt.Bits64) encoder; Pbrt.Encoder.int64_as_bits64 v.Metrics_types.time_unix_nano encoder; - begin match v.Metrics_types.value with - | Metrics_types.As_int x -> - Pbrt.Encoder.key (6, Pbrt.Bits64) encoder; - Pbrt.Encoder.int64_as_bits64 x encoder; - | Metrics_types.As_double x -> - Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; + Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Metrics_types.count encoder; + begin match v.Metrics_types.sum with + | Some x -> + Pbrt.Encoder.key (5, Pbrt.Bits64) encoder; Pbrt.Encoder.float_as_bits64 x encoder; + | None -> (); + end; + Pbrt.Encoder.key (6, Pbrt.Varint) encoder; + Pbrt.Encoder.int32_as_zigzag v.Metrics_types.scale encoder; + Pbrt.Encoder.key (7, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Metrics_types.zero_count encoder; + begin match v.Metrics_types.positive with + | Some x -> + Pbrt.Encoder.key (8, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_exponential_histogram_data_point_buckets x) encoder; + | None -> (); + end; + begin match v.Metrics_types.negative with + | Some x -> + Pbrt.Encoder.key (9, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_exponential_histogram_data_point_buckets x) encoder; + | None -> (); end; + Pbrt.Encoder.key (10, Pbrt.Varint) encoder; + Pbrt.Encoder.int32_as_varint v.Metrics_types.flags encoder; List.iter (fun x -> - Pbrt.Encoder.key (5, Pbrt.Bytes) encoder; + Pbrt.Encoder.key (11, Pbrt.Bytes) encoder; Pbrt.Encoder.nested (encode_exemplar x) encoder; ) v.Metrics_types.exemplars; - Pbrt.Encoder.key (8, Pbrt.Varint) encoder; - Pbrt.Encoder.int32_as_varint v.Metrics_types.flags encoder; + begin match v.Metrics_types.min with + | Some x -> + Pbrt.Encoder.key (12, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 x encoder; + | None -> (); + end; + begin match v.Metrics_types.max with + | Some x -> + Pbrt.Encoder.key (13, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 x encoder; + | None -> (); + end; + Pbrt.Encoder.key (14, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 v.Metrics_types.zero_threshold encoder; () -let rec encode_sum (v:Metrics_types.sum) encoder = +let rec encode_exponential_histogram (v:Metrics_types.exponential_histogram) encoder = List.iter (fun x -> Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_number_data_point x) encoder; + Pbrt.Encoder.nested (encode_exponential_histogram_data_point x) encoder; ) v.Metrics_types.data_points; Pbrt.Encoder.key (2, Pbrt.Varint) encoder; encode_aggregation_temporality v.Metrics_types.aggregation_temporality encoder; - Pbrt.Encoder.key (3, Pbrt.Varint) encoder; - Pbrt.Encoder.bool v.Metrics_types.is_monotonic encoder; () -let rec encode_gauge (v:Metrics_types.gauge) encoder = +let rec encode_summary_data_point_value_at_quantile (v:Metrics_types.summary_data_point_value_at_quantile) encoder = + Pbrt.Encoder.key (1, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 v.Metrics_types.quantile encoder; + Pbrt.Encoder.key (2, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 v.Metrics_types.value encoder; + () + +let rec encode_summary_data_point (v:Metrics_types.summary_data_point) encoder = + List.iter (fun x -> + Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (Common_pb.encode_key_value x) encoder; + ) v.Metrics_types.attributes; + Pbrt.Encoder.key (2, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Metrics_types.start_time_unix_nano encoder; + Pbrt.Encoder.key (3, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Metrics_types.time_unix_nano encoder; + Pbrt.Encoder.key (4, Pbrt.Bits64) encoder; + Pbrt.Encoder.int64_as_bits64 v.Metrics_types.count encoder; + Pbrt.Encoder.key (5, Pbrt.Bits64) encoder; + Pbrt.Encoder.float_as_bits64 v.Metrics_types.sum encoder; + List.iter (fun x -> + Pbrt.Encoder.key (6, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_summary_data_point_value_at_quantile x) encoder; + ) v.Metrics_types.quantile_values; + Pbrt.Encoder.key (8, Pbrt.Varint) encoder; + Pbrt.Encoder.int32_as_varint v.Metrics_types.flags encoder; + () + +let rec encode_summary (v:Metrics_types.summary) encoder = List.iter (fun x -> Pbrt.Encoder.key (1, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_number_data_point x) encoder; + Pbrt.Encoder.nested (encode_summary_data_point x) encoder; ) v.Metrics_types.data_points; () let rec encode_metric_data (v:Metrics_types.metric_data) encoder = begin match v with - | Metrics_types.Summary x -> - Pbrt.Encoder.key (11, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_summary x) encoder; - | Metrics_types.Exponential_histogram x -> - Pbrt.Encoder.key (10, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_exponential_histogram x) encoder; - | Metrics_types.Histogram x -> - Pbrt.Encoder.key (9, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_histogram x) encoder; - | Metrics_types.Sum x -> - Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_sum x) encoder; | Metrics_types.Gauge x -> Pbrt.Encoder.key (5, Pbrt.Bytes) encoder; Pbrt.Encoder.nested (encode_gauge x) encoder; + | Metrics_types.Sum x -> + Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_sum x) encoder; + | Metrics_types.Histogram x -> + Pbrt.Encoder.key (9, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_histogram x) encoder; + | Metrics_types.Exponential_histogram x -> + Pbrt.Encoder.key (10, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_exponential_histogram x) encoder; + | Metrics_types.Summary x -> + Pbrt.Encoder.key (11, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_summary x) encoder; end and encode_metric (v:Metrics_types.metric) encoder = @@ -1221,21 +1221,21 @@ and encode_metric (v:Metrics_types.metric) encoder = Pbrt.Encoder.key (3, Pbrt.Bytes) encoder; Pbrt.Encoder.string v.Metrics_types.unit_ encoder; begin match v.Metrics_types.data with - | Metrics_types.Summary x -> - Pbrt.Encoder.key (11, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_summary x) encoder; - | Metrics_types.Exponential_histogram x -> - Pbrt.Encoder.key (10, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_exponential_histogram x) encoder; - | Metrics_types.Histogram x -> - Pbrt.Encoder.key (9, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_histogram x) encoder; - | Metrics_types.Sum x -> - Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; - Pbrt.Encoder.nested (encode_sum x) encoder; | Metrics_types.Gauge x -> Pbrt.Encoder.key (5, Pbrt.Bytes) encoder; Pbrt.Encoder.nested (encode_gauge x) encoder; + | Metrics_types.Sum x -> + Pbrt.Encoder.key (7, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_sum x) encoder; + | Metrics_types.Histogram x -> + Pbrt.Encoder.key (9, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_histogram x) encoder; + | Metrics_types.Exponential_histogram x -> + Pbrt.Encoder.key (10, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_exponential_histogram x) encoder; + | Metrics_types.Summary x -> + Pbrt.Encoder.key (11, Pbrt.Bytes) encoder; + Pbrt.Encoder.nested (encode_summary x) encoder; end; () diff --git a/src/proto/metrics_pb.mli b/src/proto/metrics_pb.mli index 8184e069..6393cedd 100644 --- a/src/proto/metrics_pb.mli +++ b/src/proto/metrics_pb.mli @@ -3,32 +3,26 @@ (** {2 Protobuf Encoding} *) -val encode_summary_data_point_value_at_quantile : Metrics_types.summary_data_point_value_at_quantile -> Pbrt.Encoder.t -> unit -(** [encode_summary_data_point_value_at_quantile v encoder] encodes [v] with the given [encoder] *) - -val encode_summary_data_point : Metrics_types.summary_data_point -> Pbrt.Encoder.t -> unit -(** [encode_summary_data_point v encoder] encodes [v] with the given [encoder] *) - -val encode_summary : Metrics_types.summary -> Pbrt.Encoder.t -> unit -(** [encode_summary v encoder] encodes [v] with the given [encoder] *) - -val encode_exponential_histogram_data_point_buckets : Metrics_types.exponential_histogram_data_point_buckets -> Pbrt.Encoder.t -> unit -(** [encode_exponential_histogram_data_point_buckets v encoder] encodes [v] with the given [encoder] *) - val encode_exemplar_value : Metrics_types.exemplar_value -> Pbrt.Encoder.t -> unit (** [encode_exemplar_value v encoder] encodes [v] with the given [encoder] *) val encode_exemplar : Metrics_types.exemplar -> Pbrt.Encoder.t -> unit (** [encode_exemplar v encoder] encodes [v] with the given [encoder] *) -val encode_exponential_histogram_data_point : Metrics_types.exponential_histogram_data_point -> Pbrt.Encoder.t -> unit -(** [encode_exponential_histogram_data_point v encoder] encodes [v] with the given [encoder] *) +val encode_number_data_point_value : Metrics_types.number_data_point_value -> Pbrt.Encoder.t -> unit +(** [encode_number_data_point_value v encoder] encodes [v] with the given [encoder] *) + +val encode_number_data_point : Metrics_types.number_data_point -> Pbrt.Encoder.t -> unit +(** [encode_number_data_point v encoder] encodes [v] with the given [encoder] *) + +val encode_gauge : Metrics_types.gauge -> Pbrt.Encoder.t -> unit +(** [encode_gauge v encoder] encodes [v] with the given [encoder] *) val encode_aggregation_temporality : Metrics_types.aggregation_temporality -> Pbrt.Encoder.t -> unit (** [encode_aggregation_temporality v encoder] encodes [v] with the given [encoder] *) -val encode_exponential_histogram : Metrics_types.exponential_histogram -> Pbrt.Encoder.t -> unit -(** [encode_exponential_histogram v encoder] encodes [v] with the given [encoder] *) +val encode_sum : Metrics_types.sum -> Pbrt.Encoder.t -> unit +(** [encode_sum v encoder] encodes [v] with the given [encoder] *) val encode_histogram_data_point : Metrics_types.histogram_data_point -> Pbrt.Encoder.t -> unit (** [encode_histogram_data_point v encoder] encodes [v] with the given [encoder] *) @@ -36,17 +30,23 @@ val encode_histogram_data_point : Metrics_types.histogram_data_point -> Pbrt.Enc val encode_histogram : Metrics_types.histogram -> Pbrt.Encoder.t -> unit (** [encode_histogram v encoder] encodes [v] with the given [encoder] *) -val encode_number_data_point_value : Metrics_types.number_data_point_value -> Pbrt.Encoder.t -> unit -(** [encode_number_data_point_value v encoder] encodes [v] with the given [encoder] *) +val encode_exponential_histogram_data_point_buckets : Metrics_types.exponential_histogram_data_point_buckets -> Pbrt.Encoder.t -> unit +(** [encode_exponential_histogram_data_point_buckets v encoder] encodes [v] with the given [encoder] *) -val encode_number_data_point : Metrics_types.number_data_point -> Pbrt.Encoder.t -> unit -(** [encode_number_data_point v encoder] encodes [v] with the given [encoder] *) +val encode_exponential_histogram_data_point : Metrics_types.exponential_histogram_data_point -> Pbrt.Encoder.t -> unit +(** [encode_exponential_histogram_data_point v encoder] encodes [v] with the given [encoder] *) -val encode_sum : Metrics_types.sum -> Pbrt.Encoder.t -> unit -(** [encode_sum v encoder] encodes [v] with the given [encoder] *) +val encode_exponential_histogram : Metrics_types.exponential_histogram -> Pbrt.Encoder.t -> unit +(** [encode_exponential_histogram v encoder] encodes [v] with the given [encoder] *) -val encode_gauge : Metrics_types.gauge -> Pbrt.Encoder.t -> unit -(** [encode_gauge v encoder] encodes [v] with the given [encoder] *) +val encode_summary_data_point_value_at_quantile : Metrics_types.summary_data_point_value_at_quantile -> Pbrt.Encoder.t -> unit +(** [encode_summary_data_point_value_at_quantile v encoder] encodes [v] with the given [encoder] *) + +val encode_summary_data_point : Metrics_types.summary_data_point -> Pbrt.Encoder.t -> unit +(** [encode_summary_data_point v encoder] encodes [v] with the given [encoder] *) + +val encode_summary : Metrics_types.summary -> Pbrt.Encoder.t -> unit +(** [encode_summary v encoder] encodes [v] with the given [encoder] *) val encode_metric_data : Metrics_types.metric_data -> Pbrt.Encoder.t -> unit (** [encode_metric_data v encoder] encodes [v] with the given [encoder] *) @@ -69,32 +69,26 @@ val encode_data_point_flags : Metrics_types.data_point_flags -> Pbrt.Encoder.t - (** {2 Protobuf Decoding} *) -val decode_summary_data_point_value_at_quantile : Pbrt.Decoder.t -> Metrics_types.summary_data_point_value_at_quantile -(** [decode_summary_data_point_value_at_quantile decoder] decodes a [summary_data_point_value_at_quantile] value from [decoder] *) - -val decode_summary_data_point : Pbrt.Decoder.t -> Metrics_types.summary_data_point -(** [decode_summary_data_point decoder] decodes a [summary_data_point] value from [decoder] *) - -val decode_summary : Pbrt.Decoder.t -> Metrics_types.summary -(** [decode_summary decoder] decodes a [summary] value from [decoder] *) - -val decode_exponential_histogram_data_point_buckets : Pbrt.Decoder.t -> Metrics_types.exponential_histogram_data_point_buckets -(** [decode_exponential_histogram_data_point_buckets decoder] decodes a [exponential_histogram_data_point_buckets] value from [decoder] *) - val decode_exemplar_value : Pbrt.Decoder.t -> Metrics_types.exemplar_value (** [decode_exemplar_value decoder] decodes a [exemplar_value] value from [decoder] *) val decode_exemplar : Pbrt.Decoder.t -> Metrics_types.exemplar (** [decode_exemplar decoder] decodes a [exemplar] value from [decoder] *) -val decode_exponential_histogram_data_point : Pbrt.Decoder.t -> Metrics_types.exponential_histogram_data_point -(** [decode_exponential_histogram_data_point decoder] decodes a [exponential_histogram_data_point] value from [decoder] *) +val decode_number_data_point_value : Pbrt.Decoder.t -> Metrics_types.number_data_point_value +(** [decode_number_data_point_value decoder] decodes a [number_data_point_value] value from [decoder] *) + +val decode_number_data_point : Pbrt.Decoder.t -> Metrics_types.number_data_point +(** [decode_number_data_point decoder] decodes a [number_data_point] value from [decoder] *) + +val decode_gauge : Pbrt.Decoder.t -> Metrics_types.gauge +(** [decode_gauge decoder] decodes a [gauge] value from [decoder] *) val decode_aggregation_temporality : Pbrt.Decoder.t -> Metrics_types.aggregation_temporality (** [decode_aggregation_temporality decoder] decodes a [aggregation_temporality] value from [decoder] *) -val decode_exponential_histogram : Pbrt.Decoder.t -> Metrics_types.exponential_histogram -(** [decode_exponential_histogram decoder] decodes a [exponential_histogram] value from [decoder] *) +val decode_sum : Pbrt.Decoder.t -> Metrics_types.sum +(** [decode_sum decoder] decodes a [sum] value from [decoder] *) val decode_histogram_data_point : Pbrt.Decoder.t -> Metrics_types.histogram_data_point (** [decode_histogram_data_point decoder] decodes a [histogram_data_point] value from [decoder] *) @@ -102,17 +96,23 @@ val decode_histogram_data_point : Pbrt.Decoder.t -> Metrics_types.histogram_data val decode_histogram : Pbrt.Decoder.t -> Metrics_types.histogram (** [decode_histogram decoder] decodes a [histogram] value from [decoder] *) -val decode_number_data_point_value : Pbrt.Decoder.t -> Metrics_types.number_data_point_value -(** [decode_number_data_point_value decoder] decodes a [number_data_point_value] value from [decoder] *) +val decode_exponential_histogram_data_point_buckets : Pbrt.Decoder.t -> Metrics_types.exponential_histogram_data_point_buckets +(** [decode_exponential_histogram_data_point_buckets decoder] decodes a [exponential_histogram_data_point_buckets] value from [decoder] *) -val decode_number_data_point : Pbrt.Decoder.t -> Metrics_types.number_data_point -(** [decode_number_data_point decoder] decodes a [number_data_point] value from [decoder] *) +val decode_exponential_histogram_data_point : Pbrt.Decoder.t -> Metrics_types.exponential_histogram_data_point +(** [decode_exponential_histogram_data_point decoder] decodes a [exponential_histogram_data_point] value from [decoder] *) -val decode_sum : Pbrt.Decoder.t -> Metrics_types.sum -(** [decode_sum decoder] decodes a [sum] value from [decoder] *) +val decode_exponential_histogram : Pbrt.Decoder.t -> Metrics_types.exponential_histogram +(** [decode_exponential_histogram decoder] decodes a [exponential_histogram] value from [decoder] *) -val decode_gauge : Pbrt.Decoder.t -> Metrics_types.gauge -(** [decode_gauge decoder] decodes a [gauge] value from [decoder] *) +val decode_summary_data_point_value_at_quantile : Pbrt.Decoder.t -> Metrics_types.summary_data_point_value_at_quantile +(** [decode_summary_data_point_value_at_quantile decoder] decodes a [summary_data_point_value_at_quantile] value from [decoder] *) + +val decode_summary_data_point : Pbrt.Decoder.t -> Metrics_types.summary_data_point +(** [decode_summary_data_point decoder] decodes a [summary_data_point] value from [decoder] *) + +val decode_summary : Pbrt.Decoder.t -> Metrics_types.summary +(** [decode_summary decoder] decodes a [summary] value from [decoder] *) val decode_metric_data : Pbrt.Decoder.t -> Metrics_types.metric_data (** [decode_metric_data decoder] decodes a [metric_data] value from [decoder] *) diff --git a/src/proto/metrics_pp.ml b/src/proto/metrics_pp.ml index 974c2f7e..838343ff 100644 --- a/src/proto/metrics_pp.ml +++ b/src/proto/metrics_pp.ml @@ -1,41 +1,9 @@ [@@@ocaml.warning "-27-30-39"] -let rec pp_summary_data_point_value_at_quantile fmt (v:Metrics_types.summary_data_point_value_at_quantile) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "quantile" Pbrt.Pp.pp_float fmt v.Metrics_types.quantile; - Pbrt.Pp.pp_record_field ~first:false "value" Pbrt.Pp.pp_float fmt v.Metrics_types.value; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_summary_data_point fmt (v:Metrics_types.summary_data_point) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Metrics_types.attributes; - Pbrt.Pp.pp_record_field ~first:false "start_time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.start_time_unix_nano; - Pbrt.Pp.pp_record_field ~first:false "time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.time_unix_nano; - Pbrt.Pp.pp_record_field ~first:false "count" Pbrt.Pp.pp_int64 fmt v.Metrics_types.count; - Pbrt.Pp.pp_record_field ~first:false "sum" Pbrt.Pp.pp_float fmt v.Metrics_types.sum; - Pbrt.Pp.pp_record_field ~first:false "quantile_values" (Pbrt.Pp.pp_list pp_summary_data_point_value_at_quantile) fmt v.Metrics_types.quantile_values; - Pbrt.Pp.pp_record_field ~first:false "flags" Pbrt.Pp.pp_int32 fmt v.Metrics_types.flags; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_summary fmt (v:Metrics_types.summary) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "data_points" (Pbrt.Pp.pp_list pp_summary_data_point) fmt v.Metrics_types.data_points; - in - Pbrt.Pp.pp_brk pp_i fmt () - -let rec pp_exponential_histogram_data_point_buckets fmt (v:Metrics_types.exponential_histogram_data_point_buckets) = - let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "offset" Pbrt.Pp.pp_int32 fmt v.Metrics_types.offset; - Pbrt.Pp.pp_record_field ~first:false "bucket_counts" (Pbrt.Pp.pp_list Pbrt.Pp.pp_int64) fmt v.Metrics_types.bucket_counts; - in - Pbrt.Pp.pp_brk pp_i fmt () - let rec pp_exemplar_value fmt (v:Metrics_types.exemplar_value) = match v with - | Metrics_types.As_int x -> Format.fprintf fmt "@[As_int(@,%a)@]" Pbrt.Pp.pp_int64 x | Metrics_types.As_double x -> Format.fprintf fmt "@[As_double(@,%a)@]" Pbrt.Pp.pp_float x + | Metrics_types.As_int x -> Format.fprintf fmt "@[As_int(@,%a)@]" Pbrt.Pp.pp_int64 x and pp_exemplar fmt (v:Metrics_types.exemplar) = let pp_i fmt () = @@ -47,22 +15,25 @@ and pp_exemplar fmt (v:Metrics_types.exemplar) = in Pbrt.Pp.pp_brk pp_i fmt () -let rec pp_exponential_histogram_data_point fmt (v:Metrics_types.exponential_histogram_data_point) = +let rec pp_number_data_point_value fmt (v:Metrics_types.number_data_point_value) = + match v with + | Metrics_types.As_double x -> Format.fprintf fmt "@[As_double(@,%a)@]" Pbrt.Pp.pp_float x + | Metrics_types.As_int x -> Format.fprintf fmt "@[As_int(@,%a)@]" Pbrt.Pp.pp_int64 x + +and pp_number_data_point fmt (v:Metrics_types.number_data_point) = let pp_i fmt () = Pbrt.Pp.pp_record_field ~first:true "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Metrics_types.attributes; Pbrt.Pp.pp_record_field ~first:false "start_time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.start_time_unix_nano; Pbrt.Pp.pp_record_field ~first:false "time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.time_unix_nano; - Pbrt.Pp.pp_record_field ~first:false "count" Pbrt.Pp.pp_int64 fmt v.Metrics_types.count; - Pbrt.Pp.pp_record_field ~first:false "sum" (Pbrt.Pp.pp_option Pbrt.Pp.pp_float) fmt v.Metrics_types.sum; - Pbrt.Pp.pp_record_field ~first:false "scale" Pbrt.Pp.pp_int32 fmt v.Metrics_types.scale; - Pbrt.Pp.pp_record_field ~first:false "zero_count" Pbrt.Pp.pp_int64 fmt v.Metrics_types.zero_count; - Pbrt.Pp.pp_record_field ~first:false "positive" (Pbrt.Pp.pp_option pp_exponential_histogram_data_point_buckets) fmt v.Metrics_types.positive; - Pbrt.Pp.pp_record_field ~first:false "negative" (Pbrt.Pp.pp_option pp_exponential_histogram_data_point_buckets) fmt v.Metrics_types.negative; - Pbrt.Pp.pp_record_field ~first:false "flags" Pbrt.Pp.pp_int32 fmt v.Metrics_types.flags; + Pbrt.Pp.pp_record_field ~first:false "value" pp_number_data_point_value fmt v.Metrics_types.value; Pbrt.Pp.pp_record_field ~first:false "exemplars" (Pbrt.Pp.pp_list pp_exemplar) fmt v.Metrics_types.exemplars; - Pbrt.Pp.pp_record_field ~first:false "min" (Pbrt.Pp.pp_option Pbrt.Pp.pp_float) fmt v.Metrics_types.min; - Pbrt.Pp.pp_record_field ~first:false "max" (Pbrt.Pp.pp_option Pbrt.Pp.pp_float) fmt v.Metrics_types.max; - Pbrt.Pp.pp_record_field ~first:false "zero_threshold" Pbrt.Pp.pp_float fmt v.Metrics_types.zero_threshold; + Pbrt.Pp.pp_record_field ~first:false "flags" Pbrt.Pp.pp_int32 fmt v.Metrics_types.flags; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_gauge fmt (v:Metrics_types.gauge) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "data_points" (Pbrt.Pp.pp_list pp_number_data_point) fmt v.Metrics_types.data_points; in Pbrt.Pp.pp_brk pp_i fmt () @@ -72,10 +43,11 @@ let rec pp_aggregation_temporality fmt (v:Metrics_types.aggregation_temporality) | Metrics_types.Aggregation_temporality_delta -> Format.fprintf fmt "Aggregation_temporality_delta" | Metrics_types.Aggregation_temporality_cumulative -> Format.fprintf fmt "Aggregation_temporality_cumulative" -let rec pp_exponential_histogram fmt (v:Metrics_types.exponential_histogram) = +let rec pp_sum fmt (v:Metrics_types.sum) = let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "data_points" (Pbrt.Pp.pp_list pp_exponential_histogram_data_point) fmt v.Metrics_types.data_points; + Pbrt.Pp.pp_record_field ~first:true "data_points" (Pbrt.Pp.pp_list pp_number_data_point) fmt v.Metrics_types.data_points; Pbrt.Pp.pp_record_field ~first:false "aggregation_temporality" pp_aggregation_temporality fmt v.Metrics_types.aggregation_temporality; + Pbrt.Pp.pp_record_field ~first:false "is_monotonic" Pbrt.Pp.pp_bool fmt v.Metrics_types.is_monotonic; in Pbrt.Pp.pp_brk pp_i fmt () @@ -102,43 +74,71 @@ let rec pp_histogram fmt (v:Metrics_types.histogram) = in Pbrt.Pp.pp_brk pp_i fmt () -let rec pp_number_data_point_value fmt (v:Metrics_types.number_data_point_value) = - match v with - | Metrics_types.As_int x -> Format.fprintf fmt "@[As_int(@,%a)@]" Pbrt.Pp.pp_int64 x - | Metrics_types.As_double x -> Format.fprintf fmt "@[As_double(@,%a)@]" Pbrt.Pp.pp_float x +let rec pp_exponential_histogram_data_point_buckets fmt (v:Metrics_types.exponential_histogram_data_point_buckets) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "offset" Pbrt.Pp.pp_int32 fmt v.Metrics_types.offset; + Pbrt.Pp.pp_record_field ~first:false "bucket_counts" (Pbrt.Pp.pp_list Pbrt.Pp.pp_int64) fmt v.Metrics_types.bucket_counts; + in + Pbrt.Pp.pp_brk pp_i fmt () -and pp_number_data_point fmt (v:Metrics_types.number_data_point) = +let rec pp_exponential_histogram_data_point fmt (v:Metrics_types.exponential_histogram_data_point) = let pp_i fmt () = Pbrt.Pp.pp_record_field ~first:true "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Metrics_types.attributes; Pbrt.Pp.pp_record_field ~first:false "start_time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.start_time_unix_nano; Pbrt.Pp.pp_record_field ~first:false "time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.time_unix_nano; - Pbrt.Pp.pp_record_field ~first:false "value" pp_number_data_point_value fmt v.Metrics_types.value; - Pbrt.Pp.pp_record_field ~first:false "exemplars" (Pbrt.Pp.pp_list pp_exemplar) fmt v.Metrics_types.exemplars; + Pbrt.Pp.pp_record_field ~first:false "count" Pbrt.Pp.pp_int64 fmt v.Metrics_types.count; + Pbrt.Pp.pp_record_field ~first:false "sum" (Pbrt.Pp.pp_option Pbrt.Pp.pp_float) fmt v.Metrics_types.sum; + Pbrt.Pp.pp_record_field ~first:false "scale" Pbrt.Pp.pp_int32 fmt v.Metrics_types.scale; + Pbrt.Pp.pp_record_field ~first:false "zero_count" Pbrt.Pp.pp_int64 fmt v.Metrics_types.zero_count; + Pbrt.Pp.pp_record_field ~first:false "positive" (Pbrt.Pp.pp_option pp_exponential_histogram_data_point_buckets) fmt v.Metrics_types.positive; + Pbrt.Pp.pp_record_field ~first:false "negative" (Pbrt.Pp.pp_option pp_exponential_histogram_data_point_buckets) fmt v.Metrics_types.negative; Pbrt.Pp.pp_record_field ~first:false "flags" Pbrt.Pp.pp_int32 fmt v.Metrics_types.flags; + Pbrt.Pp.pp_record_field ~first:false "exemplars" (Pbrt.Pp.pp_list pp_exemplar) fmt v.Metrics_types.exemplars; + Pbrt.Pp.pp_record_field ~first:false "min" (Pbrt.Pp.pp_option Pbrt.Pp.pp_float) fmt v.Metrics_types.min; + Pbrt.Pp.pp_record_field ~first:false "max" (Pbrt.Pp.pp_option Pbrt.Pp.pp_float) fmt v.Metrics_types.max; + Pbrt.Pp.pp_record_field ~first:false "zero_threshold" Pbrt.Pp.pp_float fmt v.Metrics_types.zero_threshold; in Pbrt.Pp.pp_brk pp_i fmt () -let rec pp_sum fmt (v:Metrics_types.sum) = +let rec pp_exponential_histogram fmt (v:Metrics_types.exponential_histogram) = let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "data_points" (Pbrt.Pp.pp_list pp_number_data_point) fmt v.Metrics_types.data_points; + Pbrt.Pp.pp_record_field ~first:true "data_points" (Pbrt.Pp.pp_list pp_exponential_histogram_data_point) fmt v.Metrics_types.data_points; Pbrt.Pp.pp_record_field ~first:false "aggregation_temporality" pp_aggregation_temporality fmt v.Metrics_types.aggregation_temporality; - Pbrt.Pp.pp_record_field ~first:false "is_monotonic" Pbrt.Pp.pp_bool fmt v.Metrics_types.is_monotonic; in Pbrt.Pp.pp_brk pp_i fmt () -let rec pp_gauge fmt (v:Metrics_types.gauge) = +let rec pp_summary_data_point_value_at_quantile fmt (v:Metrics_types.summary_data_point_value_at_quantile) = let pp_i fmt () = - Pbrt.Pp.pp_record_field ~first:true "data_points" (Pbrt.Pp.pp_list pp_number_data_point) fmt v.Metrics_types.data_points; + Pbrt.Pp.pp_record_field ~first:true "quantile" Pbrt.Pp.pp_float fmt v.Metrics_types.quantile; + Pbrt.Pp.pp_record_field ~first:false "value" Pbrt.Pp.pp_float fmt v.Metrics_types.value; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_summary_data_point fmt (v:Metrics_types.summary_data_point) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "attributes" (Pbrt.Pp.pp_list Common_pp.pp_key_value) fmt v.Metrics_types.attributes; + Pbrt.Pp.pp_record_field ~first:false "start_time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.start_time_unix_nano; + Pbrt.Pp.pp_record_field ~first:false "time_unix_nano" Pbrt.Pp.pp_int64 fmt v.Metrics_types.time_unix_nano; + Pbrt.Pp.pp_record_field ~first:false "count" Pbrt.Pp.pp_int64 fmt v.Metrics_types.count; + Pbrt.Pp.pp_record_field ~first:false "sum" Pbrt.Pp.pp_float fmt v.Metrics_types.sum; + Pbrt.Pp.pp_record_field ~first:false "quantile_values" (Pbrt.Pp.pp_list pp_summary_data_point_value_at_quantile) fmt v.Metrics_types.quantile_values; + Pbrt.Pp.pp_record_field ~first:false "flags" Pbrt.Pp.pp_int32 fmt v.Metrics_types.flags; + in + Pbrt.Pp.pp_brk pp_i fmt () + +let rec pp_summary fmt (v:Metrics_types.summary) = + let pp_i fmt () = + Pbrt.Pp.pp_record_field ~first:true "data_points" (Pbrt.Pp.pp_list pp_summary_data_point) fmt v.Metrics_types.data_points; in Pbrt.Pp.pp_brk pp_i fmt () let rec pp_metric_data fmt (v:Metrics_types.metric_data) = match v with - | Metrics_types.Summary x -> Format.fprintf fmt "@[Summary(@,%a)@]" pp_summary x - | Metrics_types.Exponential_histogram x -> Format.fprintf fmt "@[Exponential_histogram(@,%a)@]" pp_exponential_histogram x - | Metrics_types.Histogram x -> Format.fprintf fmt "@[Histogram(@,%a)@]" pp_histogram x - | Metrics_types.Sum x -> Format.fprintf fmt "@[Sum(@,%a)@]" pp_sum x | Metrics_types.Gauge x -> Format.fprintf fmt "@[Gauge(@,%a)@]" pp_gauge x + | Metrics_types.Sum x -> Format.fprintf fmt "@[Sum(@,%a)@]" pp_sum x + | Metrics_types.Histogram x -> Format.fprintf fmt "@[Histogram(@,%a)@]" pp_histogram x + | Metrics_types.Exponential_histogram x -> Format.fprintf fmt "@[Exponential_histogram(@,%a)@]" pp_exponential_histogram x + | Metrics_types.Summary x -> Format.fprintf fmt "@[Summary(@,%a)@]" pp_summary x and pp_metric fmt (v:Metrics_types.metric) = let pp_i fmt () = diff --git a/src/proto/metrics_pp.mli b/src/proto/metrics_pp.mli index 7ee4b6fc..c506e897 100644 --- a/src/proto/metrics_pp.mli +++ b/src/proto/metrics_pp.mli @@ -1,35 +1,28 @@ - (** metrics.proto Pretty Printing *) (** {2 Formatters} *) -val pp_summary_data_point_value_at_quantile : Format.formatter -> Metrics_types.summary_data_point_value_at_quantile -> unit -(** [pp_summary_data_point_value_at_quantile v] formats v *) - -val pp_summary_data_point : Format.formatter -> Metrics_types.summary_data_point -> unit -(** [pp_summary_data_point v] formats v *) - -val pp_summary : Format.formatter -> Metrics_types.summary -> unit -(** [pp_summary v] formats v *) - -val pp_exponential_histogram_data_point_buckets : Format.formatter -> Metrics_types.exponential_histogram_data_point_buckets -> unit -(** [pp_exponential_histogram_data_point_buckets v] formats v *) - val pp_exemplar_value : Format.formatter -> Metrics_types.exemplar_value -> unit (** [pp_exemplar_value v] formats v *) val pp_exemplar : Format.formatter -> Metrics_types.exemplar -> unit (** [pp_exemplar v] formats v *) -val pp_exponential_histogram_data_point : Format.formatter -> Metrics_types.exponential_histogram_data_point -> unit -(** [pp_exponential_histogram_data_point v] formats v *) +val pp_number_data_point_value : Format.formatter -> Metrics_types.number_data_point_value -> unit +(** [pp_number_data_point_value v] formats v *) + +val pp_number_data_point : Format.formatter -> Metrics_types.number_data_point -> unit +(** [pp_number_data_point v] formats v *) + +val pp_gauge : Format.formatter -> Metrics_types.gauge -> unit +(** [pp_gauge v] formats v *) val pp_aggregation_temporality : Format.formatter -> Metrics_types.aggregation_temporality -> unit (** [pp_aggregation_temporality v] formats v *) -val pp_exponential_histogram : Format.formatter -> Metrics_types.exponential_histogram -> unit -(** [pp_exponential_histogram v] formats v *) +val pp_sum : Format.formatter -> Metrics_types.sum -> unit +(** [pp_sum v] formats v *) val pp_histogram_data_point : Format.formatter -> Metrics_types.histogram_data_point -> unit (** [pp_histogram_data_point v] formats v *) @@ -37,17 +30,23 @@ val pp_histogram_data_point : Format.formatter -> Metrics_types.histogram_data_p val pp_histogram : Format.formatter -> Metrics_types.histogram -> unit (** [pp_histogram v] formats v *) -val pp_number_data_point_value : Format.formatter -> Metrics_types.number_data_point_value -> unit -(** [pp_number_data_point_value v] formats v *) +val pp_exponential_histogram_data_point_buckets : Format.formatter -> Metrics_types.exponential_histogram_data_point_buckets -> unit +(** [pp_exponential_histogram_data_point_buckets v] formats v *) -val pp_number_data_point : Format.formatter -> Metrics_types.number_data_point -> unit -(** [pp_number_data_point v] formats v *) +val pp_exponential_histogram_data_point : Format.formatter -> Metrics_types.exponential_histogram_data_point -> unit +(** [pp_exponential_histogram_data_point v] formats v *) -val pp_sum : Format.formatter -> Metrics_types.sum -> unit -(** [pp_sum v] formats v *) +val pp_exponential_histogram : Format.formatter -> Metrics_types.exponential_histogram -> unit +(** [pp_exponential_histogram v] formats v *) -val pp_gauge : Format.formatter -> Metrics_types.gauge -> unit -(** [pp_gauge v] formats v *) +val pp_summary_data_point_value_at_quantile : Format.formatter -> Metrics_types.summary_data_point_value_at_quantile -> unit +(** [pp_summary_data_point_value_at_quantile v] formats v *) + +val pp_summary_data_point : Format.formatter -> Metrics_types.summary_data_point -> unit +(** [pp_summary_data_point v] formats v *) + +val pp_summary : Format.formatter -> Metrics_types.summary -> unit +(** [pp_summary v] formats v *) val pp_metric_data : Format.formatter -> Metrics_types.metric_data -> unit (** [pp_metric_data v] formats v *) diff --git a/src/proto/metrics_service_pp.mli b/src/proto/metrics_service_pp.mli index c9b5ed6f..90301da8 100644 --- a/src/proto/metrics_service_pp.mli +++ b/src/proto/metrics_service_pp.mli @@ -1,4 +1,3 @@ - (** metrics_service.proto Pretty Printing *) diff --git a/src/proto/metrics_types.ml b/src/proto/metrics_types.ml index d238843c..4cd9c09e 100644 --- a/src/proto/metrics_types.ml +++ b/src/proto/metrics_types.ml @@ -1,33 +1,9 @@ [@@@ocaml.warning "-27-30-39"] -type summary_data_point_value_at_quantile = { - quantile : float; - value : float; -} - -type summary_data_point = { - attributes : Common_types.key_value list; - start_time_unix_nano : int64; - time_unix_nano : int64; - count : int64; - sum : float; - quantile_values : summary_data_point_value_at_quantile list; - flags : int32; -} - -type summary = { - data_points : summary_data_point list; -} - -type exponential_histogram_data_point_buckets = { - offset : int32; - bucket_counts : int64 list; -} - type exemplar_value = - | As_int of int64 | As_double of float + | As_int of int64 and exemplar = { filtered_attributes : Common_types.key_value list; @@ -37,21 +13,21 @@ and exemplar = { trace_id : bytes; } -type exponential_histogram_data_point = { +type number_data_point_value = + | As_double of float + | As_int of int64 + +and number_data_point = { attributes : Common_types.key_value list; start_time_unix_nano : int64; time_unix_nano : int64; - count : int64; - sum : float option; - scale : int32; - zero_count : int64; - positive : exponential_histogram_data_point_buckets option; - negative : exponential_histogram_data_point_buckets option; - flags : int32; + value : number_data_point_value; exemplars : exemplar list; - min : float option; - max : float option; - zero_threshold : float; + flags : int32; +} + +type gauge = { + data_points : number_data_point list; } type aggregation_temporality = @@ -59,9 +35,10 @@ type aggregation_temporality = | Aggregation_temporality_delta | Aggregation_temporality_cumulative -type exponential_histogram = { - data_points : exponential_histogram_data_point list; +type sum = { + data_points : number_data_point list; aggregation_temporality : aggregation_temporality; + is_monotonic : bool; } type histogram_data_point = { @@ -83,35 +60,58 @@ type histogram = { aggregation_temporality : aggregation_temporality; } -type number_data_point_value = - | As_int of int64 - | As_double of float +type exponential_histogram_data_point_buckets = { + offset : int32; + bucket_counts : int64 list; +} -and number_data_point = { +type exponential_histogram_data_point = { attributes : Common_types.key_value list; start_time_unix_nano : int64; time_unix_nano : int64; - value : number_data_point_value; - exemplars : exemplar list; + count : int64; + sum : float option; + scale : int32; + zero_count : int64; + positive : exponential_histogram_data_point_buckets option; + negative : exponential_histogram_data_point_buckets option; flags : int32; + exemplars : exemplar list; + min : float option; + max : float option; + zero_threshold : float; } -type sum = { - data_points : number_data_point list; +type exponential_histogram = { + data_points : exponential_histogram_data_point list; aggregation_temporality : aggregation_temporality; - is_monotonic : bool; } -type gauge = { - data_points : number_data_point list; +type summary_data_point_value_at_quantile = { + quantile : float; + value : float; +} + +type summary_data_point = { + attributes : Common_types.key_value list; + start_time_unix_nano : int64; + time_unix_nano : int64; + count : int64; + sum : float; + quantile_values : summary_data_point_value_at_quantile list; + flags : int32; +} + +type summary = { + data_points : summary_data_point list; } type metric_data = - | Summary of summary - | Exponential_histogram of exponential_histogram - | Histogram of histogram - | Sum of sum | Gauge of gauge + | Sum of sum + | Histogram of histogram + | Exponential_histogram of exponential_histogram + | Summary of summary and metric = { name : string; @@ -140,52 +140,12 @@ type data_point_flags = | Data_point_flags_do_not_use | Data_point_flags_no_recorded_value_mask -let rec default_summary_data_point_value_at_quantile - ?quantile:((quantile:float) = 0.) - ?value:((value:float) = 0.) - () : summary_data_point_value_at_quantile = { - quantile; - value; -} - -let rec default_summary_data_point - ?attributes:((attributes:Common_types.key_value list) = []) - ?start_time_unix_nano:((start_time_unix_nano:int64) = 0L) - ?time_unix_nano:((time_unix_nano:int64) = 0L) - ?count:((count:int64) = 0L) - ?sum:((sum:float) = 0.) - ?quantile_values:((quantile_values:summary_data_point_value_at_quantile list) = []) - ?flags:((flags:int32) = 0l) - () : summary_data_point = { - attributes; - start_time_unix_nano; - time_unix_nano; - count; - sum; - quantile_values; - flags; -} - -let rec default_summary - ?data_points:((data_points:summary_data_point list) = []) - () : summary = { - data_points; -} - -let rec default_exponential_histogram_data_point_buckets - ?offset:((offset:int32) = 0l) - ?bucket_counts:((bucket_counts:int64 list) = []) - () : exponential_histogram_data_point_buckets = { - offset; - bucket_counts; -} - -let rec default_exemplar_value () : exemplar_value = As_int (0L) +let rec default_exemplar_value () : exemplar_value = As_double (0.) and default_exemplar ?filtered_attributes:((filtered_attributes:Common_types.key_value list) = []) ?time_unix_nano:((time_unix_nano:int64) = 0L) - ?value:((value:exemplar_value) = As_int (0L)) + ?value:((value:exemplar_value) = As_double (0.)) ?span_id:((span_id:bytes) = Bytes.create 0) ?trace_id:((trace_id:bytes) = Bytes.create 0) () : exemplar = { @@ -196,46 +156,40 @@ and default_exemplar trace_id; } -let rec default_exponential_histogram_data_point +let rec default_number_data_point_value () : number_data_point_value = As_double (0.) + +and default_number_data_point ?attributes:((attributes:Common_types.key_value list) = []) ?start_time_unix_nano:((start_time_unix_nano:int64) = 0L) ?time_unix_nano:((time_unix_nano:int64) = 0L) - ?count:((count:int64) = 0L) - ?sum:((sum:float option) = None) - ?scale:((scale:int32) = 0l) - ?zero_count:((zero_count:int64) = 0L) - ?positive:((positive:exponential_histogram_data_point_buckets option) = None) - ?negative:((negative:exponential_histogram_data_point_buckets option) = None) - ?flags:((flags:int32) = 0l) + ?value:((value:number_data_point_value) = As_double (0.)) ?exemplars:((exemplars:exemplar list) = []) - ?min:((min:float option) = None) - ?max:((max:float option) = None) - ?zero_threshold:((zero_threshold:float) = 0.) - () : exponential_histogram_data_point = { + ?flags:((flags:int32) = 0l) + () : number_data_point = { attributes; start_time_unix_nano; time_unix_nano; - count; - sum; - scale; - zero_count; - positive; - negative; - flags; + value; exemplars; - min; - max; - zero_threshold; + flags; +} + +let rec default_gauge + ?data_points:((data_points:number_data_point list) = []) + () : gauge = { + data_points; } let rec default_aggregation_temporality () = (Aggregation_temporality_unspecified:aggregation_temporality) -let rec default_exponential_histogram - ?data_points:((data_points:exponential_histogram_data_point list) = []) +let rec default_sum + ?data_points:((data_points:number_data_point list) = []) ?aggregation_temporality:((aggregation_temporality:aggregation_temporality) = default_aggregation_temporality ()) - () : exponential_histogram = { + ?is_monotonic:((is_monotonic:bool) = false) + () : sum = { data_points; aggregation_temporality; + is_monotonic; } let rec default_histogram_data_point @@ -272,47 +226,93 @@ let rec default_histogram aggregation_temporality; } -let rec default_number_data_point_value () : number_data_point_value = As_int (0L) +let rec default_exponential_histogram_data_point_buckets + ?offset:((offset:int32) = 0l) + ?bucket_counts:((bucket_counts:int64 list) = []) + () : exponential_histogram_data_point_buckets = { + offset; + bucket_counts; +} -and default_number_data_point +let rec default_exponential_histogram_data_point ?attributes:((attributes:Common_types.key_value list) = []) ?start_time_unix_nano:((start_time_unix_nano:int64) = 0L) ?time_unix_nano:((time_unix_nano:int64) = 0L) - ?value:((value:number_data_point_value) = As_int (0L)) - ?exemplars:((exemplars:exemplar list) = []) + ?count:((count:int64) = 0L) + ?sum:((sum:float option) = None) + ?scale:((scale:int32) = 0l) + ?zero_count:((zero_count:int64) = 0L) + ?positive:((positive:exponential_histogram_data_point_buckets option) = None) + ?negative:((negative:exponential_histogram_data_point_buckets option) = None) ?flags:((flags:int32) = 0l) - () : number_data_point = { + ?exemplars:((exemplars:exemplar list) = []) + ?min:((min:float option) = None) + ?max:((max:float option) = None) + ?zero_threshold:((zero_threshold:float) = 0.) + () : exponential_histogram_data_point = { attributes; start_time_unix_nano; time_unix_nano; - value; - exemplars; + count; + sum; + scale; + zero_count; + positive; + negative; flags; + exemplars; + min; + max; + zero_threshold; } -let rec default_sum - ?data_points:((data_points:number_data_point list) = []) +let rec default_exponential_histogram + ?data_points:((data_points:exponential_histogram_data_point list) = []) ?aggregation_temporality:((aggregation_temporality:aggregation_temporality) = default_aggregation_temporality ()) - ?is_monotonic:((is_monotonic:bool) = false) - () : sum = { + () : exponential_histogram = { data_points; aggregation_temporality; - is_monotonic; } -let rec default_gauge - ?data_points:((data_points:number_data_point list) = []) - () : gauge = { +let rec default_summary_data_point_value_at_quantile + ?quantile:((quantile:float) = 0.) + ?value:((value:float) = 0.) + () : summary_data_point_value_at_quantile = { + quantile; + value; +} + +let rec default_summary_data_point + ?attributes:((attributes:Common_types.key_value list) = []) + ?start_time_unix_nano:((start_time_unix_nano:int64) = 0L) + ?time_unix_nano:((time_unix_nano:int64) = 0L) + ?count:((count:int64) = 0L) + ?sum:((sum:float) = 0.) + ?quantile_values:((quantile_values:summary_data_point_value_at_quantile list) = []) + ?flags:((flags:int32) = 0l) + () : summary_data_point = { + attributes; + start_time_unix_nano; + time_unix_nano; + count; + sum; + quantile_values; + flags; +} + +let rec default_summary + ?data_points:((data_points:summary_data_point list) = []) + () : summary = { data_points; } -let rec default_metric_data () : metric_data = Summary (default_summary ()) +let rec default_metric_data () : metric_data = Gauge (default_gauge ()) and default_metric ?name:((name:string) = "") ?description:((description:string) = "") ?unit_:((unit_:string) = "") - ?data:((data:metric_data) = Summary (default_summary ())) + ?data:((data:metric_data) = Gauge (default_gauge ())) () : metric = { name; description; diff --git a/src/proto/metrics_types.mli b/src/proto/metrics_types.mli index 17471582..8cf43dbf 100644 --- a/src/proto/metrics_types.mli +++ b/src/proto/metrics_types.mli @@ -4,33 +4,9 @@ (** {2 Types} *) -type summary_data_point_value_at_quantile = { - quantile : float; - value : float; -} - -type summary_data_point = { - attributes : Common_types.key_value list; - start_time_unix_nano : int64; - time_unix_nano : int64; - count : int64; - sum : float; - quantile_values : summary_data_point_value_at_quantile list; - flags : int32; -} - -type summary = { - data_points : summary_data_point list; -} - -type exponential_histogram_data_point_buckets = { - offset : int32; - bucket_counts : int64 list; -} - type exemplar_value = - | As_int of int64 | As_double of float + | As_int of int64 and exemplar = { filtered_attributes : Common_types.key_value list; @@ -40,21 +16,21 @@ and exemplar = { trace_id : bytes; } -type exponential_histogram_data_point = { +type number_data_point_value = + | As_double of float + | As_int of int64 + +and number_data_point = { attributes : Common_types.key_value list; start_time_unix_nano : int64; time_unix_nano : int64; - count : int64; - sum : float option; - scale : int32; - zero_count : int64; - positive : exponential_histogram_data_point_buckets option; - negative : exponential_histogram_data_point_buckets option; - flags : int32; + value : number_data_point_value; exemplars : exemplar list; - min : float option; - max : float option; - zero_threshold : float; + flags : int32; +} + +type gauge = { + data_points : number_data_point list; } type aggregation_temporality = @@ -62,9 +38,10 @@ type aggregation_temporality = | Aggregation_temporality_delta | Aggregation_temporality_cumulative -type exponential_histogram = { - data_points : exponential_histogram_data_point list; +type sum = { + data_points : number_data_point list; aggregation_temporality : aggregation_temporality; + is_monotonic : bool; } type histogram_data_point = { @@ -86,35 +63,58 @@ type histogram = { aggregation_temporality : aggregation_temporality; } -type number_data_point_value = - | As_int of int64 - | As_double of float +type exponential_histogram_data_point_buckets = { + offset : int32; + bucket_counts : int64 list; +} -and number_data_point = { +type exponential_histogram_data_point = { attributes : Common_types.key_value list; start_time_unix_nano : int64; time_unix_nano : int64; - value : number_data_point_value; - exemplars : exemplar list; + count : int64; + sum : float option; + scale : int32; + zero_count : int64; + positive : exponential_histogram_data_point_buckets option; + negative : exponential_histogram_data_point_buckets option; flags : int32; + exemplars : exemplar list; + min : float option; + max : float option; + zero_threshold : float; } -type sum = { - data_points : number_data_point list; +type exponential_histogram = { + data_points : exponential_histogram_data_point list; aggregation_temporality : aggregation_temporality; - is_monotonic : bool; } -type gauge = { - data_points : number_data_point list; +type summary_data_point_value_at_quantile = { + quantile : float; + value : float; +} + +type summary_data_point = { + attributes : Common_types.key_value list; + start_time_unix_nano : int64; + time_unix_nano : int64; + count : int64; + sum : float; + quantile_values : summary_data_point_value_at_quantile list; + flags : int32; +} + +type summary = { + data_points : summary_data_point list; } type metric_data = - | Summary of summary - | Exponential_histogram of exponential_histogram - | Histogram of histogram - | Sum of sum | Gauge of gauge + | Sum of sum + | Histogram of histogram + | Exponential_histogram of exponential_histogram + | Summary of summary and metric = { name : string; @@ -146,38 +146,6 @@ type data_point_flags = (** {2 Default values} *) -val default_summary_data_point_value_at_quantile : - ?quantile:float -> - ?value:float -> - unit -> - summary_data_point_value_at_quantile -(** [default_summary_data_point_value_at_quantile ()] is the default value for type [summary_data_point_value_at_quantile] *) - -val default_summary_data_point : - ?attributes:Common_types.key_value list -> - ?start_time_unix_nano:int64 -> - ?time_unix_nano:int64 -> - ?count:int64 -> - ?sum:float -> - ?quantile_values:summary_data_point_value_at_quantile list -> - ?flags:int32 -> - unit -> - summary_data_point -(** [default_summary_data_point ()] is the default value for type [summary_data_point] *) - -val default_summary : - ?data_points:summary_data_point list -> - unit -> - summary -(** [default_summary ()] is the default value for type [summary] *) - -val default_exponential_histogram_data_point_buckets : - ?offset:int32 -> - ?bucket_counts:int64 list -> - unit -> - exponential_histogram_data_point_buckets -(** [default_exponential_histogram_data_point_buckets ()] is the default value for type [exponential_histogram_data_point_buckets] *) - val default_exemplar_value : unit -> exemplar_value (** [default_exemplar_value ()] is the default value for type [exemplar_value] *) @@ -191,34 +159,36 @@ val default_exemplar : exemplar (** [default_exemplar ()] is the default value for type [exemplar] *) -val default_exponential_histogram_data_point : +val default_number_data_point_value : unit -> number_data_point_value +(** [default_number_data_point_value ()] is the default value for type [number_data_point_value] *) + +val default_number_data_point : ?attributes:Common_types.key_value list -> ?start_time_unix_nano:int64 -> ?time_unix_nano:int64 -> - ?count:int64 -> - ?sum:float option -> - ?scale:int32 -> - ?zero_count:int64 -> - ?positive:exponential_histogram_data_point_buckets option -> - ?negative:exponential_histogram_data_point_buckets option -> - ?flags:int32 -> + ?value:number_data_point_value -> ?exemplars:exemplar list -> - ?min:float option -> - ?max:float option -> - ?zero_threshold:float -> + ?flags:int32 -> unit -> - exponential_histogram_data_point -(** [default_exponential_histogram_data_point ()] is the default value for type [exponential_histogram_data_point] *) + number_data_point +(** [default_number_data_point ()] is the default value for type [number_data_point] *) + +val default_gauge : + ?data_points:number_data_point list -> + unit -> + gauge +(** [default_gauge ()] is the default value for type [gauge] *) val default_aggregation_temporality : unit -> aggregation_temporality (** [default_aggregation_temporality ()] is the default value for type [aggregation_temporality] *) -val default_exponential_histogram : - ?data_points:exponential_histogram_data_point list -> +val default_sum : + ?data_points:number_data_point list -> ?aggregation_temporality:aggregation_temporality -> + ?is_monotonic:bool -> unit -> - exponential_histogram -(** [default_exponential_histogram ()] is the default value for type [exponential_histogram] *) + sum +(** [default_sum ()] is the default value for type [sum] *) val default_histogram_data_point : ?attributes:Common_types.key_value list -> @@ -243,33 +213,63 @@ val default_histogram : histogram (** [default_histogram ()] is the default value for type [histogram] *) -val default_number_data_point_value : unit -> number_data_point_value -(** [default_number_data_point_value ()] is the default value for type [number_data_point_value] *) +val default_exponential_histogram_data_point_buckets : + ?offset:int32 -> + ?bucket_counts:int64 list -> + unit -> + exponential_histogram_data_point_buckets +(** [default_exponential_histogram_data_point_buckets ()] is the default value for type [exponential_histogram_data_point_buckets] *) -val default_number_data_point : +val default_exponential_histogram_data_point : ?attributes:Common_types.key_value list -> ?start_time_unix_nano:int64 -> ?time_unix_nano:int64 -> - ?value:number_data_point_value -> - ?exemplars:exemplar list -> + ?count:int64 -> + ?sum:float option -> + ?scale:int32 -> + ?zero_count:int64 -> + ?positive:exponential_histogram_data_point_buckets option -> + ?negative:exponential_histogram_data_point_buckets option -> ?flags:int32 -> + ?exemplars:exemplar list -> + ?min:float option -> + ?max:float option -> + ?zero_threshold:float -> unit -> - number_data_point -(** [default_number_data_point ()] is the default value for type [number_data_point] *) + exponential_histogram_data_point +(** [default_exponential_histogram_data_point ()] is the default value for type [exponential_histogram_data_point] *) -val default_sum : - ?data_points:number_data_point list -> +val default_exponential_histogram : + ?data_points:exponential_histogram_data_point list -> ?aggregation_temporality:aggregation_temporality -> - ?is_monotonic:bool -> unit -> - sum -(** [default_sum ()] is the default value for type [sum] *) + exponential_histogram +(** [default_exponential_histogram ()] is the default value for type [exponential_histogram] *) -val default_gauge : - ?data_points:number_data_point list -> +val default_summary_data_point_value_at_quantile : + ?quantile:float -> + ?value:float -> unit -> - gauge -(** [default_gauge ()] is the default value for type [gauge] *) + summary_data_point_value_at_quantile +(** [default_summary_data_point_value_at_quantile ()] is the default value for type [summary_data_point_value_at_quantile] *) + +val default_summary_data_point : + ?attributes:Common_types.key_value list -> + ?start_time_unix_nano:int64 -> + ?time_unix_nano:int64 -> + ?count:int64 -> + ?sum:float -> + ?quantile_values:summary_data_point_value_at_quantile list -> + ?flags:int32 -> + unit -> + summary_data_point +(** [default_summary_data_point ()] is the default value for type [summary_data_point] *) + +val default_summary : + ?data_points:summary_data_point list -> + unit -> + summary +(** [default_summary ()] is the default value for type [summary] *) val default_metric_data : unit -> metric_data (** [default_metric_data ()] is the default value for type [metric_data] *) diff --git a/src/proto/resource_pp.mli b/src/proto/resource_pp.mli index f18aa338..60d1f43a 100644 --- a/src/proto/resource_pp.mli +++ b/src/proto/resource_pp.mli @@ -1,4 +1,3 @@ - (** resource.proto Pretty Printing *) diff --git a/src/proto/status_pp.mli b/src/proto/status_pp.mli index 3333057d..cb19e3bd 100644 --- a/src/proto/status_pp.mli +++ b/src/proto/status_pp.mli @@ -1,4 +1,3 @@ - (** status.proto Pretty Printing *) diff --git a/src/proto/trace_pp.mli b/src/proto/trace_pp.mli index ea7ffdc9..047f5207 100644 --- a/src/proto/trace_pp.mli +++ b/src/proto/trace_pp.mli @@ -1,4 +1,3 @@ - (** trace.proto Pretty Printing *) diff --git a/src/proto/trace_service_pp.mli b/src/proto/trace_service_pp.mli index 63b19223..d7d52f99 100644 --- a/src/proto/trace_service_pp.mli +++ b/src/proto/trace_service_pp.mli @@ -1,4 +1,3 @@ - (** trace_service.proto Pretty Printing *) From e53cffbf12dde76e53eb5195b228001b5010b728 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Sun, 3 Dec 2023 15:57:41 -0500 Subject: [PATCH 40/40] chore: add upper bound on pbrt --- dune-project | 6 +++--- opentelemetry-client-cohttp-lwt.opam | 2 +- opentelemetry-client-ocurl.opam | 2 +- opentelemetry.opam | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dune-project b/dune-project index 3938038b..7b98398e 100644 --- a/dune-project +++ b/dune-project @@ -31,7 +31,7 @@ (odoc :with-doc) (alcotest :with-test) (pbrt - (>= 2.3)) + (and (>= 2.3) (< 3.0))) (ocaml-lsp-server :with-dev-setup) (ocamlformat (and @@ -78,7 +78,7 @@ (opentelemetry (= :version)) (pbrt - (>= 2.3)) + (and (>= 2.3) (< 3.0))) (odoc :with-doc) (ezcurl (>= 0.2.3)) @@ -114,7 +114,7 @@ (opentelemetry (= :version)) (pbrt - (>= 2.2)) + (and (>= 2.2) (< 3.0))) (odoc :with-doc) (lwt (>= "5.3")) diff --git a/opentelemetry-client-cohttp-lwt.opam b/opentelemetry-client-cohttp-lwt.opam index 8ded95ec..bcaf7adb 100644 --- a/opentelemetry-client-cohttp-lwt.opam +++ b/opentelemetry-client-cohttp-lwt.opam @@ -16,7 +16,7 @@ depends: [ "ocaml" {>= "4.08"} "mtime" {>= "1.4"} "opentelemetry" {= version} - "pbrt" {>= "2.2"} + "pbrt" {>= "2.2" & < "3.0"} "odoc" {with-doc} "lwt" {>= "5.3"} "lwt_ppx" {>= "2.0"} diff --git a/opentelemetry-client-ocurl.opam b/opentelemetry-client-ocurl.opam index 21d01814..1fbef60b 100644 --- a/opentelemetry-client-ocurl.opam +++ b/opentelemetry-client-ocurl.opam @@ -16,7 +16,7 @@ depends: [ "ocaml" {>= "4.08"} "mtime" {>= "1.4"} "opentelemetry" {= version} - "pbrt" {>= "2.3"} + "pbrt" {>= "2.3" & < "3.0"} "odoc" {with-doc} "ezcurl" {>= "0.2.3"} "ocurl" diff --git a/opentelemetry.opam b/opentelemetry.opam index cf4a98f3..0a181143 100644 --- a/opentelemetry.opam +++ b/opentelemetry.opam @@ -19,7 +19,7 @@ depends: [ "ambient-context" "odoc" {with-doc} "alcotest" {with-test} - "pbrt" {>= "2.3"} + "pbrt" {>= "2.3" & < "3.0"} "ocaml-lsp-server" {with-dev-setup} "ocamlformat" {with-dev-setup & >= "0.24" & < "0.25"} ]