panel/
panel.rs

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}