proxy/
proxy.rs

1//! Use the proxy to dynamically switch the metrics input & names.
2
3use dipstick::{Input, InputScope, Prefixed, Proxy, Stream};
4use std::thread::sleep;
5use std::time::Duration;
6
7fn main() {
8    let root_proxy = Proxy::default();
9    let sub = root_proxy.named("sub");
10
11    let count1 = root_proxy.counter("counter_a");
12
13    let count2 = sub.counter("counter_b");
14
15    loop {
16        let stdout = Stream::write_to_stdout().metrics();
17        root_proxy.target(stdout.clone());
18        count1.count(1);
19        count2.count(2);
20
21        // route every metric from the root to stdout with prefix "root"
22        root_proxy.target(stdout.named("root"));
23        count1.count(3);
24        count2.count(4);
25
26        // route metrics from "sub" to stdout with prefix "mutant"
27        sub.target(stdout.named("mutant"));
28        count1.count(5);
29        count2.count(6);
30
31        // clear root metrics route, "sub" still appears
32        root_proxy.unset_target();
33        count1.count(7);
34        count2.count(8);
35
36        // now no metrics appear
37        sub.unset_target();
38        count1.count(9);
39        count2.count(10);
40
41        // go back to initial single un-prefixed route
42        root_proxy.target(stdout.clone());
43        count1.count(11);
44        count2.count(12);
45
46        sleep(Duration::from_secs(1));
47
48        println!()
49    }
50}