aboutsummaryrefslogtreecommitdiff
path: root/internal/monitor
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-01-23 17:28:43 -0800
committerFuwn <[email protected]>2026-01-23 17:28:43 -0800
commitdd26b219eb322deb511fcdecfdbecb6c963d20d2 (patch)
tree40e02860835c96cd4a3711fc48616ad08954586e /internal/monitor
parentfeat: Add config imports for monitor inheritance (diff)
downloadkaze-dd26b219eb322deb511fcdecfdbecb6c963d20d2.tar.xz
kaze-dd26b219eb322deb511fcdecfdbecb6c963d20d2.zip
feat: Add database maintenance with backup/reset modes and triggers
Diffstat (limited to 'internal/monitor')
-rw-r--r--internal/monitor/scheduler.go33
1 files changed, 31 insertions, 2 deletions
diff --git a/internal/monitor/scheduler.go b/internal/monitor/scheduler.go
index ad1b7f6..809bab5 100644
--- a/internal/monitor/scheduler.go
+++ b/internal/monitor/scheduler.go
@@ -67,9 +67,11 @@ func (s *Scheduler) Start() {
go s.runMonitor(mon)
}
- // Start cleanup routine
s.wg.Add(1)
go s.runCleanup()
+
+ s.wg.Add(1)
+ go s.runMaintenance()
}
// Stop gracefully stops all monitors
@@ -193,13 +195,14 @@ func (s *Scheduler) executeCheck(mon Monitor) {
"id", mon.ID(),
"error", err)
}
+
+ s.storage.RecordCheck()
}
// runCleanup periodically cleans up old data
func (s *Scheduler) runCleanup() {
defer s.wg.Done()
- // Run cleanup daily
ticker := time.NewTicker(24 * time.Hour)
defer ticker.Stop()
@@ -218,6 +221,32 @@ func (s *Scheduler) runCleanup() {
}
}
+func (s *Scheduler) runMaintenance() {
+ defer s.wg.Done()
+
+ if s.storage.GetMaintenanceMode() == "never" {
+ return
+ }
+
+ ticker := time.NewTicker(1 * time.Minute)
+ defer ticker.Stop()
+
+ for {
+ select {
+ case <-s.ctx.Done():
+ return
+ case <-ticker.C:
+ ran, err := s.storage.CheckMaintenance()
+ if err != nil {
+ s.logger.Error("maintenance check failed", "error", err)
+ } else if ran {
+ s.logger.Info("database maintenance completed",
+ "mode", s.storage.GetMaintenanceMode())
+ }
+ }
+ }
+}
+
// GetMonitors returns all registered monitors
func (s *Scheduler) GetMonitors() []Monitor {
return s.monitors