vector/sinks/appsignal/
normalizer.rs1use vector_lib::event::{Metric, MetricValue};
2
3use crate::sinks::util::buffer::metrics::{MetricNormalize, MetricSet};
4
5#[derive(Default)]
6pub(crate) struct AppsignalMetricsNormalizer;
7
8impl MetricNormalize for AppsignalMetricsNormalizer {
9 fn normalize(&mut self, state: &mut MetricSet, metric: Metric) -> Option<Metric> {
10 match &metric.value() {
13 MetricValue::Counter { .. } => state.make_incremental(metric),
16 MetricValue::Gauge { .. } => state.make_absolute(metric),
17 _ => Some(metric),
19 }
20 }
21}
22
23#[cfg(test)]
24mod tests {
25 use std::collections::BTreeSet;
26
27 use crate::event::{Metric, MetricKind, MetricValue};
28
29 use super::AppsignalMetricsNormalizer;
30 use crate::test_util::metrics::{assert_normalize, tests};
31
32 #[test]
33 fn absolute_counter() {
34 tests::absolute_counter_normalize_to_incremental(AppsignalMetricsNormalizer);
35 }
36
37 #[test]
38 fn incremental_counter() {
39 tests::incremental_counter_normalize_to_incremental(AppsignalMetricsNormalizer);
40 }
41
42 #[test]
43 fn mixed_counter() {
44 tests::mixed_counter_normalize_to_incremental(AppsignalMetricsNormalizer);
45 }
46
47 #[test]
48 fn absolute_gauge() {
49 tests::absolute_gauge_normalize_to_absolute(AppsignalMetricsNormalizer);
50 }
51
52 #[test]
53 fn incremental_gauge() {
54 tests::incremental_gauge_normalize_to_absolute(AppsignalMetricsNormalizer);
55 }
56
57 #[test]
58 fn mixed_gauge() {
59 tests::mixed_gauge_normalize_to_absolute(AppsignalMetricsNormalizer);
60 }
61
62 #[test]
63 fn other_metrics() {
64 let metric = Metric::new(
65 "set",
66 MetricKind::Incremental,
67 MetricValue::Set {
68 values: BTreeSet::new(),
69 },
70 );
71
72 assert_normalize(
73 AppsignalMetricsNormalizer,
74 vec![metric.clone()],
75 vec![Some(metric)],
76 );
77 }
78}