use celers_core::TaskId;
use chrono::Utc;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskExecutionStats {
pub task_count: i64,
pub min_execution_secs: f64,
pub max_execution_secs: f64,
pub avg_execution_secs: f64,
pub stddev_execution_secs: f64,
pub p95_execution_secs: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueueSaturation {
pub pending_count: i64,
pub processing_count: i64,
pub total_tasks: i64,
pub capacity_threshold: i64,
pub utilization_percent: f64,
pub is_saturated: bool,
pub is_critical: bool,
pub status: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskLatencyPercentiles {
pub task_count: i64,
pub p50_latency_secs: f64,
pub p95_latency_secs: f64,
pub p99_latency_secs: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskStateTransition {
pub task_id: TaskId,
pub from_state: Option<String>,
pub to_state: String,
pub transitioned_at: chrono::DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskLatencyStats {
pub task_count: i64,
pub min_latency_secs: f64,
pub max_latency_secs: f64,
pub avg_latency_secs: f64,
pub stddev_latency_secs: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PriorityQueueStats {
pub priority: i32,
pub pending_count: i64,
pub processing_count: i64,
pub completed_count: i64,
pub failed_count: i64,
pub avg_wait_time_secs: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MigrationVerification {
pub is_complete: bool,
pub applied_count: usize,
pub missing_count: usize,
pub applied_migrations: Vec<String>,
pub missing_migrations: Vec<String>,
pub schema_valid: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryPerformanceProfile {
pub query_digest: String,
pub execution_count: i64,
pub avg_execution_time_ms: f64,
pub total_rows_examined: i64,
pub total_rows_sent: i64,
pub no_index_used_count: i64,
pub no_good_index_used_count: i64,
pub needs_optimization: bool,
}