metrics_util::storage::reservoir

Struct AtomicSamplingReservoir

Source
pub struct AtomicSamplingReservoir { /* private fields */ }
Available on crate feature storage only.
Expand description

An atomic sampling reservoir.

Reservoir sampling is a technique used to produce a statistically representative sample of a data stream, in a fixed space, without knowing the length of the stream in advance. AtomicSamplingReservoir is a thread-safe version of a sampling reservoir, based on Vitter’s “Algorithm R”.

Utilizes an A/B-based storage mechanism to avoid contention between producers and the consumer, and a fast, thread-local PRNG (Xoshiro256**) to limit the per-call sampling overhead.

Implementations§

Source§

impl AtomicSamplingReservoir

Source

pub fn new(size: usize) -> Self

Creates a new AtomicSamplingReservoir that stores up to size samples.

Source

pub fn is_empty(&self) -> bool

Returns true if the reservoir is empty.

Source

pub fn push(&self, value: f64)

Pushes a sample into the reservoir.

Source

pub fn consume<F>(&self, f: F)
where F: FnMut(Drain<'_>),

Consumes all samples in the reservoir, passing them to the provided closure.

The underlying storage is swapped before the closure is called, and the previous storage is consumed.

Trait Implementations§

Source§

impl HistogramFn for AtomicSamplingReservoir

Source§

fn record(&self, value: f64)

Records a value into the histogram.
Source§

fn record_many(&self, value: f64, count: usize)

Records a value into the histogram multiple times.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V