mirror of
https://github.com/ocaml-tracing/ocaml-opentelemetry.git
synced 2026-03-08 03:47:59 -04:00
Allow optional reuse of encoder state
This allows clien implementors to micromanage the state of the protobuf `encoder` if they want, or to just let the library handle allocation and garbage collection of encoder states when that level of resource managment is not required.
This commit is contained in:
parent
740a142581
commit
8f7d74f591
4 changed files with 36 additions and 19 deletions
|
|
@ -271,7 +271,7 @@ end
|
|||
let mk_emitter ~stop ~(config : Config.t) () : (module EMITTER) =
|
||||
let open Proto in
|
||||
let open Lwt.Syntax in
|
||||
let module Conv = Signal.Converter () in
|
||||
let module Conv = Signal.Converter in
|
||||
(* local helpers *)
|
||||
let open struct
|
||||
let timeout =
|
||||
|
|
|
|||
|
|
@ -201,7 +201,7 @@ end = struct
|
|||
in
|
||||
conv l |> send_http_ ~stop ~config ~url client
|
||||
in
|
||||
let module Conv = Signal.Converter () in
|
||||
let module Conv = Signal.Converter in
|
||||
try
|
||||
while not (Atomic.get stop) do
|
||||
let msg = B_queue.pop self.send_q in
|
||||
|
|
|
|||
|
|
@ -5,34 +5,37 @@ module Span = Opentelemetry.Span
|
|||
|
||||
let ( let@ ) = ( @@ )
|
||||
|
||||
module Converter () = struct
|
||||
let encoder = Pbrt.Encoder.create ()
|
||||
|
||||
let resource_to_string ~ctor ~enc resource =
|
||||
module Converter = struct
|
||||
let resource_to_string ~encoder ~ctor ~enc resource =
|
||||
let encoder =
|
||||
match encoder with
|
||||
| Some e -> e
|
||||
| None -> Pbrt.Encoder.create ()
|
||||
in
|
||||
let x = ctor resource in
|
||||
let@ _sc = Self_trace.with_ ~kind:Span.Span_kind_internal "encode-proto" in
|
||||
Pbrt.Encoder.reset encoder;
|
||||
enc x encoder;
|
||||
Pbrt.Encoder.to_string encoder
|
||||
|
||||
let logs resource_logs =
|
||||
let logs ?encoder resource_logs =
|
||||
resource_logs
|
||||
|> resource_to_string
|
||||
|> resource_to_string ~encoder
|
||||
~ctor:(fun r ->
|
||||
Logs_service.default_export_logs_service_request ~resource_logs:r ())
|
||||
~enc:Logs_service.encode_pb_export_logs_service_request
|
||||
|
||||
let metrics resource_metrics =
|
||||
let metrics ?encoder resource_metrics =
|
||||
resource_metrics
|
||||
|> resource_to_string
|
||||
|> resource_to_string ~encoder
|
||||
~ctor:(fun r ->
|
||||
Metrics_service.default_export_metrics_service_request
|
||||
~resource_metrics:r ())
|
||||
~enc:Metrics_service.encode_pb_export_metrics_service_request
|
||||
|
||||
let traces resource_spans =
|
||||
let traces ?encoder resource_spans =
|
||||
resource_spans
|
||||
|> resource_to_string
|
||||
|> resource_to_string ~encoder
|
||||
~ctor:(fun r ->
|
||||
Trace_service.default_export_trace_service_request ~resource_spans:r
|
||||
())
|
||||
|
|
|
|||
|
|
@ -5,13 +5,27 @@
|
|||
|
||||
NOTE: The converters share an underlying stateful encoder, so each domain or
|
||||
system thread should have its own [Converter] instance *)
|
||||
module Converter : functor () -> sig
|
||||
val logs : Opentelemetry_proto.Logs.resource_logs list -> string
|
||||
(** [logs ls] is a protobuf encoded string of the logs [ls] *)
|
||||
module Converter : sig
|
||||
val logs :
|
||||
?encoder:Pbrt.Encoder.t ->
|
||||
Opentelemetry_proto.Logs.resource_logs list ->
|
||||
string
|
||||
(** [logs ls] is a protobuf encoded string of the logs [ls]
|
||||
|
||||
val metrics : Opentelemetry_proto.Metrics.resource_metrics list -> string
|
||||
(** [metrics ms] is a protobuf encoded string of the metrics [ms] *)
|
||||
@param encoder provide an encoder state to reuse *)
|
||||
|
||||
val traces : Opentelemetry_proto.Trace.resource_spans list -> string
|
||||
(** [metrics ts] is a protobuf encoded string of the traces [ts] *)
|
||||
val metrics :
|
||||
?encoder:Pbrt.Encoder.t ->
|
||||
Opentelemetry_proto.Metrics.resource_metrics list ->
|
||||
string
|
||||
(** [metrics ms] is a protobuf encoded string of the metrics [ms]
|
||||
@param encoder provide an encoder state to reuse *)
|
||||
|
||||
val traces :
|
||||
?encoder:Pbrt.Encoder.t ->
|
||||
Opentelemetry_proto.Trace.resource_spans list ->
|
||||
string
|
||||
(** [metrics ts] is a protobuf encoded string of the traces [ts]
|
||||
|
||||
@param encoder provide an encoder state to reuse *)
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue