use metrique::timers::Timer;
use metrique::unit::Microsecond;
use metrique::unit_of_work::metrics;
use std::time::Duration;
#[metrics(subfield)]
#[derive(Debug, Default)]
pub(crate) struct TlDrainStats {
pub buffers_flushed: u64,
pub buffers_locked: u64,
pub buffers_skipped_busy: u64,
pub events_flushed: u64,
pub dead_pruned: u64,
}
#[derive(Clone, Copy, Debug)]
#[metrics(value(string))]
pub(crate) enum Operation {
Flush,
TlDrain,
}
#[metrics(subfield, rename_all = "PascalCase")]
#[derive(Debug)]
pub(crate) struct FlushStats {
pub event_count: u64,
pub dropped_batches: u64,
#[metrics(unit = Microsecond)]
pub cpu_flush_duration: Duration,
}
#[metrics(rename_all = "PascalCase")]
#[derive(Debug)]
pub(crate) struct FlushMetrics {
pub operation: Operation,
#[metrics(flatten)]
pub stats: FlushStats,
#[metrics(unit = Microsecond)]
pub flush_duration: Timer,
pub last_flush: bool,
pub write_metadata_failed: bool,
pub finalize_failed: bool,
}
#[metrics(rename_all = "PascalCase")]
#[derive(Debug)]
pub(crate) struct TlDrainMetrics {
pub operation: Operation,
#[metrics(unit = Microsecond)]
pub duration: Timer,
#[metrics(flatten)]
pub stats: TlDrainStats,
pub last_drain: bool,
}