feat: add scheduler data types (Schedule, ScheduledJob, JobRun)
This commit is contained in:
parent
75b8f7b8a5
commit
4e5f412c2d
@ -9,6 +9,7 @@ pub mod protocol;
|
||||
pub mod channels;
|
||||
pub mod logging;
|
||||
pub mod observability;
|
||||
pub mod scheduler;
|
||||
pub mod skills;
|
||||
pub mod storage;
|
||||
pub mod tools;
|
||||
|
||||
5
src/scheduler/mod.rs
Normal file
5
src/scheduler/mod.rs
Normal file
@ -0,0 +1,5 @@
|
||||
pub mod types;
|
||||
pub mod store;
|
||||
pub mod tools;
|
||||
|
||||
pub use types::{JobRun, Schedule, ScheduledJob};
|
||||
1
src/scheduler/store.rs
Normal file
1
src/scheduler/store.rs
Normal file
@ -0,0 +1 @@
|
||||
// Stub — will be filled in Task 5
|
||||
1
src/scheduler/tools.rs
Normal file
1
src/scheduler/tools.rs
Normal file
@ -0,0 +1 @@
|
||||
// Stub — will be filled in Task 9
|
||||
50
src/scheduler/types.rs
Normal file
50
src/scheduler/types.rs
Normal file
@ -0,0 +1,50 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
/// How a job is scheduled. Serialized as JSON in the database `schedule` column.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(tag = "type")]
|
||||
pub enum Schedule {
|
||||
/// One-shot: fires once at a specific Unix millisecond timestamp, then disables.
|
||||
#[serde(rename = "at")]
|
||||
At { at: i64 },
|
||||
/// Recurring: fires every `every_ms` milliseconds.
|
||||
#[serde(rename = "every")]
|
||||
Every { every_ms: u64 },
|
||||
/// Recurring: fires on a cron schedule with optional timezone.
|
||||
#[serde(rename = "cron")]
|
||||
Cron { expr: String, tz: Option<String> },
|
||||
}
|
||||
|
||||
/// A scheduled job stored in the database.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct ScheduledJob {
|
||||
pub id: String,
|
||||
pub name: String,
|
||||
/// JSON-serialized `Schedule` stored as TEXT in SQLite.
|
||||
pub schedule: Schedule,
|
||||
pub prompt: String,
|
||||
pub channel: String,
|
||||
pub chat_id: String,
|
||||
pub model: Option<String>,
|
||||
pub enabled: bool,
|
||||
pub delete_after_run: bool,
|
||||
pub next_run_at: i64,
|
||||
pub last_run_at: Option<i64>,
|
||||
pub last_status: Option<String>,
|
||||
pub last_error: Option<String>,
|
||||
pub created_at: i64,
|
||||
pub updated_at: i64,
|
||||
}
|
||||
|
||||
/// A single execution record for a job.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct JobRun {
|
||||
pub id: i64,
|
||||
pub job_id: String,
|
||||
pub started_at: i64,
|
||||
pub finished_at: i64,
|
||||
pub status: String,
|
||||
pub output: Option<String>,
|
||||
pub error: Option<String>,
|
||||
pub duration_ms: i64,
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user