use std::time::SystemTime;
use metrique::ServiceMetrics;
use metrique::json::Json;
use metrique::unit_of_work::metrics;
use metrique::writer::{
AttachGlobalEntrySinkExt, Entry, EntryIoStreamExt, FormatExt, GlobalEntrySink,
};
#[derive(Debug)]
#[metrics]
struct RequestMetrics {
#[metrics(timestamp)]
timestamp: SystemTime,
operation: &'static str,
status: &'static str,
number_of_ducks: usize,
active_plugins: Vec<String>,
}
impl RequestMetrics {
fn init(operation: &'static str) -> RequestMetricsGuard {
RequestMetrics {
timestamp: SystemTime::now(),
operation,
status: "INCOMPLETE",
number_of_ducks: 0,
active_plugins: vec!["auth".into(), "logging".into()],
}
.append_on_drop(ServiceMetrics::sink())
}
}
#[derive(Entry)]
#[entry]
struct Globals {
region: String,
}
fn main() {
let globals = Globals {
region: "us-east-1".to_string(),
};
let _handle = ServiceMetrics::attach_to_stream(
Json::new()
.output_to_makewriter(|| std::io::stdout().lock())
.merge_globals(globals),
);
let mut request = RequestMetrics::init("CountDucks");
request.number_of_ducks += 10;
request.status = "SUCCESS";
}