Files
capsule/internal/metrics/config_recorder.go
Oliver BählerandCopilot Autofix powered by AI 4b07463705 fix: metric recorders for all conditionals (#1998)
* fix(controller): decode old object for delete requests

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* fix: preserve ca-bundles injected from external providers

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: add metadata enforcement

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: add metadata enforcement

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: add resourcepoolclaim validation

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: add resourcepoolclaim validation

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: add resourcepoolclaim validation

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: add resourcepoolclaim validation

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: wave of fixes

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: wave of fixes

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: wave of fixes

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: wave of fixes

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: wave of fixes

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: wave of fixes

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

---------

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-07-03 14:38:41 +02:00

83 lines
2.2 KiB
Go

// Copyright 2020-2026 Project Capsule Authors
// SPDX-License-Identifier: Apache-2.0
//nolint:dupl
package metrics
import (
"github.com/prometheus/client_golang/prometheus"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
crtlmetrics "sigs.k8s.io/controller-runtime/pkg/metrics"
capsulev1beta2 "github.com/projectcapsule/capsule/api/v1beta2"
"github.com/projectcapsule/capsule/pkg/api/meta"
)
type ConfigRecorder struct {
resourceConditionGauge *prometheus.GaugeVec
}
func MustMakeConfigRecorder() *ConfigRecorder {
metricsRecorder := NewConfigRecorder()
crtlmetrics.Registry.MustRegister(metricsRecorder.Collectors()...)
return metricsRecorder
}
func NewConfigRecorder() *ConfigRecorder {
return &ConfigRecorder{
resourceConditionGauge: prometheus.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: metricsPrefix,
Name: "config_condition",
Help: "The current condition status of a config resource.",
},
[]string{"name", "condition"},
),
}
}
func (r *ConfigRecorder) Collectors() []prometheus.Collector {
return []prometheus.Collector{
r.resourceConditionGauge,
}
}
// RecordCondition records the condition as given for the ref.
func (r *ConfigRecorder) RecordConditions(resource *capsulev1beta2.CapsuleConfiguration) {
for _, status := range []string{meta.ReadyCondition, meta.CordonedCondition} {
var value float64
cond := resource.Status.Conditions.GetConditionByType(status)
if cond == nil {
r.DeleteConditionMetricByType(resource.GetName(), status)
continue
}
if cond.Status == metav1.ConditionTrue {
value = 1
}
r.resourceConditionGauge.WithLabelValues(resource.GetName(), status).Set(value)
}
}
func (r *ConfigRecorder) DeleteConditionMetrics(name string) {
r.resourceConditionGauge.DeletePartialMatch(map[string]string{
"name": name,
})
}
func (r *ConfigRecorder) DeleteConditionMetricByType(name string, condition string) {
r.resourceConditionGauge.DeletePartialMatch(map[string]string{
"name": name,
"condition": condition,
})
}
// DeleteCondition deletes the condition metrics for the ref.
func (r *ConfigRecorder) DeleteMetrics(resourceName string) {
r.DeleteConditionMetrics(resourceName)
}