From 9fa302aa8b45755ea685a2642438f3f46ba6ba7c Mon Sep 17 00:00:00 2001 From: Steve Kriss Date: Tue, 14 Jan 2020 14:11:21 -0700 Subject: [PATCH] recompute backup_last_successful_timestamp metric during resync Signed-off-by: Steve Kriss --- pkg/controller/backup_controller.go | 24 ++++++++++++++++++++++++ pkg/metrics/metrics.go | 6 +++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/pkg/controller/backup_controller.go b/pkg/controller/backup_controller.go index 1b2a7e689..32f11cdf1 100644 --- a/pkg/controller/backup_controller.go +++ b/pkg/controller/backup_controller.go @@ -148,12 +148,36 @@ func NewBackupController( } func (c *backupController) resync() { + // recompute backup_total metric backups, err := c.lister.List(labels.Everything()) if err != nil { c.logger.Error(err, "Error computing backup_total metric") } else { c.metrics.SetBackupTotal(int64(len(backups))) } + + // recompute backup_last_successful_timestamp metric for each + // schedule (including the empty schedule, i.e. ad-hoc backups) + lastSuccessBySchedule := map[string]time.Time{} + for _, backup := range backups { + if backup.Status.Phase != velerov1api.BackupPhaseCompleted { + continue + } + if backup.Status.CompletionTimestamp == nil { + continue + } + + schedule := backup.Labels[velerov1api.ScheduleNameLabel] + timestamp := backup.Status.CompletionTimestamp.Time + + if timestamp.After(lastSuccessBySchedule[schedule]) { + lastSuccessBySchedule[schedule] = timestamp + } + } + + for schedule, timestamp := range lastSuccessBySchedule { + c.metrics.SetBackupLastSuccessfulTimestamp(schedule, timestamp) + } } func (c *backupController) processBackup(key string) error { diff --git a/pkg/metrics/metrics.go b/pkg/metrics/metrics.go index 716c19d91..d3ed0cbee 100644 --- a/pkg/metrics/metrics.go +++ b/pkg/metrics/metrics.go @@ -297,9 +297,9 @@ func (m *ServerMetrics) SetBackupTarballSizeBytesGauge(backupSchedule string, si } // SetBackupLastSuccessfulTimestamp records the last time a backup ran successfully, Unix timestamp in seconds -func (m *ServerMetrics) SetBackupLastSuccessfulTimestamp(backupSchedule string) { +func (m *ServerMetrics) SetBackupLastSuccessfulTimestamp(backupSchedule string, time time.Time) { if g, ok := m.metrics[backupLastSuccessfulTimestamp].(*prometheus.GaugeVec); ok { - g.WithLabelValues(backupSchedule).Set(float64(time.Now().Unix())) + g.WithLabelValues(backupSchedule).Set(float64(time.Unix())) } } @@ -322,7 +322,7 @@ func (m *ServerMetrics) RegisterBackupSuccess(backupSchedule string) { if c, ok := m.metrics[backupSuccessTotal].(*prometheus.CounterVec); ok { c.WithLabelValues(backupSchedule).Inc() } - m.SetBackupLastSuccessfulTimestamp(backupSchedule) + m.SetBackupLastSuccessfulTimestamp(backupSchedule, time.Now()) } // RegisterBackupPartialFailure records a partially failed backup.