Skip to main content

agentics_persistence/repositories/
maintenance.rs

1use sqlx::PgPool;
2
3use crate::db;
4use crate::repositories::{HeartbeatPayload, ServiceHeartbeatRecord, StaleJobReapResult};
5use agentics_error::Result;
6
7#[derive(Debug, Clone, Copy)]
8pub struct MaintenanceRepository<'a> {
9    pub(super) pool: &'a PgPool,
10}
11
12impl MaintenanceRepository<'_> {
13    pub async fn upsert_service_heartbeat(
14        &self,
15        worker_id: &str,
16        payload: &HeartbeatPayload,
17    ) -> Result<()> {
18        db::maintenance::upsert_service_heartbeat(self.pool, worker_id, payload).await
19    }
20
21    pub async fn list_service_heartbeats(&self) -> Result<Vec<ServiceHeartbeatRecord>> {
22        db::maintenance::list_service_heartbeats(self.pool).await
23    }
24
25    pub async fn reap_stuck_jobs(&self, timeout_minutes: i32) -> Result<StaleJobReapResult> {
26        db::maintenance::reap_stuck_jobs(self.pool, timeout_minutes).await
27    }
28}