mirror of
https://github.com/ocaml-tracing/ocaml-opentelemetry.git
synced 2026-03-08 03:47:59 -04:00
110 lines
2.9 KiB
OCaml
110 lines
2.9 KiB
OCaml
module Trace_service = Opentelemetry.Proto.Trace_service
|
|
module Metrics_service = Opentelemetry.Proto.Metrics_service
|
|
module Logs_service = Opentelemetry.Proto.Logs_service
|
|
module Span = Opentelemetry.Span
|
|
|
|
let ( let@ ) = ( @@ )
|
|
|
|
module Proto = Opentelemetry.Proto
|
|
|
|
type t =
|
|
| Traces of Proto.Trace.resource_spans list
|
|
| Metrics of Proto.Metrics.resource_metrics list
|
|
| Logs of Proto.Logs.resource_logs list
|
|
|
|
let to_traces = function
|
|
| Traces xs -> Some xs
|
|
| _ -> None
|
|
|
|
let to_metrics = function
|
|
| Metrics xs -> Some xs
|
|
| _ -> None
|
|
|
|
let to_logs = function
|
|
| Logs xs -> Some xs
|
|
| _ -> None
|
|
|
|
let is_traces = function
|
|
| Traces _ -> true
|
|
| _ -> false
|
|
|
|
let is_metrics = function
|
|
| Metrics _ -> true
|
|
| _ -> false
|
|
|
|
let is_logs = function
|
|
| Logs _ -> true
|
|
| _ -> false
|
|
|
|
module Encode = struct
|
|
let resource_to_string ~encoder ~ctor ~enc resource : string =
|
|
let encoder =
|
|
match encoder with
|
|
| Some e ->
|
|
Pbrt.Encoder.reset 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
|
|
enc x encoder;
|
|
Pbrt.Encoder.to_string encoder
|
|
|
|
let logs ?encoder resource_logs =
|
|
resource_to_string ~encoder resource_logs
|
|
~ctor:(fun r ->
|
|
Logs_service.make_export_logs_service_request ~resource_logs:r ())
|
|
~enc:Logs_service.encode_pb_export_logs_service_request
|
|
|
|
let metrics ?encoder resource_metrics =
|
|
resource_to_string ~encoder resource_metrics
|
|
~ctor:(fun r ->
|
|
Metrics_service.make_export_metrics_service_request ~resource_metrics:r
|
|
())
|
|
~enc:Metrics_service.encode_pb_export_metrics_service_request
|
|
|
|
let traces ?encoder resource_spans =
|
|
resource_to_string ~encoder resource_spans
|
|
~ctor:(fun r ->
|
|
Trace_service.make_export_trace_service_request ~resource_spans:r ())
|
|
~enc:Trace_service.encode_pb_export_trace_service_request
|
|
end
|
|
|
|
module Decode = struct
|
|
let resource_of_string ~dec s = Pbrt.Decoder.of_string s |> dec
|
|
|
|
let logs data =
|
|
(resource_of_string ~dec:Logs_service.decode_pb_export_logs_service_request
|
|
data)
|
|
.resource_logs
|
|
|
|
let metrics data =
|
|
(resource_of_string
|
|
~dec:Metrics_service.decode_pb_export_metrics_service_request data)
|
|
.resource_metrics
|
|
|
|
let traces data =
|
|
(resource_of_string
|
|
~dec:Trace_service.decode_pb_export_trace_service_request data)
|
|
.resource_spans
|
|
end
|
|
|
|
module Pp = struct
|
|
let pp_sep fmt () = Format.fprintf fmt ",@."
|
|
|
|
let pp_signal pp fmt t =
|
|
Format.fprintf fmt "[@ @[";
|
|
Format.pp_print_list ~pp_sep pp fmt t;
|
|
Format.fprintf fmt "@ ]@]@."
|
|
|
|
let logs = pp_signal Proto.Logs.pp_resource_logs
|
|
|
|
let metrics = pp_signal Proto.Metrics.pp_resource_metrics
|
|
|
|
let traces = pp_signal Proto.Trace.pp_resource_spans
|
|
|
|
let pp fmt = function
|
|
| Logs ls -> logs fmt ls
|
|
| Metrics ms -> metrics fmt ms
|
|
| Traces ts -> traces fmt ts
|
|
end
|