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: u64Cached observation count. Equal to reservoir.len() — the
per-window count in a delta snapshot.
cumulative_count: u64The 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: f64Cached 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
impl HistogramValue
pub fn from_hdr(reservoir: HdrHistogram<u64>) -> Self
Sourcepub fn with_cumulative_count(self, cumulative_count: u64) -> Self
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).
pub fn with_created(self, t: Instant) -> Self
pub fn with_bucket_exemplars(self, exemplars: Vec<Option<Exemplar>>) -> Self
Sourcepub fn project_buckets(&self, bounds: &[u64]) -> Vec<Bucket>
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.