Skip to content

Commit e96989a

Browse files
committed
feat(metrics): add unused label on images and tasks
1 parent db5f70b commit e96989a

File tree

3 files changed

+23
-16
lines changed

3 files changed

+23
-16
lines changed

api/kuik/v1alpha1/image_types.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,10 @@ func (i *Image) GetPullSecrets(ctx context.Context, c client.Client) (secrets []
184184
return secrets, nil
185185
}
186186

187+
func (i *Image) IsUnused() bool {
188+
return len(i.Status.UsedByPods.Items) == 0
189+
}
190+
187191
func imageNameFromReference(image string) (string, error) {
188192
ref, err := reference.ParseAnyReference(image)
189193
if err != nil {

internal/controller/collector.go

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package controller
22

33
import (
44
"context"
5+
"strconv"
56

67
kuikv1alpha1 "github.com/enix/kube-image-keeper/api/kuik/v1alpha1"
78
"github.com/enix/kube-image-keeper/internal/info"
@@ -59,7 +60,7 @@ func (m *kuikMetrics) Register(elected <-chan struct{}, client client.Client) {
5960
Name: "tasks_total",
6061
Help: "Total number of image monitoring tasks, labeled by registry and status.",
6162
},
62-
[]string{"registry", "status"},
63+
[]string{"registry", "status", "unused"},
6364
)
6465
m.addCollector(m.monitoringTasks)
6566

@@ -71,35 +72,36 @@ func (m *kuikMetrics) Register(elected <-chan struct{}, client client.Client) {
7172
Help: "Number of images monitored, labeled by registry and status.",
7273
},
7374
prometheus.GaugeValue,
74-
[]string{"registry", "status"},
75+
[]string{"registry", "status", "unused"},
7576
func(collect func(value float64, labels ...string)) {
7677
imageList := &kuikv1alpha1.ImageList{}
7778
if err := client.List(context.Background(), imageList); err != nil {
7879
logf.Log.Error(err, "failed to list images for metrics")
7980
return
8081
}
8182

82-
images := make(map[string]map[string]float64)
83+
images := make(map[string]map[string]map[bool]float64)
8384
for _, image := range imageList.Items {
8485
registry := image.Spec.Registry
8586
if _, exists := images[registry]; !exists {
86-
images[registry] = make(map[string]float64)
87+
images[registry] = make(map[string]map[bool]float64)
8788
for _, status := range kuikv1alpha1.ImageStatusUpstreamList {
88-
images[registry][status.ToString()] = 0
89+
images[registry][status.ToString()] = map[bool]float64{
90+
true: 0,
91+
false: 0,
92+
}
8993
}
9094
}
9195

9296
status := image.Status.Upstream.Status.ToString()
93-
if _, exists := images[registry][status]; !exists {
94-
images[registry][status] = 0
95-
}
96-
97-
images[registry][status]++
97+
images[registry][status][image.IsUnused()]++
9898
}
9999

100100
for registry, statuses := range images {
101-
for status, count := range statuses {
102-
collect(count, registry, status)
101+
for status, unuseds := range statuses {
102+
for unused, count := range unuseds {
103+
collect(count, registry, status, strconv.FormatBool(unused))
104+
}
103105
}
104106
}
105107
}))
@@ -139,13 +141,14 @@ func (m *kuikMetrics) addCollector(collector prometheus.Collector) {
139141
func (m *kuikMetrics) InitMonitoringTaskRegistry(registry string) {
140142
for _, status := range kuikv1alpha1.ImageStatusUpstreamList {
141143
if status != kuikv1alpha1.ImageStatusUpstreamScheduled {
142-
m.monitoringTasks.WithLabelValues(registry, status.ToString()).Add(0)
144+
m.monitoringTasks.WithLabelValues(registry, status.ToString(), "true").Add(0)
145+
m.monitoringTasks.WithLabelValues(registry, status.ToString(), "false").Add(0)
143146
}
144147
}
145148
}
146149

147-
func (m *kuikMetrics) MonitoringTaskCompleted(registry string, status kuikv1alpha1.ImageStatusUpstream) {
148-
m.monitoringTasks.WithLabelValues(registry, status.ToString()).Inc()
150+
func (m *kuikMetrics) MonitoringTaskCompleted(registry string, status kuikv1alpha1.ImageStatusUpstream, unused bool) {
151+
m.monitoringTasks.WithLabelValues(registry, status.ToString(), strconv.FormatBool(unused)).Inc()
149152
}
150153

151154
type GenericCollector struct {

internal/controller/kuik/registrymonitor_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ func (r *RegistryMonitorReconciler) Reconcile(ctx context.Context, req ctrl.Requ
122122
logImage.Info("failed to monitor image", "error", err.Error())
123123
}
124124
logImage.Info("image monitored with success")
125-
kuikcontroller.Metrics.MonitoringTaskCompleted(registryMonitor.Spec.Registry, image.Status.Upstream.Status)
125+
kuikcontroller.Metrics.MonitoringTaskCompleted(registryMonitor.Spec.Registry, image.Status.Upstream.Status, len(image.Status.UsedByPods.Items) == 0)
126126
})
127127
if err != nil {
128128
logImage.Error(err, "failed to queue image for monitoring")

0 commit comments

Comments
 (0)