mirror of
https://github.com/ocaml-tracing/ocaml-opentelemetry.git
synced 2026-03-09 04:17:56 -04:00
Merge pull request #15 from AestheticIntegration/missing-global-attrs
Missing global attrs in metrics
This commit is contained in:
commit
3f3a39eee7
1 changed files with 51 additions and 54 deletions
|
|
@ -240,38 +240,8 @@ module Conventions = struct
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
(** Process-wide metadata, environment variables, etc. *)
|
|
||||||
module Globals = struct
|
|
||||||
open Proto.Common
|
|
||||||
|
|
||||||
let service_name = ref "unknown_service"
|
|
||||||
(** Main service name metadata *)
|
|
||||||
|
|
||||||
let service_namespace = ref None
|
|
||||||
(** Namespace for the service *)
|
|
||||||
|
|
||||||
let instrumentation_library =
|
|
||||||
default_instrumentation_library
|
|
||||||
~name:"ocaml-opentelemetry" () (* TODO: version, perhaps with dune subst? *)
|
|
||||||
|
|
||||||
(** Global attributes, set via OTEL_RESOURCE_ATTRIBUTES *)
|
|
||||||
let global_attributes : key_value list =
|
|
||||||
let parse_pair s = match String.split_on_char '=' s with
|
|
||||||
| [a;b] -> default_key_value ~key:a ~value:(Some (String_value b)) ()
|
|
||||||
| _ -> failwith (Printf.sprintf "invalid attribute: %S" s)
|
|
||||||
in
|
|
||||||
try
|
|
||||||
Sys.getenv "OTEL_RESOURCE_ATTRIBUTES" |> String.split_on_char ','
|
|
||||||
|> List.map parse_pair
|
|
||||||
with _ -> []
|
|
||||||
|
|
||||||
(* add global attributes to this list *)
|
|
||||||
let merge_global_attributes_ into : _ list =
|
|
||||||
let not_redundant kv = List.for_all (fun kv' -> kv.key <> kv'.key) into in
|
|
||||||
List.rev_append (List.filter not_redundant global_attributes) into
|
|
||||||
end
|
|
||||||
|
|
||||||
type value = [`Int of int | `String of string | `Bool of bool | `None]
|
type value = [`Int of int | `String of string | `Bool of bool | `None]
|
||||||
|
|
||||||
type key_value = string * value
|
type key_value = string * value
|
||||||
|
|
||||||
(**/**)
|
(**/**)
|
||||||
|
|
@ -293,6 +263,52 @@ let _conv_key_value (k,v) =
|
||||||
|
|
||||||
(**/**)
|
(**/**)
|
||||||
|
|
||||||
|
(** Process-wide metadata, environment variables, etc. *)
|
||||||
|
module Globals = struct
|
||||||
|
open Proto.Common
|
||||||
|
|
||||||
|
let service_name = ref "unknown_service"
|
||||||
|
(** Main service name metadata *)
|
||||||
|
|
||||||
|
let service_namespace = ref None
|
||||||
|
(** Namespace for the service *)
|
||||||
|
|
||||||
|
let instrumentation_library =
|
||||||
|
default_instrumentation_library
|
||||||
|
~version:"%%VERSION%%"
|
||||||
|
~name:"ocaml-opentelemetry" ()
|
||||||
|
|
||||||
|
(** Global attributes, set via OTEL_RESOURCE_ATTRIBUTES *)
|
||||||
|
let global_attributes : key_value list =
|
||||||
|
let parse_pair s = match String.split_on_char '=' s with
|
||||||
|
| [a;b] -> default_key_value ~key:a ~value:(Some (String_value b)) ()
|
||||||
|
| _ -> failwith (Printf.sprintf "invalid attribute: %S" s)
|
||||||
|
in
|
||||||
|
try
|
||||||
|
Sys.getenv "OTEL_RESOURCE_ATTRIBUTES" |> String.split_on_char ','
|
||||||
|
|> List.map parse_pair
|
||||||
|
with _ -> []
|
||||||
|
|
||||||
|
(* add global attributes to this list *)
|
||||||
|
let merge_global_attributes_ into : _ list =
|
||||||
|
let not_redundant kv = List.for_all (fun kv' -> kv.key <> kv'.key) into in
|
||||||
|
List.rev_append (List.filter not_redundant global_attributes) into
|
||||||
|
|
||||||
|
let mk_attributes ?(service_name = !service_name) ?(attrs=[]) () : _ list =
|
||||||
|
let l = List.map _conv_key_value attrs in
|
||||||
|
let l =
|
||||||
|
default_key_value ~key:Conventions.Attributes.Service.name
|
||||||
|
~value:(Some (String_value service_name)) () :: l
|
||||||
|
in
|
||||||
|
let l = match !service_namespace with
|
||||||
|
| None -> l
|
||||||
|
| Some v ->
|
||||||
|
default_key_value ~key:Conventions.Attributes.Service.namespace
|
||||||
|
~value:(Some (String_value v)) () :: l
|
||||||
|
in
|
||||||
|
l |> merge_global_attributes_
|
||||||
|
end
|
||||||
|
|
||||||
(** Events.
|
(** Events.
|
||||||
|
|
||||||
Events occur at a given time and can carry attributes. They always
|
Events occur at a given time and can carry attributes. They always
|
||||||
|
|
@ -443,27 +459,12 @@ module Trace = struct
|
||||||
|
|
||||||
type span = Span.t
|
type span = Span.t
|
||||||
|
|
||||||
let make_resource_spans ?(service_name = !Globals.service_name) ?(attrs=[]) spans =
|
let make_resource_spans ?service_name ?attrs spans =
|
||||||
let ils =
|
let ils =
|
||||||
default_instrumentation_library_spans
|
default_instrumentation_library_spans
|
||||||
~instrumentation_library:(Some Globals.instrumentation_library)
|
~instrumentation_library:(Some Globals.instrumentation_library)
|
||||||
~spans () in
|
~spans () in
|
||||||
let attributes =
|
let attributes = Globals.mk_attributes ?service_name ?attrs () in
|
||||||
let open Proto.Common in
|
|
||||||
let open Conventions.Attributes in
|
|
||||||
let l = List.map _conv_key_value attrs in
|
|
||||||
let l =
|
|
||||||
default_key_value ~key:Service.name
|
|
||||||
~value:(Some (String_value service_name)) () :: l
|
|
||||||
in
|
|
||||||
let l = match !Globals.service_namespace with
|
|
||||||
| None -> l
|
|
||||||
| Some v ->
|
|
||||||
default_key_value ~key:Service.namespace
|
|
||||||
~value:(Some (String_value v)) () :: l
|
|
||||||
in
|
|
||||||
l |> Globals.merge_global_attributes_
|
|
||||||
in
|
|
||||||
let resource = Proto.Resource.default_resource ~attributes () in
|
let resource = Proto.Resource.default_resource ~attributes () in
|
||||||
default_resource_spans
|
default_resource_spans
|
||||||
~resource:(Some resource) ~instrumentation_library_spans:[ils] ()
|
~resource:(Some resource) ~instrumentation_library_spans:[ils] ()
|
||||||
|
|
@ -609,16 +610,12 @@ module Metrics = struct
|
||||||
(* TODO: exemplar *)
|
(* TODO: exemplar *)
|
||||||
|
|
||||||
(** Aggregate metrics into a {!Proto.Metrics.resource_metrics} *)
|
(** Aggregate metrics into a {!Proto.Metrics.resource_metrics} *)
|
||||||
let make_resource_metrics ?(attrs=[]) (l:t list) : resource_metrics =
|
let make_resource_metrics ?service_name ?attrs (l:t list) : resource_metrics =
|
||||||
let lm =
|
let lm =
|
||||||
default_instrumentation_library_metrics
|
default_instrumentation_library_metrics
|
||||||
~instrumentation_library:(Some Globals.instrumentation_library)
|
~instrumentation_library:(Some Globals.instrumentation_library)
|
||||||
~metrics:l () in
|
~metrics:l () in
|
||||||
let attributes =
|
let attributes = Globals.mk_attributes ?service_name ?attrs () in
|
||||||
let open Proto.Common in
|
|
||||||
let l = List.map _conv_key_value attrs in
|
|
||||||
l |> Globals.merge_global_attributes_
|
|
||||||
in
|
|
||||||
let resource = Proto.Resource.default_resource ~attributes () in
|
let resource = Proto.Resource.default_resource ~attributes () in
|
||||||
default_resource_metrics
|
default_resource_metrics
|
||||||
~instrumentation_library_metrics:[lm] ~resource:(Some resource) ()
|
~instrumentation_library_metrics:[lm] ~resource:(Some resource) ()
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue