Files
Agent-System/internal/server/notification_reminder_loop.go
T
weichenandCursor ce7d1b8ac5 fix(server): 后台 ticker 纳入 Shutdown;vault Drain 告警;bizdev 心跳超时(R-6)
reminder/vault 可停止;Drain 失败 slog.Warn;心跳/释放 lease 使用 10s 超时。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 03:44:08 +00:00

44 lines
925 B
Go

package server
import (
"context"
"log/slog"
"time"
)
const defaultReminderPollInterval = 15 * time.Minute
func (s *Server) startNotificationReminderLoop() {
if s == nil || s.notifySvc == nil || !s.notifySvc.Available() {
return
}
s.reminderStop = make(chan struct{})
go func() {
ticker := time.NewTicker(defaultReminderPollInterval)
defer ticker.Stop()
s.runStageAdvanceReminders(context.Background())
for {
select {
case <-s.reminderStop:
return
case <-ticker.C:
s.runStageAdvanceReminders(context.Background())
}
}
}()
}
func (s *Server) runStageAdvanceReminders(ctx context.Context) {
if s.notifySvc == nil || !s.notifySvc.Available() {
return
}
n, err := s.notifySvc.ProcessStageAdvanceReminders(ctx)
if err != nil {
slog.Warn("stage advance reminder scan failed", "error", err)
return
}
if n > 0 {
slog.Info("stage advance 24h reminders sent", "count", n)
}
}