1use std::time::Duration;
2
3use metrix::{instruments::*, snapshot::Snapshot, PutsSnapshot, TimeUnit};
4
5fn main() {
6 let data_panel = Panel::named(AcceptAllLabels, "data_freshness")
7 .panel(
8 Panel::named(
9 (
10 Metric::EffectiveDataTimestamp,
11 Metric::EffectiveDataLatency,
12 Metric::DataAgeAlert,
13 Metric::DataAgeWarning,
14 ),
15 "effective",
16 )
17 .gauge(Gauge::new_with_defaults("epoch_ms").for_label(Metric::EffectiveDataTimestamp))
18 .gauge(
19 Gauge::new_with_defaults("latency_ms")
20 .tracking(60)
21 .group_values(true)
22 .display_time_unit(TimeUnit::Milliseconds)
23 .for_label(Metric::EffectiveDataLatency),
24 )
25 .histogram(
26 Histogram::new_with_defaults("latency_distribution_ms")
27 .display_time_unit(TimeUnit::Milliseconds)
28 .for_label(Metric::EffectiveDataLatency),
29 )
30 .handler(
31 StaircaseTimer::new_with_defaults("alert")
32 .switch_off_after(Duration::from_secs(90))
33 .for_label(Metric::DataAgeAlert),
34 )
35 .handler(
36 StaircaseTimer::new_with_defaults("warning")
37 .switch_off_after(Duration::from_secs(90))
38 .for_label(Metric::DataAgeWarning),
39 ),
40 )
41 .panel(
42 Panel::named((Metric::DbDataTimestamp, Metric::DbDataLatency), "db")
43 .gauge(Gauge::new_with_defaults("epoch_ms").for_label(Metric::DbDataTimestamp))
44 .gauge(
45 Gauge::new_with_defaults("latency_ms")
46 .tracking(60)
47 .display_time_unit(TimeUnit::Milliseconds)
48 .group_values(true)
49 .for_label(Metric::DbDataLatency),
50 )
51 .histogram(
52 Histogram::new_with_defaults("latency_distribution_ms")
53 .display_time_unit(TimeUnit::Milliseconds)
54 .for_label(Metric::DbDataLatency),
55 ),
56 )
57 .panel(
58 Panel::named(
59 (Metric::CacheDataTimestamp, Metric::CacheDataLatency),
60 "cache",
61 )
62 .gauge(Gauge::new_with_defaults("epoch_ms").for_label(Metric::CacheDataTimestamp))
63 .gauge(
64 Gauge::new_with_defaults("latency_ms")
65 .tracking(60)
66 .display_time_unit(TimeUnit::Milliseconds)
67 .group_values(true)
68 .for_label(Metric::CacheDataLatency),
69 )
70 .histogram(
71 Histogram::new_with_defaults("latency_distribution_ms")
72 .display_time_unit(TimeUnit::Milliseconds)
73 .for_label(Metric::CacheDataLatency),
74 ),
75 );
76
77 let mut snapshot = Snapshot::default();
78 data_panel.put_snapshot(&mut snapshot, false);
79 println!("{}", snapshot.to_default_json());
80}
81
82#[derive(Clone, PartialEq, Eq)]
83pub enum Metric {
84 EffectiveDataTimestamp,
85 EffectiveDataLatency,
86 DbDataTimestamp,
87 DbDataLatency,
88 CacheDataTimestamp,
89 CacheDataLatency,
90 DataAgeAlert,
91 DataAgeWarning,
92}