#![allow(clippy::print_stdout, clippy::print_stderr)]
use spate::metrics::{DeserMetrics, Meter, MetricsSettings, install};
use std::time::Duration;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let handle = install(&MetricsSettings::default())?;
let batch_size = 512;
let orders_enriched = metrics::counter!("myapp_orders_enriched_total", "region" => "eu");
let enrich_seconds = metrics::histogram!("myapp_enrich_duration_seconds");
orders_enriched.increment(batch_size);
enrich_seconds.record(0.012);
let meter = Meter::new("metrics-demo", "enricher", "map");
let schema_fetches = meter.counter("schema_fetches_total", &[("registry", "prod".into())]);
let fetch_seconds = meter.histogram("schema_fetch_duration_seconds", &[]);
schema_fetches.increment(3);
fetch_seconds.record(0.004);
let deser = DeserMetrics::new(meter.labels());
deser.batch(batch_size, 0, Duration::from_micros(850));
let exposition = handle.render();
println!("{exposition}");
assert!(exposition.contains("myapp_orders_enriched_total"));
assert!(exposition.contains(
r#"spate_custom_schema_fetches_total{pipeline="metrics-demo",component="enricher",component_type="map",registry="prod"}"#
));
assert!(exposition.contains("spate_deser_records_total"));
Ok(())
}