opentelemetry_spanprocessor_any/sdk/metrics/aggregators/
mod.rs

1//! Metric Aggregators
2use crate::metrics::{Descriptor, InstrumentKind, MetricsError, Number, NumberKind, Result};
3
4mod array;
5mod ddsketch;
6mod histogram;
7mod last_value;
8mod min_max_sum_count;
9mod sum;
10
11pub use array::{array, ArrayAggregator};
12pub use ddsketch::{ddsketch, DdSketchAggregator, DdSketchConfig};
13pub use histogram::{histogram, HistogramAggregator};
14pub use last_value::{last_value, LastValueAggregator};
15pub use min_max_sum_count::{min_max_sum_count, MinMaxSumCountAggregator};
16pub use sum::{sum, SumAggregator};
17
18/// RangeTest is a common routine for testing for valid input values. This
19/// rejects NaN values. This rejects negative values when the metric instrument
20/// does not support negative values, including monotonic counter metrics and
21/// absolute ValueRecorder metrics.
22pub fn range_test(number: &Number, descriptor: &Descriptor) -> Result<()> {
23    if descriptor.number_kind() == &NumberKind::F64 && number.is_nan() {
24        return Err(MetricsError::NaNInput);
25    }
26
27    match descriptor.instrument_kind() {
28        InstrumentKind::Counter | InstrumentKind::SumObserver
29            if descriptor.number_kind() == &NumberKind::F64 =>
30        {
31            if number.is_negative(descriptor.number_kind()) {
32                return Err(MetricsError::NegativeInput);
33            }
34        }
35        _ => (),
36    };
37    Ok(())
38}