metrics_procession/
lib.rs1#![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}