diff --git a/backend/internal/features/backups/backups/backuping/scheduler.go b/backend/internal/features/backups/backups/backuping/scheduler.go index df24ce2..2140d6b 100644 --- a/backend/internal/features/backups/backups/backuping/scheduler.go +++ b/backend/internal/features/backups/backups/backuping/scheduler.go @@ -103,6 +103,16 @@ func (s *BackupsScheduler) IsSchedulerRunning() bool { return s.lastBackupTime.After(time.Now().UTC().Add(-schedulerHealthcheckThreshold)) } +func (s *BackupsScheduler) IsBackupNodesAvailable() bool { + nodes, err := s.backupNodesRegistry.GetAvailableNodes() + if err != nil { + s.logger.Error("Failed to get available nodes for health check", "error", err) + return false + } + + return len(nodes) > 0 +} + func (s *BackupsScheduler) StartBackup(databaseID uuid.UUID, isCallNotifier bool) { backupConfig, err := s.backupConfigService.GetBackupConfigByDbId(databaseID) if err != nil { diff --git a/backend/internal/features/system/healthcheck/service.go b/backend/internal/features/system/healthcheck/service.go index 68d6a72..a308ff0 100644 --- a/backend/internal/features/system/healthcheck/service.go +++ b/backend/internal/features/system/healthcheck/service.go @@ -52,6 +52,10 @@ func (s *HealthcheckService) performHealthCheck() error { if !s.backupBackgroundService.IsSchedulerRunning() { return errors.New("backups are not running for more than 5 minutes") } + + if !s.backupBackgroundService.IsBackupNodesAvailable() { + return errors.New("no backup nodes available") + } } if config.GetEnv().IsProcessingNode {