fix reminder tool issues: error on time overflow, optimize scheduler query

This commit is contained in:
damocles 2026-05-16 13:00:56 +02:00
parent bc27113967
commit 24eec69418
4 changed files with 90 additions and 48 deletions

View file

@ -163,41 +163,36 @@ async fn main() -> Result<()> {
tokio::spawn(async move {
use hive_sh4re::Message;
loop {
// Get all agents currently registered
let agents = reminder_coord.list_agents();
for agent in agents {
match reminder_coord.broker.get_due_reminders(&agent) {
Ok(reminders) => {
for (id, message, _file_path) in reminders {
// Deliver as inbox message from "reminder"
if let Err(e) = reminder_coord.broker.send(&Message {
from: "reminder".to_owned(),
to: agent.clone(),
body: message.clone(),
}) {
tracing::warn!(
reminder_id = id,
%agent,
error = ?e,
"failed to deliver reminder"
);
continue;
}
// Mark as sent
if let Err(e) = reminder_coord.broker.mark_reminder_sent(id) {
tracing::warn!(
reminder_id = id,
error = ?e,
"failed to mark reminder sent"
);
}
// Query all due reminders in a single DB call
match reminder_coord.broker.get_all_due_reminders() {
Ok(reminders) => {
for (agent, id, message, _file_path) in reminders {
// Deliver as inbox message from "reminder"
if let Err(e) = reminder_coord.broker.send(&Message {
from: "reminder".to_owned(),
to: agent.clone(),
body: message.clone(),
}) {
tracing::warn!(
reminder_id = id,
%agent,
error = ?e,
"failed to deliver reminder"
);
continue;
}
// Mark as sent
if let Err(e) = reminder_coord.broker.mark_reminder_sent(id) {
tracing::warn!(
reminder_id = id,
error = ?e,
"failed to mark reminder sent"
);
}
}
Err(e) => tracing::warn!(
%agent,
error = ?e,
"failed to query due reminders"
),
}
Err(e) => {
tracing::warn!(error = ?e, "failed to query due reminders");
}
}
tokio::time::sleep(std::time::Duration::from_secs(5)).await;