Skip to content

Commit a40944b

Browse files
committed
feat: add kube_persistentvolume_volume_mode metric
Signed-off-by: Ricardo Lopes <[email protected]>
1 parent ba23b77 commit a40944b

File tree

3 files changed

+58
-0
lines changed

3 files changed

+58
-0
lines changed

docs/metrics/storage/persistentvolume-metrics.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
| kube_persistentvolume_created | Gauge | Unix creation timestamp | seconds | `persistentvolume`=&lt;persistentvolume-name&gt; <br> | EXPERIMENTAL |
1212
| kube_persistentvolume_deletion_timestamp | Gauge | Unix deletion timestamp | seconds | `persistentvolume`=&lt;persistentvolume-name&gt; <br> | EXPERIMENTAL |
1313
| kube_persistentvolume_csi_attributes | Gauge | CSI attributes of the Persistent Volume, disabled by default, manage with [--metric-opt-in-list](../../developer/cli-arguments.md)) | | `persistentvolume`=&lt;persistentvolume-name&gt; <br> `csi_mounter`=&lt;csi-mounter&gt; <br> `csi_map_options`=&lt;csi-map-options&gt; | EXPERIMENTAL |
14+
| kube_persistentvolume_volume_mode | Gauge | | | `persistentvolume`=&lt;persistentvolume-name&gt; <br>`volumemode`=&lt;volumemode&gt; | EXPERIMENTAL |
1415

1516
## Useful metrics queries
1617

internal/store/persistentvolume.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,30 @@ func persistentVolumeMetricFamilies(allowAnnotationsList, allowLabelsList []stri
392392
}
393393
}),
394394
),
395+
*generator.NewFamilyGeneratorWithStability(
396+
"kube_persistentvolume_volume_mode",
397+
"Volume Mode information for PersistentVolume.",
398+
metric.Gauge,
399+
basemetrics.ALPHA,
400+
"",
401+
wrapPersistentVolumeFunc(func(p *v1.PersistentVolume) *metric.Family {
402+
volumeMode := ""
403+
if p.Spec.VolumeMode != nil {
404+
volumeMode = string(*p.Spec.VolumeMode)
405+
} else {
406+
volumeMode = string("Filesystem") // Filesystem is the default mode used when volumeMode parameter is omitted.
407+
}
408+
409+
return &metric.Family{
410+
Metrics: []*metric.Metric{
411+
{
412+
LabelKeys: []string{"volumemode"},
413+
LabelValues: []string{volumeMode},
414+
Value: 1,
415+
},
416+
}}
417+
}),
418+
),
395419
}
396420
}
397421

internal/store/persistentvolume_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030

3131
func TestPersistentVolumeStore(t *testing.T) {
3232
iscsiInitiatorName := "iqn.my.test.initiator:112233"
33+
volumeMode := v1.PersistentVolumeBlock
3334
cases := []generateMetricsTestCase{
3435
// Verify phase enumerations.
3536
{
@@ -743,6 +744,38 @@ func TestPersistentVolumeStore(t *testing.T) {
743744
`,
744745
MetricNames: []string{"kube_persistentvolume_csi_attributes"},
745746
},
747+
{
748+
Obj: &v1.PersistentVolume{
749+
ObjectMeta: metav1.ObjectMeta{
750+
Name: "test-default-volumemode",
751+
},
752+
Spec: v1.PersistentVolumeSpec{
753+
VolumeMode: nil,
754+
},
755+
},
756+
Want: `
757+
# HELP kube_persistentvolume_volume_mode Volume Mode information for PersistentVolume.
758+
# TYPE kube_persistentvolume_volume_mode gauge
759+
kube_persistentvolume_volume_mode{persistentvolume="test-default-volumemode",volumemode="Filesystem"} 1
760+
`,
761+
MetricNames: []string{"kube_persistentvolume_volume_mode"},
762+
},
763+
{
764+
Obj: &v1.PersistentVolume{
765+
ObjectMeta: metav1.ObjectMeta{
766+
Name: "test-block-volumemode",
767+
},
768+
Spec: v1.PersistentVolumeSpec{
769+
VolumeMode: &volumeMode,
770+
},
771+
},
772+
Want: `
773+
# HELP kube_persistentvolume_volume_mode Volume Mode information for PersistentVolume.
774+
# TYPE kube_persistentvolume_volume_mode gauge
775+
kube_persistentvolume_volume_mode{persistentvolume="test-block-volumemode",volumemode="Block"} 1
776+
`,
777+
MetricNames: []string{"kube_persistentvolume_volume_mode"},
778+
},
746779
}
747780
for i, c := range cases {
748781
c.Func = generator.ComposeMetricGenFuncs(persistentVolumeMetricFamilies(c.AllowAnnotationsList, c.AllowLabelsList))

0 commit comments

Comments
 (0)