use crate::UtcDateTime;
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct JobIndexRow {
pub job_id: String,
pub payload_type: String,
pub stage: String,
pub stage_date: UtcDateTime,
pub revision: i64,
pub created_at: UtcDateTime,
pub wait_ms: Option<i64>,
pub wait_mode: Option<String>,
pub topic: Option<String>,
pub partition: Option<i64>,
pub sequence: Option<i64>,
pub parent_job_id: Option<String>,
pub date_expire: Option<UtcDateTime>,
}
#[derive(Debug, Clone, Default)]
pub struct JobIndexPage {
pub items: Vec<JobIndexRow>,
pub next_cursor: Option<i64>,
}
#[derive(Debug, Clone, Copy, Default)]
pub struct JobIndexWaitStats {
pub count: usize,
pub avg_ms: i64,
pub max_ms: i64,
}
#[derive(Debug, Clone, Default)]
pub struct JobIndexMetricsBatch {
pub transitions: Vec<(String, UtcDateTime, i64)>,
pub waits: Vec<(String, UtcDateTime, i64, i64, i64)>,
}
impl JobIndexMetricsBatch {
pub fn is_empty(&self) -> bool {
self.transitions.is_empty() && self.waits.is_empty()
}
}
#[derive(Debug, Clone)]
pub enum JobIndexChange {
Upsert(JobIndexRow),
Remove(String),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct QueueSample {
pub at: UtcDateTime,
pub queued: i64,
pub partitioned: i64,
}