agentics_persistence/repositories/
maintenance.rs1use 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}