in internal/store/persistentvolumeclaim.go [41:204]
func persistentVolumeClaimMetricFamilies(allowAnnotationsList, allowLabelsList []string) []generator.FamilyGenerator {
return []generator.FamilyGenerator{
*generator.NewFamilyGenerator(
descPersistentVolumeClaimLabelsName,
descPersistentVolumeClaimLabelsHelp,
metric.Gauge,
"",
wrapPersistentVolumeClaimFunc(func(p *v1.PersistentVolumeClaim) *metric.Family {
labelKeys, labelValues := createPrometheusLabelKeysValues("label", p.Labels, allowLabelsList)
return &metric.Family{
Metrics: []*metric.Metric{
{
LabelKeys: labelKeys,
LabelValues: labelValues,
Value: 1,
},
},
}
}),
),
*generator.NewFamilyGenerator(
descPersistentVolumeClaimAnnotationsName,
descPersistentVolumeClaimAnnotationsHelp,
metric.Gauge,
"",
wrapPersistentVolumeClaimFunc(func(p *v1.PersistentVolumeClaim) *metric.Family {
annotationKeys, annotationValues := createPrometheusLabelKeysValues("annotation", p.Annotations, allowAnnotationsList)
return &metric.Family{
Metrics: []*metric.Metric{
{
LabelKeys: annotationKeys,
LabelValues: annotationValues,
Value: 1,
},
},
}
}),
),
*generator.NewFamilyGenerator(
"kube_persistentvolumeclaim_info",
"Information about persistent volume claim.",
metric.Gauge,
"",
wrapPersistentVolumeClaimFunc(func(p *v1.PersistentVolumeClaim) *metric.Family {
storageClassName := getPersistentVolumeClaimClass(p)
volumeName := p.Spec.VolumeName
return &metric.Family{
Metrics: []*metric.Metric{
{
LabelKeys: []string{"storageclass", "volumename"},
LabelValues: []string{storageClassName, volumeName},
Value: 1,
},
},
}
}),
),
*generator.NewFamilyGenerator(
"kube_persistentvolumeclaim_status_phase",
"The phase the persistent volume claim is currently in.",
metric.Gauge,
"",
wrapPersistentVolumeClaimFunc(func(p *v1.PersistentVolumeClaim) *metric.Family {
phase := p.Status.Phase
if phase == "" {
return &metric.Family{
Metrics: []*metric.Metric{},
}
}
// Set current phase to 1, others to 0 if it is set.
ms := []*metric.Metric{
{
LabelValues: []string{string(v1.ClaimLost)},
Value: boolFloat64(phase == v1.ClaimLost),
},
{
LabelValues: []string{string(v1.ClaimBound)},
Value: boolFloat64(phase == v1.ClaimBound),
},
{
LabelValues: []string{string(v1.ClaimPending)},
Value: boolFloat64(phase == v1.ClaimPending),
},
}
for _, m := range ms {
m.LabelKeys = []string{"phase"}
}
return &metric.Family{
Metrics: ms,
}
}),
),
*generator.NewFamilyGenerator(
"kube_persistentvolumeclaim_resource_requests_storage_bytes",
"The capacity of storage requested by the persistent volume claim.",
metric.Gauge,
"",
wrapPersistentVolumeClaimFunc(func(p *v1.PersistentVolumeClaim) *metric.Family {
ms := []*metric.Metric{}
if storage, ok := p.Spec.Resources.Requests[v1.ResourceStorage]; ok {
ms = append(ms, &metric.Metric{
Value: float64(storage.Value()),
})
}
return &metric.Family{
Metrics: ms,
}
}),
),
*generator.NewFamilyGenerator(
"kube_persistentvolumeclaim_access_mode",
"The access mode(s) specified by the persistent volume claim.",
metric.Gauge,
"",
wrapPersistentVolumeClaimFunc(func(p *v1.PersistentVolumeClaim) *metric.Family {
ms := make([]*metric.Metric, len(p.Spec.AccessModes))
for i, mode := range p.Spec.AccessModes {
ms[i] = &metric.Metric{
LabelKeys: []string{"access_mode"},
LabelValues: []string{string(mode)},
Value: 1,
}
}
return &metric.Family{
Metrics: ms,
}
}),
),
*generator.NewFamilyGenerator(
"kube_persistentvolumeclaim_status_condition",
"Information about status of different conditions of persistent volume claim.",
metric.Gauge,
"",
wrapPersistentVolumeClaimFunc(func(p *v1.PersistentVolumeClaim) *metric.Family {
ms := make([]*metric.Metric, len(p.Status.Conditions)*len(conditionStatuses))
for i, c := range p.Status.Conditions {
conditionMetrics := addConditionMetrics(c.Status)
for j, m := range conditionMetrics {
metric := m
metric.LabelKeys = []string{"condition", "status"}
metric.LabelValues = append([]string{string(c.Type)}, metric.LabelValues...)
ms[i*len(conditionStatuses)+j] = metric
}
}
return &metric.Family{
Metrics: ms,
}
}),
),
}
}