pub struct LabeledHistogram<L: LabelEnum> { /* private fields */ }Expand description
A histogram indexed by an enum label, providing O(1) dimensional metrics.
Each label variant has its own histogram with independent buckets.
§Example
ⓘ
use fast_telemetry::{LabeledHistogram, LabelEnum};
#[derive(Copy, Clone, Debug)]
enum Endpoint { Api, Auth, Static }
impl LabelEnum for Endpoint {
const CARDINALITY: usize = 3;
const LABEL_NAME: &'static str = "endpoint";
fn as_index(self) -> usize { self as usize }
fn from_index(index: usize) -> Self {
match index {
0 => Self::Api, 1 => Self::Auth, _ => Self::Static,
}
}
fn variant_name(self) -> &'static str {
match self {
Self::Api => "api", Self::Auth => "auth", Self::Static => "static",
}
}
}
let histogram: LabeledHistogram<Endpoint> = LabeledHistogram::with_latency_buckets(4);
histogram.record(Endpoint::Api, 150); // 150µs
histogram.record(Endpoint::Auth, 2000); // 2ms
// Iteration for export
for (label, buckets, sum, count) in histogram.iter() {
println!("{}={}: count={}", Endpoint::LABEL_NAME, label.variant_name(), count);
}Implementations§
Source§impl<L: LabelEnum> LabeledHistogram<L>
impl<L: LabelEnum> LabeledHistogram<L>
Sourcepub fn new(bounds: &[u64], shard_count: usize) -> Self
pub fn new(bounds: &[u64], shard_count: usize) -> Self
Create a labeled histogram with custom bucket boundaries.
Each label variant gets its own histogram with these boundaries.
Sourcepub fn with_latency_buckets(shard_count: usize) -> Self
pub fn with_latency_buckets(shard_count: usize) -> Self
Create a labeled histogram with default latency buckets (microseconds).
Buckets: 10µs, 50µs, 100µs, 500µs, 1ms, 5ms, 10ms, 50ms, 100ms, 500ms, 1s, 5s, 10s
Sourcepub fn record(&self, label: L, value: u64)
pub fn record(&self, label: L, value: u64)
Record a value in the histogram for the given label.
Trait Implementations§
Source§impl<L: LabelEnum> DogStatsDExport for LabeledHistogram<L>
impl<L: LabelEnum> DogStatsDExport for LabeledHistogram<L>
Source§impl<L: LabelEnum> OtlpExport for LabeledHistogram<L>
impl<L: LabelEnum> OtlpExport for LabeledHistogram<L>
Source§impl<L: LabelEnum> PrometheusExport for LabeledHistogram<L>
impl<L: LabelEnum> PrometheusExport for LabeledHistogram<L>
Auto Trait Implementations§
impl<L> Freeze for LabeledHistogram<L>
impl<L> RefUnwindSafe for LabeledHistogram<L>where
L: RefUnwindSafe,
impl<L> Send for LabeledHistogram<L>where
L: Send,
impl<L> Sync for LabeledHistogram<L>where
L: Sync,
impl<L> Unpin for LabeledHistogram<L>where
L: Unpin,
impl<L> UnsafeUnpin for LabeledHistogram<L>
impl<L> UnwindSafe for LabeledHistogram<L>where
L: UnwindSafe,
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
Mutably borrows from an owned value. Read more
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>
Wrap the input message
T in a tonic::Request