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 super::AppsignalMetricsNormalizer;
28 use crate::{
29 event::{Metric, MetricKind, MetricValue},
30 test_util::metrics::{assert_normalize, tests},
31 };
32
33 #[test]
34 fn absolute_counter() {
35 tests::absolute_counter_normalize_to_incremental(AppsignalMetricsNormalizer);
36 }
37
38 #[test]
39 fn incremental_counter() {
40 tests::incremental_counter_normalize_to_incremental(AppsignalMetricsNormalizer);
41 }
42
43 #[test]
44 fn mixed_counter() {
45 tests::mixed_counter_normalize_to_incremental(AppsignalMetricsNormalizer);
46 }
47
48 #[test]
49 fn absolute_gauge() {
50 tests::absolute_gauge_normalize_to_absolute(AppsignalMetricsNormalizer);
51 }
52
53 #[test]
54 fn incremental_gauge() {
55 tests::incremental_gauge_normalize_to_absolute(AppsignalMetricsNormalizer);
56 }
57
58 #[test]
59 fn mixed_gauge() {
60 tests::mixed_gauge_normalize_to_absolute(AppsignalMetricsNormalizer);
61 }
62
63 #[test]
64 fn other_metrics() {
65 let metric = Metric::new(
66 "set",
67 MetricKind::Incremental,
68 MetricValue::Set {
69 values: BTreeSet::new(),
70 },
71 );
72
73 assert_normalize(
74 AppsignalMetricsNormalizer,
75 vec![metric.clone()],
76 vec![Some(metric)],
77 );
78 }
79}