diff --git a/src/client-ocurl/opentelemetry_client_ocurl.ml b/src/client-ocurl/opentelemetry_client_ocurl.ml index 68a8d3cb..9d858544 100644 --- a/src/client-ocurl/opentelemetry_client_ocurl.ml +++ b/src/client-ocurl/opentelemetry_client_ocurl.ml @@ -289,8 +289,8 @@ end = struct let batch_max_size_ = 200 - let should_send_batch_ ~config ~now (b : _ Batch.t) : bool = - Batch.len b > 0 + let should_send_batch_ ?(side = []) ~config ~now (b : _ Batch.t) : bool = + (Batch.len b > 0 || side != []) && (Batch.len b >= batch_max_size_ || let timeout = Mtime.Span.(config.Config.batch_timeout_ms * ms) in @@ -348,12 +348,17 @@ end = struct Queue.clear local_q; if !must_flush_all then ( - if Batch.len batches.metrics > 0 then send_metrics (); + if Batch.len batches.metrics > 0 || not (AList.is_empty gc_metrics) + then + send_metrics (); if Batch.len batches.logs > 0 then send_logs (); if Batch.len batches.traces > 0 then send_traces () ) else ( let now = Mtime_clock.now () in - if should_send_batch_ ~config ~now batches.metrics then + if + should_send_batch_ ~config ~now batches.metrics + ~side:(AList.get gc_metrics) + then send_metrics (); if should_send_batch_ ~config ~now batches.traces then send_traces (); diff --git a/src/core/AList.ml b/src/core/AList.ml index faec8000..356f2630 100644 --- a/src/core/AList.ml +++ b/src/core/AList.ml @@ -4,6 +4,11 @@ type 'a t = 'a list Atomic.t let make () = Atomic.make [] +let[@inline] is_empty self : bool = + match Atomic.get self with + | [] -> true + | _ :: _ -> false + let get = Atomic.get let add self x = diff --git a/src/core/AList.mli b/src/core/AList.mli index 4799dd6b..832e3c2e 100644 --- a/src/core/AList.mli +++ b/src/core/AList.mli @@ -5,6 +5,8 @@ type 'a t val get : 'a t -> 'a list (** Snapshot *) +val is_empty : _ t -> bool + val make : unit -> 'a t val add : 'a t -> 'a -> unit