pub struct CounterSetBuffer<'a> { /* private fields */ }Expand description
A local write buffer for a CounterSet.
Use one buffer per worker/thread when a hot path records several related
counters per logical operation. The buffer accumulates deltas locally and
flushes them to the backing CounterSet every flush_every completed
operations, reducing shared atomic writes on very hot paths.
Individual updates are supported with CounterSetBuffer::inc and
CounterSetBuffer::add. Call CounterSetBuffer::finish_op once after
recording all updates for a logical operation. Full-group updates such as
CounterSetBuffer::inc_all and CounterSetBuffer::add_values already
finish the operation.
The buffer also flushes on drop, but long-lived services should still flush at request or task boundaries when they need prompt visibility to exporters.
use fast_telemetry::{CounterSet, CounterSetBuffer};
const REQUESTS: usize = 0;
const BYTES: usize = 1;
const ERRORS: usize = 2;
let counters = CounterSet::new(4, 3);
let mut buffer = CounterSetBuffer::new(&counters, 64);
buffer.inc(REQUESTS);
buffer.add(BYTES, 4096);
buffer.finish_op();
buffer.inc(REQUESTS);
buffer.inc(ERRORS);
buffer.finish_op();
buffer.flush();
assert_eq!(counters.sum(REQUESTS), 2);
assert_eq!(counters.sum(BYTES), 4096);
assert_eq!(counters.sum(ERRORS), 1);Implementations§
Source§impl<'a> CounterSetBuffer<'a>
impl<'a> CounterSetBuffer<'a>
Sourcepub fn new(counters: &'a CounterSet, flush_every: usize) -> Self
pub fn new(counters: &'a CounterSet, flush_every: usize) -> Self
Creates a local buffer for a grouped counter set.
Sourcepub fn inc_all(&mut self)
pub fn inc_all(&mut self)
Increments every buffered counter and marks one logical operation complete.
Sourcepub fn add_all(&mut self, value: isize)
pub fn add_all(&mut self, value: isize)
Adds the same value to every buffered counter and marks one logical operation complete.
Sourcepub fn add_values(&mut self, values: &[isize])
pub fn add_values(&mut self, values: &[isize])
Adds one value per buffered counter and marks one logical operation complete.
Trait Implementations§
Source§impl Drop for CounterSetBuffer<'_>
impl Drop for CounterSetBuffer<'_>
Auto Trait Implementations§
impl<'a> Freeze for CounterSetBuffer<'a>
impl<'a> RefUnwindSafe for CounterSetBuffer<'a>
impl<'a> Send for CounterSetBuffer<'a>
impl<'a> Sync for CounterSetBuffer<'a>
impl<'a> Unpin for CounterSetBuffer<'a>
impl<'a> UnsafeUnpin for CounterSetBuffer<'a>
impl<'a> UnwindSafe for CounterSetBuffer<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request