use std::collections::{HashMap, VecDeque};
use crate::core::topology::CoreId;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum BackgroundJobState {
Queued,
Running,
Succeeded,
Failed { reason: String },
Canceled,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct BackgroundJobRecord {
pub job_id: u64,
pub job_kind: String,
pub attempts: u32,
pub state: BackgroundJobState,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct BackgroundJobConfig {
pub max_queued_jobs: usize,
pub max_retained_terminal_jobs: usize,
}
impl Default for BackgroundJobConfig {
fn default() -> Self {
Self {
max_queued_jobs: 256,
max_retained_terminal_jobs: 2048,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum BackgroundJobError {
InvalidInput(String),
Backpressure {
queued_jobs: usize,
max_queued_jobs: usize,
},
Shutdown,
NotFound(u64),
InvalidTransition(String),
}
pub type BackgroundJobResult<T> = std::result::Result<T, BackgroundJobError>;
pub struct BackgroundJobTracker {
pub(super) config: BackgroundJobConfig,
pub(super) next_job_id: u64,
pub(super) is_shutdown: bool,
pub(super) queued: VecDeque<u64>,
pub(super) jobs: HashMap<u64, BackgroundJobRecord>,
pub(super) terminal_order: VecDeque<u64>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum HealthStatus {
Healthy,
Degraded,
Unhealthy,
}
#[derive(Debug, Clone, PartialEq)]
pub struct HealthReport {
pub status: HealthStatus,
pub reason: String,
pub error_rate: f64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Metrics {
pub query_total: u64,
pub query_errors: u64,
pub query_avg_latency_micros: u64,
pub query_p95_latency_micros: u64,
pub query_p99_latency_micros: u64,
pub ingest_accepted: u64,
pub ingest_rejected: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub struct CoreMetrics {
pub core_id: CoreId,
pub query_total: u64,
pub query_errors: u64,
pub query_avg_latency_micros: u64,
pub ingest_accepted: u64,
pub ingest_rejected: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub struct CoreMetricsAggregate {
pub query_total: u64,
pub query_errors: u64,
pub query_avg_latency_micros: u64,
pub ingest_accepted: u64,
pub ingest_rejected: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub(super) struct CoreMetricsAccumulator {
pub query_total: u64,
pub query_errors: u64,
pub query_latency_total_micros: u64,
pub ingest_accepted: u64,
pub ingest_rejected: u64,
}