diff options
| author | Fuwn <[email protected]> | 2026-01-23 17:28:43 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-01-23 17:28:43 -0800 |
| commit | dd26b219eb322deb511fcdecfdbecb6c963d20d2 (patch) | |
| tree | 40e02860835c96cd4a3711fc48616ad08954586e /internal/monitor | |
| parent | feat: Add config imports for monitor inheritance (diff) | |
| download | kaze-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.go | 33 |
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 |