use crate::error::QueryError;
use crate::job::{InstanceId, JobDetails, JobSummary, RecurringJobId};
use crate::metrics::MetricsSnapshot;
use chrono::{DateTime, Utc};
use tokio::sync::oneshot;
#[derive(Debug)]
pub(crate) enum CoordinatorCommand {
GetJobDetails {
job_id: RecurringJobId,
responder: oneshot::Sender<Result<JobDetails, QueryError>>,
},
ListAllJobs {
responder: oneshot::Sender<Vec<JobSummary>>, },
GetMetricsSnapshot {
responder: oneshot::Sender<MetricsSnapshot>, },
CancelJob {
job_id: RecurringJobId,
responder: oneshot::Sender<Result<(), QueryError>>,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ShutdownMode {
Graceful,
Force,
}
#[derive(Debug)]
pub(crate) enum WorkerOutcome {
Reschedule {
lineage_id: RecurringJobId,
completed_instance_id: InstanceId,
next_run_time: DateTime<Utc>,
updated_retry_count: u32,
},
Complete {
lineage_id: RecurringJobId,
completed_instance_id: InstanceId,
is_permanent_failure: bool,
},
FetchFailed {
instance_id: InstanceId,
lineage_id: RecurringJobId,
},
}