From c24dbebbf3aab3e767451d6e7257ae6b379b80b7 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Fri, 5 Dec 2025 23:51:59 -0500 Subject: [PATCH] fix metrics_callbacks' API to make it easier --- src/lib/metrics_callbacks.ml | 12 +++++++++++- src/lib/metrics_callbacks.mli | 8 ++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/lib/metrics_callbacks.ml b/src/lib/metrics_callbacks.ml index ef4e1ba9..81aa2055 100644 --- a/src/lib/metrics_callbacks.ml +++ b/src/lib/metrics_callbacks.ml @@ -22,10 +22,20 @@ let add_to_exporter (exp : Exporter.t) (self : t) = in Exporter.on_tick exp on_tick +let with_set_added_to_exporter (exp : Exporter.t) (f : t -> 'a) : 'a = + let set = create () in + add_to_exporter exp set; + f set + +let with_set_added_to_main_exporter (f : t -> unit) : unit = + match Main_exporter.get () with + | None -> () + | Some exp -> with_set_added_to_exporter exp f + module Main_set = struct let cur_set_ : t option Atomic.t = Atomic.make None - let rec get () = + let rec get () : t = match Atomic.get cur_set_ with | Some s -> s | None -> diff --git a/src/lib/metrics_callbacks.mli b/src/lib/metrics_callbacks.mli index b9db7b66..d66388ad 100644 --- a/src/lib/metrics_callbacks.mli +++ b/src/lib/metrics_callbacks.mli @@ -19,6 +19,14 @@ val add_metrics_cb : t -> (unit -> Metrics.t list) -> unit val add_to_exporter : Exporter.t -> t -> unit (** Make sure we export metrics at every [tick] of the exporter *) +val with_set_added_to_exporter : Exporter.t -> (t -> 'a) -> 'a +(** [with_set_added_to_exporter exp f] creates a set, adds it to the exporter, + and calls [f] on it *) + +val with_set_added_to_main_exporter : (t -> unit) -> unit +(** If there is a main exporter, add a set to it and call [f set], else do not + call [f] at all *) + module Main_set : sig val get : unit -> t (** The global set *)