mirror of
https://github.com/projectcapsule/capsule.git
synced 2026-08-25 16:07:24 +00:00
* 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>
83 lines
2.2 KiB
Go
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)
|
|
}
|