diff options
| author | soryu <soryu@soryu.co> | 2026-02-01 01:07:13 +0000 |
|---|---|---|
| committer | soryu <soryu@soryu.co> | 2026-02-01 01:07:13 +0000 |
| commit | 59aa17ea650d3afe34cccf83b2acd41bc1a95a35 (patch) | |
| tree | 3b7cfe5c02b367f8aa9ae8be84eefa6149608ec9 /makima/src/db/models.rs | |
| parent | 7567153e6281b94e39e52be5d060b381ed69597d (diff) | |
| download | soryu-59aa17ea650d3afe34cccf83b2acd41bc1a95a35.tar.gz soryu-59aa17ea650d3afe34cccf83b2acd41bc1a95a35.zip | |
[WIP] Heartbeat checkpoint - 2026-02-01 01:07:13 UTCmakima/task-task-b2c95676-b2c95676
Diffstat (limited to 'makima/src/db/models.rs')
| -rw-r--r-- | makima/src/db/models.rs | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/makima/src/db/models.rs b/makima/src/db/models.rs index 636d81a..f1e0be0 100644 --- a/makima/src/db/models.rs +++ b/makima/src/db/models.rs @@ -2395,3 +2395,79 @@ impl std::str::FromStr for NotificationSeverity { } } } + +// ============================================================================ +// Supervisor Status API Types +// ============================================================================ + +/// Response for supervisor status endpoint +#[derive(Debug, Clone, Serialize, ToSchema)] +#[serde(rename_all = "camelCase")] +pub struct SupervisorStatusResponse { + /// The supervisor task ID + pub task_id: Uuid, + /// Current supervisor state (from supervisor_states table) + pub state: String, + /// Current contract phase + pub phase: String, + /// Description of current activity (from task progress_summary) + pub current_activity: Option<String>, + /// Progress percentage (0-100) + pub progress: Option<u8>, + /// When the supervisor last updated its state + pub last_heartbeat: DateTime<Utc>, + /// Task IDs the supervisor is currently waiting on + pub pending_task_ids: Vec<Uuid>, + /// Whether the supervisor is currently running + pub is_running: bool, +} + +/// Individual heartbeat entry for history +#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)] +#[serde(rename_all = "camelCase")] +pub struct SupervisorHeartbeatEntry { + /// Timestamp of this heartbeat + pub timestamp: DateTime<Utc>, + /// Supervisor state at this time + pub state: String, + /// Activity description at this time + pub activity: Option<String>, + /// Progress at this time + pub progress: Option<u8>, + /// Contract phase at this time + pub phase: String, + /// Pending task IDs at this time + pub pending_task_ids: Vec<Uuid>, +} + +/// Response for supervisor heartbeat history endpoint +#[derive(Debug, Clone, Serialize, ToSchema)] +#[serde(rename_all = "camelCase")] +pub struct SupervisorHeartbeatHistoryResponse { + /// List of heartbeat entries + pub heartbeats: Vec<SupervisorHeartbeatEntry>, + /// Total count of heartbeats (for pagination) + pub total: i64, +} + +/// Response for supervisor sync endpoint +#[derive(Debug, Clone, Serialize, ToSchema)] +#[serde(rename_all = "camelCase")] +pub struct SupervisorSyncResponse { + /// Whether the sync was successful + pub synced: bool, + /// Current supervisor state after sync + pub state: String, + /// Optional message about the sync result + pub message: Option<String>, +} + +/// Query parameters for heartbeat history endpoint +#[derive(Debug, Deserialize, ToSchema)] +#[serde(rename_all = "camelCase")] +pub struct HeartbeatHistoryQuery { + /// Maximum number of heartbeats to return (default: 10) + pub limit: Option<i32>, + /// Offset for pagination (default: 0) + pub offset: Option<i32>, +} |
