From c7c441364c9498a65e4777161c433e1fb3f9681e Mon Sep 17 00:00:00 2001 From: Nilesh Akhade Date: Tue, 1 Aug 2023 17:33:37 +0530 Subject: [PATCH] Remove schedule-related metrics on schedule delete Signed-off-by: Nilesh Akhade --- changelogs/unreleased/6715-nilesh-akhade | 1 + pkg/controller/schedule_controller.go | 1 + pkg/metrics/metrics.go | 82 ++++++++++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 changelogs/unreleased/6715-nilesh-akhade diff --git a/changelogs/unreleased/6715-nilesh-akhade b/changelogs/unreleased/6715-nilesh-akhade new file mode 100644 index 0000000000..756432ad12 --- /dev/null +++ b/changelogs/unreleased/6715-nilesh-akhade @@ -0,0 +1 @@ +Remove schedule-related metrics on schedule delete \ No newline at end of file diff --git a/pkg/controller/schedule_controller.go b/pkg/controller/schedule_controller.go index d3268399c8..62806b6b1b 100644 --- a/pkg/controller/schedule_controller.go +++ b/pkg/controller/schedule_controller.go @@ -94,6 +94,7 @@ func (c *scheduleReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c if err := c.Get(ctx, req.NamespacedName, schedule); err != nil { if apierrors.IsNotFound(err) { log.WithError(err).Error("schedule not found") + c.metrics.RemoveSchedule(req.Name) return ctrl.Result{}, nil } return ctrl.Result{}, errors.Wrapf(err, "error getting schedule %s", req.String()) diff --git a/pkg/metrics/metrics.go b/pkg/metrics/metrics.go index e6879f363c..c3ecdaee7d 100644 --- a/pkg/metrics/metrics.go +++ b/pkg/metrics/metrics.go @@ -505,6 +505,88 @@ func (m *ServerMetrics) InitSchedule(scheduleName string) { } } +// RemoveSchedule removes metrics associated with a specified schedule. +func (m *ServerMetrics) RemoveSchedule(scheduleName string) { + if g, ok := m.metrics[backupTarballSizeBytesGauge].(*prometheus.GaugeVec); ok { + g.DeleteLabelValues(scheduleName) + } + if c, ok := m.metrics[backupAttemptTotal].(*prometheus.CounterVec); ok { + c.DeleteLabelValues(scheduleName) + } + if c, ok := m.metrics[backupSuccessTotal].(*prometheus.CounterVec); ok { + c.DeleteLabelValues(scheduleName) + } + if c, ok := m.metrics[backupPartialFailureTotal].(*prometheus.CounterVec); ok { + c.DeleteLabelValues(scheduleName) + } + if c, ok := m.metrics[backupFailureTotal].(*prometheus.CounterVec); ok { + c.DeleteLabelValues(scheduleName) + } + if c, ok := m.metrics[backupValidationFailureTotal].(*prometheus.CounterVec); ok { + c.DeleteLabelValues(scheduleName) + } + if h, ok := m.metrics[backupDurationSeconds].(*prometheus.HistogramVec); ok { + h.DeleteLabelValues(scheduleName) + } + if c, ok := m.metrics[backupDeletionAttemptTotal].(*prometheus.CounterVec); ok { + c.DeleteLabelValues(scheduleName) + } + if c, ok := m.metrics[backupDeletionSuccessTotal].(*prometheus.CounterVec); ok { + c.DeleteLabelValues(scheduleName) + } + if c, ok := m.metrics[backupDeletionFailureTotal].(*prometheus.CounterVec); ok { + c.DeleteLabelValues(scheduleName) + } + if g, ok := m.metrics[backupLastSuccessfulTimestamp].(*prometheus.GaugeVec); ok { + g.DeleteLabelValues(scheduleName) + } + if c, ok := m.metrics[backupItemsTotalGauge].(*prometheus.GaugeVec); ok { + c.DeleteLabelValues(scheduleName) + } + if c, ok := m.metrics[backupItemsErrorsGauge].(*prometheus.GaugeVec); ok { + c.DeleteLabelValues(scheduleName) + } + if c, ok := m.metrics[backupWarningTotal].(*prometheus.CounterVec); ok { + c.DeleteLabelValues(scheduleName) + } + if c, ok := m.metrics[backupLastStatus].(*prometheus.GaugeVec); ok { + c.DeleteLabelValues(scheduleName) + } + if c, ok := m.metrics[restoreAttemptTotal].(*prometheus.CounterVec); ok { + c.DeleteLabelValues(scheduleName) + } + if c, ok := m.metrics[restorePartialFailureTotal].(*prometheus.CounterVec); ok { + c.DeleteLabelValues(scheduleName) + } + if c, ok := m.metrics[restoreFailedTotal].(*prometheus.CounterVec); ok { + c.DeleteLabelValues(scheduleName) + } + if c, ok := m.metrics[restoreSuccessTotal].(*prometheus.CounterVec); ok { + c.DeleteLabelValues(scheduleName) + } + if c, ok := m.metrics[restoreValidationFailedTotal].(*prometheus.CounterVec); ok { + c.DeleteLabelValues(scheduleName) + } + if c, ok := m.metrics[volumeSnapshotSuccessTotal].(*prometheus.CounterVec); ok { + c.DeleteLabelValues(scheduleName) + } + if c, ok := m.metrics[volumeSnapshotAttemptTotal].(*prometheus.CounterVec); ok { + c.DeleteLabelValues(scheduleName) + } + if c, ok := m.metrics[volumeSnapshotFailureTotal].(*prometheus.CounterVec); ok { + c.DeleteLabelValues(scheduleName) + } + if c, ok := m.metrics[csiSnapshotAttemptTotal].(*prometheus.CounterVec); ok { + c.DeleteLabelValues(scheduleName, "") + } + if c, ok := m.metrics[csiSnapshotSuccessTotal].(*prometheus.CounterVec); ok { + c.DeleteLabelValues(scheduleName, "") + } + if c, ok := m.metrics[csiSnapshotFailureTotal].(*prometheus.CounterVec); ok { + c.DeleteLabelValues(scheduleName, "") + } +} + // InitSchedule initializes counter metrics for a node. func (m *ServerMetrics) InitMetricsForNode(node string) { if c, ok := m.metrics[podVolumeBackupEnqueueTotal].(*prometheus.CounterVec); ok {