use std::time::SystemTime;
use serde::{Deserialize, Serialize};
use crate::{EffectId, EffectRecord, Lease, WorkerId};
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum LateOutcome {
Succeeded,
Failed,
Interrupted,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct LateObservation {
pub id: EffectId,
pub effect_id: EffectId,
pub worker: WorkerId,
pub lease_epoch: u64,
pub attempt: u32,
pub attempt_started_at: Option<SystemTime>,
pub observed_at: SystemTime,
pub outcome: LateOutcome,
}
impl LateObservation {
pub fn new(
record: &EffectRecord,
lease: &Lease,
outcome: LateOutcome,
observed_at: SystemTime,
) -> Self {
Self {
id: EffectId::new(),
effect_id: record.id,
worker: lease.owner.clone(),
lease_epoch: lease.epoch,
attempt: record.attempt_count,
attempt_started_at: record.attempt_started_at,
observed_at,
outcome,
}
}
}