#[derive(
Debug, Clone, Copy, PartialEq, Eq, Default, zerompk::ToMessagePack, zerompk::FromMessagePack,
)]
#[repr(u8)]
#[msgpack(c_enum)]
pub enum MissedPolicy {
#[default]
Skip = 0,
CatchUp = 1,
Queue = 2,
}
impl MissedPolicy {
pub fn as_str(self) -> &'static str {
match self {
Self::Skip => "SKIP",
Self::CatchUp => "CATCH_UP",
Self::Queue => "QUEUE",
}
}
pub fn from_str_opt(s: &str) -> Option<Self> {
match s.to_uppercase().as_str() {
"SKIP" => Some(Self::Skip),
"CATCH_UP" | "CATCHUP" => Some(Self::CatchUp),
"QUEUE" => Some(Self::Queue),
_ => None,
}
}
}
#[derive(
Debug, Clone, Copy, PartialEq, Eq, Default, zerompk::ToMessagePack, zerompk::FromMessagePack,
)]
#[repr(u8)]
#[msgpack(c_enum)]
pub enum ScheduleScope {
#[default]
Normal = 0,
Local = 1,
}
impl ScheduleScope {
pub fn as_str(self) -> &'static str {
match self {
Self::Normal => "NORMAL",
Self::Local => "LOCAL",
}
}
}
#[derive(Debug, Clone, zerompk::ToMessagePack, zerompk::FromMessagePack)]
#[msgpack(map, allow_unknown_fields)]
pub struct ScheduleDef {
pub tenant_id: u64,
pub name: String,
pub cron_expr: String,
pub body_sql: String,
pub scope: ScheduleScope,
pub missed_policy: MissedPolicy,
pub allow_overlap: bool,
pub enabled: bool,
#[msgpack(default)]
pub target_collection: Option<String>,
pub owner: String,
pub created_at: u64,
}
#[derive(Debug, Clone, zerompk::ToMessagePack, zerompk::FromMessagePack)]
pub struct JobRun {
pub schedule_name: String,
pub tenant_id: u64,
pub started_at: u64,
pub duration_ms: u64,
pub success: bool,
pub error: Option<String>,
}