metrics_procession/
lib.rs

1#![doc = include_str!("../README.md")]
2pub mod chunk;
3pub mod event;
4pub mod iter;
5pub mod label_set;
6pub mod procession;
7pub mod recorder;
8
9#[cfg(test)]
10mod tests {
11    use metrics::{Key, Label};
12
13    use crate::{
14        chunk::Chunk,
15        event::{Entry, Event, Op},
16        label_set::LabelSet,
17        procession::Procession,
18    };
19
20    #[test]
21    fn ser_de() {
22        let labels = LabelSet(
23            [
24                (
25                    Key::from_parts("label1", vec![Label::new("key", "value")]),
26                    1,
27                ),
28                (
29                    Key::from_parts(
30                        "label2",
31                        vec![Label::new("key", "value"), Label::new("other", "value")],
32                    ),
33                    2,
34                ),
35                (Key::from_parts("label3", vec![]), 3),
36            ]
37            .into_iter()
38            .collect(),
39        );
40        let streams = Procession {
41            labels,
42            chunks: vec![
43                Chunk {
44                    reference_time: time::OffsetDateTime::new_utc(
45                        time::Date::from_calendar_date(2025, time::Month::January, 1).unwrap(),
46                        time::Time::from_hms(0, 0, 0).unwrap(),
47                    ),
48                    events: vec![
49                        Event {
50                            entry: Entry::Counter {
51                                value: 1,
52                                op: Op::Add,
53                            },
54                            ms: 0,
55                            label: 1,
56                        },
57                        Event {
58                            entry: Entry::Gauge {
59                                value: 1.0,
60                                op: Op::Set,
61                            },
62                            ms: 1,
63                            label: 2,
64                        },
65                        Event {
66                            entry: Entry::Histogram { value: 1.0 },
67                            ms: 2,
68                            label: 3,
69                        },
70                    ],
71                },
72                Chunk {
73                    reference_time: time::OffsetDateTime::new_utc(
74                        time::Date::from_calendar_date(2025, time::Month::January, 1).unwrap(),
75                        time::Time::from_hms(1, 0, 0).unwrap(),
76                    ),
77                    events: vec![
78                        Event {
79                            entry: Entry::Counter {
80                                value: 1,
81                                op: Op::Set,
82                            },
83                            ms: 0,
84                            label: 1,
85                        },
86                        Event {
87                            entry: Entry::Gauge {
88                                value: 1.0,
89                                op: Op::Add,
90                            },
91                            ms: 1,
92                            label: 2,
93                        },
94                        Event {
95                            entry: Entry::Histogram { value: 1.0 },
96                            ms: 2,
97                            label: 3,
98                        },
99                    ],
100                },
101            ],
102        };
103        let json = serde_json::to_string_pretty(&streams).unwrap();
104        let back = serde_json::from_str(&json).unwrap();
105        assert_eq!(streams, back);
106    }
107}