mirror of
https://github.com/ocaml-tracing/ocaml-opentelemetry.git
synced 2026-03-07 18:37:56 -05:00
add Emitter_sample
This commit is contained in:
parent
843d10dae1
commit
4f6334dac0
4 changed files with 28 additions and 24 deletions
18
src/client/emitter_sample.ml
Normal file
18
src/client/emitter_sample.ml
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
open Opentelemetry_emitter
|
||||||
|
|
||||||
|
let add_sampler (self : Sampler.t) (e : _ Emitter.t) : _ Emitter.t =
|
||||||
|
let enabled () = e.enabled () in
|
||||||
|
let closed () = Emitter.closed e in
|
||||||
|
let flush_and_close () = Emitter.flush_and_close e in
|
||||||
|
let tick ~mtime = Emitter.tick e ~mtime in
|
||||||
|
|
||||||
|
let emit l =
|
||||||
|
if l <> [] && e.enabled () then (
|
||||||
|
let accepted = List.filter (fun _x -> Sampler.accept self) l in
|
||||||
|
if accepted <> [] then Emitter.emit e accepted
|
||||||
|
)
|
||||||
|
in
|
||||||
|
|
||||||
|
{ Emitter.closed; enabled; flush_and_close; tick; emit }
|
||||||
|
|
||||||
|
let sample ~proba_accept e = add_sampler (Sampler.create ~proba_accept ()) e
|
||||||
10
src/client/emitter_sample.mli
Normal file
10
src/client/emitter_sample.mli
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
open Opentelemetry_emitter
|
||||||
|
|
||||||
|
val add_sampler : Sampler.t -> 'a Emitter.t -> 'a Emitter.t
|
||||||
|
(** [add_sampler sampler e] is a new emitter that uses the [sampler] on each
|
||||||
|
individual signal before passing them to [e]. This means only
|
||||||
|
[Sampler.proba_accept sampler] of the signals will actually be emitted. *)
|
||||||
|
|
||||||
|
val sample : proba_accept:float -> 'a Emitter.t -> 'a Emitter.t
|
||||||
|
(** [sample ~proba_accept e] is
|
||||||
|
[add_sampler (Sampler.create ~proba_accept ()) e] *)
|
||||||
|
|
@ -30,20 +30,3 @@ let accept (self : t) : bool =
|
||||||
|
|
||||||
if res then Atomic.incr self.n_accepted;
|
if res then Atomic.incr self.n_accepted;
|
||||||
res
|
res
|
||||||
|
|
||||||
open Opentelemetry_emitter
|
|
||||||
|
|
||||||
let wrap_emitter (self : t) (e : _ Emitter.t) : _ Emitter.t =
|
|
||||||
let enabled () = e.enabled () in
|
|
||||||
let closed () = Emitter.closed e in
|
|
||||||
let flush_and_close () = Emitter.flush_and_close e in
|
|
||||||
let tick ~mtime = Emitter.tick e ~mtime in
|
|
||||||
|
|
||||||
let emit l =
|
|
||||||
if l <> [] && e.enabled () then (
|
|
||||||
let accepted = List.filter (fun _x -> accept self) l in
|
|
||||||
if accepted <> [] then Emitter.emit e accepted
|
|
||||||
)
|
|
||||||
in
|
|
||||||
|
|
||||||
{ Emitter.closed; enabled; flush_and_close; tick; emit }
|
|
||||||
|
|
|
||||||
|
|
@ -18,10 +18,3 @@ val proba_accept : t -> float
|
||||||
val actual_rate : t -> float
|
val actual_rate : t -> float
|
||||||
(** The ratio of signals we actually accepted so far. This should asymptotically
|
(** The ratio of signals we actually accepted so far. This should asymptotically
|
||||||
be equal to {!proba_accept} if the random generator is good. *)
|
be equal to {!proba_accept} if the random generator is good. *)
|
||||||
|
|
||||||
open Opentelemetry_emitter
|
|
||||||
|
|
||||||
val wrap_emitter : t -> 'a Emitter.t -> 'a Emitter.t
|
|
||||||
(** [wrap_emitter sampler e] is a new emitter that uses the [sampler] on each
|
|
||||||
individual signal before passing them to [e]. This means only [proba_accept]
|
|
||||||
of the signals will actually be emitted. *)
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue