From 9453506d7b932b1abac0cb0d530e7cf09ee6991a Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Thu, 4 Dec 2025 14:25:27 -0500 Subject: [PATCH] migrate a few more things to lib/ from core/ --- src/core/span.ml | 16 ++++++++++++---- src/core/span.mli | 7 +++++++ src/{core => lib}/conventions.ml | 0 src/{core => lib}/gc_metrics.ml | 2 +- src/{core => lib}/gc_metrics.mli | 0 src/{core => lib}/globals.ml | 7 +------ src/{client => lib}/interval_limiter.ml | 0 src/{client => lib}/interval_limiter.mli | 0 src/lib/opentelemetry.ml | 4 ++++ 9 files changed, 25 insertions(+), 11 deletions(-) rename src/{core => lib}/conventions.ml (100%) rename src/{core => lib}/gc_metrics.ml (97%) rename src/{core => lib}/gc_metrics.mli (100%) rename src/{core => lib}/globals.ml (89%) rename src/{client => lib}/interval_limiter.ml (100%) rename src/{client => lib}/interval_limiter.mli (100%) diff --git a/src/core/span.ml b/src/core/span.ml index c4c0c8cd..7d2c3920 100644 --- a/src/core/span.ml +++ b/src/core/span.ml @@ -28,9 +28,10 @@ let[@inline] trace_id self = Trace_id.of_bytes self.trace_id let[@inline] is_not_dummy self = Span_id.is_valid (id self) -let make ?(kind = !Globals.default_span_kind) ?trace_state ?(attrs = []) - ?(events = []) ?status ~trace_id ~id ?parent ?(links = []) ~start_time - ~end_time name : t = +let default_kind = ref Proto.Trace.Span_kind_unspecified + +let make ?(kind = !default_kind) ?trace_state ?(attrs = []) ?(events = []) + ?status ~trace_id ~id ?parent ?(links = []) ~start_time ~end_time name : t = let trace_id = Trace_id.to_bytes trace_id in let parent_span_id = Option.map Span_id.to_bytes parent in let attributes = List.map Key_value.conv attrs in @@ -99,7 +100,14 @@ let record_exception (self : t) (exn : exn) (bt : Printexc.raw_backtrace) : unit add_event self ev ) -let[@inline] add_attrs (self : t) (attrs : unit -> Key_value.t list) : unit = +let add_attrs (self : t) (attrs : Key_value.t list) : unit = + if is_not_dummy self then ( + let attrs = List.rev_map Key_value.conv attrs in + let attrs = List.rev_append attrs self.attributes in + span_set_attributes self attrs + ) + +let add_attrs' (self : t) (attrs : unit -> Key_value.t list) : unit = if is_not_dummy self then ( let attrs = List.rev_map Key_value.conv (attrs ()) in let attrs = List.rev_append attrs self.attributes in diff --git a/src/core/span.mli b/src/core/span.mli index d4722edc..8d5da0e5 100644 --- a/src/core/span.mli +++ b/src/core/span.mli @@ -112,4 +112,11 @@ val set_kind : t -> Span_kind.t -> unit (** Set the span's kind. @since 0.11 *) +val default_kind : Span_kind.t ref +(** Default span kind in {!make} and {!create_new}. + + This will be used in all spans that do not specify [~kind] explicitly; it is + set to "internal", following directions from the [.proto] file. It can be + convenient to set "client" or "server" uniformly in here. *) + val k_context : t Context.key diff --git a/src/core/conventions.ml b/src/lib/conventions.ml similarity index 100% rename from src/core/conventions.ml rename to src/lib/conventions.ml diff --git a/src/core/gc_metrics.ml b/src/lib/gc_metrics.ml similarity index 97% rename from src/core/gc_metrics.ml rename to src/lib/gc_metrics.ml index e2ade0dd..dfc3e41d 100644 --- a/src/core/gc_metrics.ml +++ b/src/lib/gc_metrics.ml @@ -51,7 +51,7 @@ let setup ?(min_interval_s = default_interval_s) (exp : Exporter.t) = Exporter.on_tick exp on_tick let setup_on_main_exporter ?min_interval_s () = - match Exporter.Main_exporter.get () with + match Main_exporter.get () with | None -> () | Some exp -> setup ?min_interval_s exp diff --git a/src/core/gc_metrics.mli b/src/lib/gc_metrics.mli similarity index 100% rename from src/core/gc_metrics.mli rename to src/lib/gc_metrics.mli diff --git a/src/core/globals.ml b/src/lib/globals.ml similarity index 89% rename from src/core/globals.ml rename to src/lib/globals.ml index 74f7433a..c4d3c55b 100644 --- a/src/core/globals.ml +++ b/src/lib/globals.ml @@ -43,12 +43,7 @@ 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 -(** Default span kind in {!Span.create}. This will be used in all spans that do - not specify [~kind] explicitly; it is set to "internal", following - directions from the [.proto] file. It can be convenient to set "client" or - "server" uniformly in here. - @since 0.4 *) -let default_span_kind = ref Proto.Trace.Span_kind_internal +let default_span_kind = Span.default_kind open struct let runtime_attributes = diff --git a/src/client/interval_limiter.ml b/src/lib/interval_limiter.ml similarity index 100% rename from src/client/interval_limiter.ml rename to src/lib/interval_limiter.ml diff --git a/src/client/interval_limiter.mli b/src/lib/interval_limiter.mli similarity index 100% rename from src/client/interval_limiter.mli rename to src/lib/interval_limiter.mli diff --git a/src/lib/opentelemetry.ml b/src/lib/opentelemetry.ml index 42808709..5316afc2 100644 --- a/src/lib/opentelemetry.ml +++ b/src/lib/opentelemetry.ml @@ -7,6 +7,10 @@ module Alist = Alist (** Atomic list, for internal usage @since 0.7 *) +module Interval_limiter = Interval_limiter +(** Utility to limit the frequency of some event + @since NEXT_RELEASE *) + (** {2 Wire format} *) module Proto = Opentelemetry_proto