mirror of https://github.com/fralalonde/dipstick
50 lines
1.2 KiB
Rust
50 lines
1.2 KiB
Rust
//!
|
|
//! A sample application to demonstrate flush-triggered and scheduled observation of gauge values.
|
|
//!
|
|
//! This is the expected output:
|
|
//!
|
|
//! ```
|
|
//! cargo run --example observer
|
|
//! process.threads 4
|
|
//! process.uptime 6
|
|
//! process.threads 4
|
|
//! process.uptime 6
|
|
//! ...
|
|
//! ```
|
|
//!
|
|
|
|
use std::time::{Duration, Instant};
|
|
|
|
use dipstick::*;
|
|
|
|
fn main() {
|
|
let metrics = AtomicBucket::new().named("process");
|
|
metrics.drain(Stream::write_to_stdout());
|
|
metrics.flush_every(Duration::from_secs(3));
|
|
|
|
let uptime = metrics.gauge("uptime");
|
|
metrics.observe(uptime, |_| 6).on_flush();
|
|
|
|
// record number of threads in pool every second
|
|
let scheduled = metrics
|
|
.observe(metrics.gauge("threads"), thread_count)
|
|
.every(Duration::from_secs(1));
|
|
|
|
// "heartbeat" metric
|
|
let on_flush = metrics
|
|
.observe(metrics.marker("heartbeat"), |_| 1)
|
|
.on_flush();
|
|
|
|
for _ in 0..1000 {
|
|
std::thread::sleep(Duration::from_millis(40));
|
|
}
|
|
|
|
on_flush.cancel();
|
|
scheduled.cancel();
|
|
}
|
|
|
|
/// Query number of running threads in this process using Linux's /proc filesystem.
|
|
fn thread_count(_now: Instant) -> MetricValue {
|
|
4
|
|
}
|