use crate::worker::pipeline_metrics::{MetriqueResult, PipelineMetrics};
use metrique::timers::Timer;
use metrique::unit::{Byte, Millisecond};
use metrique::unit_of_work::metrics;
#[derive(Clone, Copy, Debug)]
#[metrics(value(string))]
pub(crate) enum Operation {
ProcessSegment,
WorkerCycle,
}
#[metrics(rename_all = "PascalCase")]
#[derive(Debug)]
pub(crate) struct WorkerCycleMetrics {
pub operation: Operation,
pub memory_queued_segments: Option<u64>,
#[metrics(unit = metrique::unit::Byte)]
pub memory_queued_bytes: Option<u64>,
pub in_flight_segments: u64,
#[metrics(unit = metrique::unit::Byte)]
pub in_flight_bytes: u64,
#[metrics(unit = metrique::unit::Byte)]
pub memory_peak_in_flight_bytes: Option<u64>,
pub segments_evicted: u64,
pub segments_dispatched: u64,
}
#[metrics(rename_all = "PascalCase")]
#[derive(Debug)]
pub(crate) struct SegmentProcessMetrics {
pub operation: Operation,
#[metrics(unit = Millisecond)]
pub total_time: Timer,
#[metrics(flatten)]
pub status: Option<MetriqueResult>,
pub segment_index: u32,
#[metrics(unit = Byte)]
pub uncompressed_size: u64,
#[metrics(unit = Byte)]
pub compressed_size: Option<u64>,
pub invalid_file_header: bool,
pub panicked: bool,
pub panic_message: Option<String>,
#[metrics(flatten)]
pub pipeline: PipelineMetrics,
}