Skip to content

Commit 39c66ee

Browse files
committed
Add gauge implementation of kube_statefulset_ordinals_start
1 parent 686f858 commit 39c66ee

File tree

3 files changed

+101
-1
lines changed

3 files changed

+101
-1
lines changed

docs/statefulset-metrics.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
| kube_statefulset_status_replicas_updated | Gauge | `statefulset`=&lt;statefulset-name&gt; <br> `namespace`=&lt;statefulset-namespace&gt; | STABLE |
1111
| kube_statefulset_status_observed_generation | Gauge | `statefulset`=&lt;statefulset-name&gt; <br> `namespace`=&lt;statefulset-namespace&gt; | STABLE |
1212
| kube_statefulset_replicas | Gauge | `statefulset`=&lt;statefulset-name&gt; <br> `namespace`=&lt;statefulset-namespace&gt; | STABLE |
13-
| kube_statefulset_ordinal_start | Gauge | `statefulset`=&lt;statefulset-name&gt; <br> `namespace`=&lt;statefulset-namespace&gt; | ALPHA |
13+
| kube_statefulset_ordinals_start | Gauge | `statefulset`=&lt;statefulset-name&gt; <br> `namespace`=&lt;statefulset-namespace&gt; | ALPHA |
1414
| kube_statefulset_metadata_generation | Gauge | `statefulset`=&lt;statefulset-name&gt; <br> `namespace`=&lt;statefulset-namespace&gt; | STABLE |
1515
| kube_statefulset_persistentvolumeclaim_retention_policy | Gauge | `statefulset`=&lt;statefulset-name&gt; <br> `namespace`=&lt;statefulset-namespace&gt; <br> `when_deleted`=&lt;statefulset-when-deleted-pvc-policy&gt; <br> `when_scaled`=&lt;statefulset-when-scaled-pvc-policy&gt; | EXPERIMENTAL |
1616
| kube_statefulset_created | Gauge | `statefulset`=&lt;statefulset-name&gt; <br> `namespace`=&lt;statefulset-namespace&gt; | STABLE |

