custom_publish/
custom_publish.rs1use dipstick::*;
5use std::time::Duration;
6
7fn main() {
8 fn custom_statistics(
9 kind: InputKind,
10 mut name: MetricName,
11 score: ScoreType,
12 ) -> Option<(InputKind, MetricName, MetricValue)> {
13 match (kind, score) {
14 (InputKind::Gauge, _) => None,
16
17 (_, ScoreType::Count(count)) => {
19 if let Some(last) = name.pop_back() {
20 Some((
21 InputKind::Counter,
22 name.append("customized_add_prefix")
23 .append(format!("{}_and_a_suffix", last)),
24 count,
25 ))
26 } else {
27 None
28 }
29 }
30
31 (kind, ScoreType::Sum(sum)) => Some((kind, name.append("per_thousand"), sum / 1000)),
33
34 (kind, ScoreType::Mean(avg)) => Some((kind, name, avg.round() as MetricValue)),
36
37 _ => None,
39 }
40 }
41
42 AtomicBucket::default_drain(Stream::write_to_stderr());
44 AtomicBucket::default_stats(custom_statistics);
45
46 let app_metrics = AtomicBucket::new();
47
48 app_metrics.flush_every(Duration::from_secs(3));
50
51 let counter = app_metrics.counter("counter_a");
52 let timer = app_metrics.timer("timer_b");
53 let gauge = app_metrics.gauge("gauge_c");
54 loop {
55 counter.count(11);
56 timer.interval_us(654654);
57 gauge.value(3534);
58 }
59}