Skip to main content

HistogramValue

Struct HistogramValue 

Source
pub struct HistogramValue {
    pub reservoir: Arc<Histogram<u64>>,
    pub count: u64,
    pub cumulative_count: u64,
    pub sum: f64,
    pub created: Option<Instant>,
    pub bucket_exemplars: Vec<Option<Exemplar>>,
}
Expand description

OpenMetrics §5.3.1 histogram point. Internally carries the HDR reservoir as the source of truth — OpenMetrics-shaped cumulative buckets are derived on demand at exposition time.

sum / count are derivable from the reservoir but cached for O(1) access. created is the series start time (component start) per spec.

Per-bucket exemplars are NOT stored on the reservoir — they live in HistogramValue::bucket_exemplars keyed by bucket index of the consumer’s eventual bucket layout. (Combine semantics: most-recent-wins by MetricPoint.timestamp, per SRD-42 §“Exemplars → Combine semantics”.)

Fields§

§reservoir: Arc<Histogram<u64>>

HDR reservoir — the lossless source of truth for combining across cascade folds and ephemeral merges.

§count: u64

Cached observation count. Equal to reservoir.len() — the per-window count in a delta snapshot.

§cumulative_count: u64

The cumulative total observation count at this point’s timestamp (monotonic, Prometheus/VM-schematic), carried alongside the per-window count exactly as CounterValue carries cumulative alongside total. The queryapi exposes this so MetricsQL rate()/increase/*_over_time over a histogram’s count are PromQL-correct. Time-coalesce keeps the latest; cross-component aggregate sums it. (The percentile reservoir stays windowed — see the cumulative-counter note.)

§sum: f64

Cached observation sum (nanoseconds for latency timers).

§created: Option<Instant>

Series start time per spec §5.3; optional.

§bucket_exemplars: Vec<Option<Exemplar>>

Sampled exemplars, one per bucket of an eventual exposition layout. Sparse: an empty slot means “no exemplar for that bucket”. See SRD-42 §“Exemplars”.

Implementations§

Source§

impl HistogramValue

Source

pub fn from_hdr(reservoir: HdrHistogram<u64>) -> Self

Source

pub fn with_cumulative_count(self, cumulative_count: u64) -> Self

Override the cumulative observation count (the cadence capture path sets the accumulated absolute total here).

Source

pub fn with_created(self, t: Instant) -> Self

Source

pub fn with_bucket_exemplars(self, exemplars: Vec<Option<Exemplar>>) -> Self

Source

pub fn project_buckets(&self, bounds: &[u64]) -> Vec<Bucket>

Project to OpenMetrics-shaped cumulative buckets at the given upper bounds. Per spec §5.3, the final bucket MUST have upper_bound = +Inf; this helper appends it automatically if not present.

bounds should be sorted ascending. Returns (upper_bound, cumulative_count) pairs.

Trait Implementations§

Source§

impl Clone for HistogramValue

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for HistogramValue

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.