internal/store/statefulset.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,26 @@ func statefulSetMetricFamilies(allowAnnotationsList, allowLabelsList []string) [
178178
}
179179
}),
180180
),
181+
*generator.NewFamilyGeneratorWithStability(
182+
"kube_statefulset_ordinals_start",
183+
"Start ordinal of the StatefulSet.",
184+
metric.Gauge,
185+
basemetrics.ALPHA,
186+
"",
187+
wrapStatefulSetFunc(func(s *v1.StatefulSet) *metric.Family {
188+
ms := []*metric.Metric{}
189+
190+
if s.Spec.Ordinals != nil {
191+
ms = append(ms, &metric.Metric{
192+
Value: float64(s.Spec.Ordinals.Start),
193+
})
194+
}
195+
196+
return &metric.Family{
197+
Metrics: ms,
198+
}
199+
}),
200+
),
181201
*generator.NewFamilyGeneratorWithStability(
182202
"kube_statefulset_metadata_generation",
183203
"Sequence number representing a specific generation of the desired state for the StatefulSet.",

internal/store/statefulset_test.go

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ func TestStatefulSetStore(t *testing.T) {
6565
# HELP kube_statefulset_metadata_generation [STABLE] Sequence number representing a specific generation of the desired state for the StatefulSet.
6666
# HELP kube_statefulset_persistentvolumeclaim_retention_policy Count of retention policy for StatefulSet template PVCs
6767
# HELP kube_statefulset_replicas [STABLE] Number of desired pods for a StatefulSet.
68+
# HELP kube_statefulset_ordinals_start Start ordinal of the StatefulSet.
6869
# HELP kube_statefulset_status_current_revision [STABLE] Indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).
6970
# HELP kube_statefulset_status_observed_generation [STABLE] The generation observed by the StatefulSet controller.
7071
# HELP kube_statefulset_status_replicas [STABLE] The number of replicas per StatefulSet.
@@ -78,6 +79,7 @@ func TestStatefulSetStore(t *testing.T) {
7879
# TYPE kube_statefulset_metadata_generation gauge
7980
# TYPE kube_statefulset_persistentvolumeclaim_retention_policy gauge
8081
# TYPE kube_statefulset_replicas gauge
82+
# TYPE kube_statefulset_ordinals_start gauge
8183
# TYPE kube_statefulset_status_current_revision gauge
8284
# TYPE kube_statefulset_status_observed_generation gauge
8385
# TYPE kube_statefulset_status_replicas gauge
@@ -104,6 +106,7 @@ func TestStatefulSetStore(t *testing.T) {
104106
"kube_statefulset_labels",
105107
"kube_statefulset_metadata_generation",
106108
"kube_statefulset_replicas",
109+
"kube_statefulset_ordinals_start",
107110
"kube_statefulset_status_observed_generation",
108111
"kube_statefulset_status_replicas",
109112
"kube_statefulset_status_replicas_available",
@@ -335,6 +338,83 @@ func TestStatefulSetStore(t *testing.T) {
335338
"kube_statefulset_persistentvolumeclaim_retention_policy",
336339
},
337340
},
341+
{
342+
// Validate kube_statefulset_ordinals_start metric.
343+
Obj: &v1.StatefulSet{
344+
ObjectMeta: metav1.ObjectMeta{
345+
Name: "statefulset5",
346+
Namespace: "ns5",
347+
Labels: map[string]string{
348+
"app": "example5",
349+
},
350+
Generation: 1,
351+
},
352+
Spec: v1.StatefulSetSpec{
353+
Replicas: &statefulSet1Replicas,
354+
ServiceName: "statefulset5service",
355+
Ordinals: &v1.StatefulSetOrdinals{
356+
Start: 2,
357+
},
358+
},
359+
Status: v1.StatefulSetStatus{
360+
ObservedGeneration: 0,
361+
Replicas: 3,
362+
UpdateRevision: "ur5",
363+
CurrentRevision: "cr5",
364+
},
365+
},
366+
Want: `
367+
# HELP kube_statefulset_labels [STABLE] Kubernetes labels converted to Prometheus labels.
368+
# HELP kube_statefulset_metadata_generation [STABLE] Sequence number representing a specific generation of the desired state for the StatefulSet.
369+
# HELP kube_statefulset_persistentvolumeclaim_retention_policy Count of retention policy for StatefulSet template PVCs
370+
# HELP kube_statefulset_replicas [STABLE] Number of desired pods for a StatefulSet.
371+
# HELP kube_statefulset_ordinals_start Start ordinal of the StatefulSet.
372+
# HELP kube_statefulset_status_current_revision [STABLE] Indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).
373+
# HELP kube_statefulset_status_replicas [STABLE] The number of replicas per StatefulSet.
374+
# HELP kube_statefulset_status_replicas_available The number of available replicas per StatefulSet.
375+
# HELP kube_statefulset_status_replicas_current [STABLE] The number of current replicas per StatefulSet.
376+
# HELP kube_statefulset_status_replicas_ready [STABLE] The number of ready replicas per StatefulSet.
377+
# HELP kube_statefulset_status_replicas_updated [STABLE] The number of updated replicas per StatefulSet.
378+
# HELP kube_statefulset_status_update_revision [STABLE] Indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)
379+
# TYPE kube_statefulset_labels gauge
380+
# TYPE kube_statefulset_metadata_generation gauge
381+
# TYPE kube_statefulset_persistentvolumeclaim_retention_policy gauge
382+
# TYPE kube_statefulset_replicas gauge
383+
# TYPE kube_statefulset_ordinals_start gauge
384+
# TYPE kube_statefulset_status_current_revision gauge
385+
# TYPE kube_statefulset_status_replicas gauge
386+
# TYPE kube_statefulset_status_replicas_available gauge
387+
# TYPE kube_statefulset_status_replicas_current gauge
388+
# TYPE kube_statefulset_status_replicas_ready gauge
389+
# TYPE kube_statefulset_status_replicas_updated gauge
390+
# TYPE kube_statefulset_status_update_revision gauge
391+
kube_statefulset_status_update_revision{namespace="ns5",revision="ur5",statefulset="statefulset5"} 1
392+
kube_statefulset_status_replicas{namespace="ns5",statefulset="statefulset5"} 3
393+
kube_statefulset_status_replicas_available{namespace="ns5",statefulset="statefulset5"} 0
394+
kube_statefulset_status_replicas_current{namespace="ns5",statefulset="statefulset5"} 0
395+
kube_statefulset_status_replicas_ready{namespace="ns5",statefulset="statefulset5"} 0
396+
kube_statefulset_status_replicas_updated{namespace="ns5",statefulset="statefulset5"} 0
397+
kube_statefulset_replicas{namespace="ns5",statefulset="statefulset5"} 3
398+
kube_statefulset_ordinals_start{namespace="ns5",statefulset="statefulset5"} 2
399+
kube_statefulset_metadata_generation{namespace="ns5",statefulset="statefulset5"} 1
400+
kube_statefulset_labels{namespace="ns5",statefulset="statefulset5"} 1
401+
kube_statefulset_status_current_revision{namespace="ns5",revision="cr5",statefulset="statefulset5"} 1
402+
`,
403+
MetricNames: []string{
404+
"kube_statefulset_labels",
405+
"kube_statefulset_metadata_generation",
406+
"kube_statefulset_replicas",
407+
"kube_statefulset_ordinals_start",
408+
"kube_statefulset_status_replicas",
409+
"kube_statefulset_status_replicas_available",
410+
"kube_statefulset_status_replicas_current",
411+
"kube_statefulset_status_replicas_ready",
412+
"kube_statefulset_status_replicas_updated",
413+
"kube_statefulset_status_update_revision",
414+
"kube_statefulset_status_current_revision",
415+
"kube_statefulset_persistentvolumeclaim_retention_policy",
416+
},
417+
},
338418
}
339419
for i, c := range cases {
340420
c.Func = generator.ComposeMetricGenFuncs(statefulSetMetricFamilies(nil, nil))

0 commit comments

Comments
 (0)