@@ -17,58 +17,68 @@ limitations under the License.
17
17
package collectors
18
18
19
19
import (
20
- "github.com/prometheus/client_golang/prometheus"
21
20
"k8s.io/apimachinery/pkg/util/sets"
22
- "k8s.io/klog "
21
+ "k8s.io/component-base/metrics "
23
22
stats "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1"
24
- "k8s.io/kubernetes/pkg/kubelet/metrics"
23
+ kubeletmetrics "k8s.io/kubernetes/pkg/kubelet/metrics"
25
24
serverstats "k8s.io/kubernetes/pkg/kubelet/server/stats"
26
25
)
27
26
28
27
var (
29
- volumeStatsCapacityBytesDesc = prometheus .NewDesc (
30
- prometheus .BuildFQName ("" , metrics .KubeletSubsystem , metrics .VolumeStatsCapacityBytesKey ),
28
+ volumeStatsCapacityBytesDesc = metrics .NewDesc (
29
+ metrics .BuildFQName ("" , kubeletmetrics .KubeletSubsystem , kubeletmetrics .VolumeStatsCapacityBytesKey ),
31
30
"Capacity in bytes of the volume" ,
32
31
[]string {"namespace" , "persistentvolumeclaim" }, nil ,
32
+ metrics .ALPHA , "" ,
33
33
)
34
- volumeStatsAvailableBytesDesc = prometheus .NewDesc (
35
- prometheus .BuildFQName ("" , metrics .KubeletSubsystem , metrics .VolumeStatsAvailableBytesKey ),
34
+ volumeStatsAvailableBytesDesc = metrics .NewDesc (
35
+ metrics .BuildFQName ("" , kubeletmetrics .KubeletSubsystem , kubeletmetrics .VolumeStatsAvailableBytesKey ),
36
36
"Number of available bytes in the volume" ,
37
37
[]string {"namespace" , "persistentvolumeclaim" }, nil ,
38
+ metrics .ALPHA , "" ,
38
39
)
39
- volumeStatsUsedBytesDesc = prometheus .NewDesc (
40
- prometheus .BuildFQName ("" , metrics .KubeletSubsystem , metrics .VolumeStatsUsedBytesKey ),
40
+ volumeStatsUsedBytesDesc = metrics .NewDesc (
41
+ metrics .BuildFQName ("" , kubeletmetrics .KubeletSubsystem , kubeletmetrics .VolumeStatsUsedBytesKey ),
41
42
"Number of used bytes in the volume" ,
42
43
[]string {"namespace" , "persistentvolumeclaim" }, nil ,
44
+ metrics .ALPHA , "" ,
43
45
)
44
- volumeStatsInodesDesc = prometheus .NewDesc (
45
- prometheus .BuildFQName ("" , metrics .KubeletSubsystem , metrics .VolumeStatsInodesKey ),
46
+ volumeStatsInodesDesc = metrics .NewDesc (
47
+ metrics .BuildFQName ("" , kubeletmetrics .KubeletSubsystem , kubeletmetrics .VolumeStatsInodesKey ),
46
48
"Maximum number of inodes in the volume" ,
47
49
[]string {"namespace" , "persistentvolumeclaim" }, nil ,
50
+ metrics .ALPHA , "" ,
48
51
)
49
- volumeStatsInodesFreeDesc = prometheus .NewDesc (
50
- prometheus .BuildFQName ("" , metrics .KubeletSubsystem , metrics .VolumeStatsInodesFreeKey ),
52
+ volumeStatsInodesFreeDesc = metrics .NewDesc (
53
+ metrics .BuildFQName ("" , kubeletmetrics .KubeletSubsystem , kubeletmetrics .VolumeStatsInodesFreeKey ),
51
54
"Number of free inodes in the volume" ,
52
55
[]string {"namespace" , "persistentvolumeclaim" }, nil ,
56
+ metrics .ALPHA , "" ,
53
57
)
54
- volumeStatsInodesUsedDesc = prometheus .NewDesc (
55
- prometheus .BuildFQName ("" , metrics .KubeletSubsystem , metrics .VolumeStatsInodesUsedKey ),
58
+ volumeStatsInodesUsedDesc = metrics .NewDesc (
59
+ metrics .BuildFQName ("" , kubeletmetrics .KubeletSubsystem , kubeletmetrics .VolumeStatsInodesUsedKey ),
56
60
"Number of used inodes in the volume" ,
57
61
[]string {"namespace" , "persistentvolumeclaim" }, nil ,
62
+ metrics .ALPHA , "" ,
58
63
)
59
64
)
60
65
61
66
type volumeStatsCollector struct {
67
+ metrics.BaseStableCollector
68
+
62
69
statsProvider serverstats.Provider
63
70
}
64
71
65
- // NewVolumeStatsCollector creates a volume stats prometheus collector.
66
- func NewVolumeStatsCollector (statsProvider serverstats.Provider ) prometheus.Collector {
72
+ // Check if volumeStatsCollector implements necessary interface
73
+ var _ metrics.StableCollector = & volumeStatsCollector {}
74
+
75
+ // NewVolumeStatsCollector creates a volume stats metrics.StableCollector.
76
+ func NewVolumeStatsCollector (statsProvider serverstats.Provider ) metrics.StableCollector {
67
77
return & volumeStatsCollector {statsProvider : statsProvider }
68
78
}
69
79
70
- // Describe implements the prometheus.Collector interface.
71
- func (collector * volumeStatsCollector ) Describe (ch chan <- * prometheus .Desc ) {
80
+ // DescribeWithStability implements the metrics.StableCollector interface.
81
+ func (collector * volumeStatsCollector ) DescribeWithStability (ch chan <- * metrics .Desc ) {
72
82
ch <- volumeStatsCapacityBytesDesc
73
83
ch <- volumeStatsAvailableBytesDesc
74
84
ch <- volumeStatsUsedBytesDesc
@@ -77,20 +87,16 @@ func (collector *volumeStatsCollector) Describe(ch chan<- *prometheus.Desc) {
77
87
ch <- volumeStatsInodesUsedDesc
78
88
}
79
89
80
- // Collect implements the prometheus.Collector interface.
81
- func (collector * volumeStatsCollector ) Collect (ch chan <- prometheus .Metric ) {
90
+ // CollectWithStability implements the metrics.StableCollector interface.
91
+ func (collector * volumeStatsCollector ) CollectWithStability (ch chan <- metrics .Metric ) {
82
92
podStats , err := collector .statsProvider .ListPodStats ()
83
93
if err != nil {
84
94
return
85
95
}
86
- addGauge := func (desc * prometheus .Desc , pvcRef * stats.PVCReference , v float64 , lv ... string ) {
96
+ addGauge := func (desc * metrics .Desc , pvcRef * stats.PVCReference , v float64 , lv ... string ) {
87
97
lv = append ([]string {pvcRef .Namespace , pvcRef .Name }, lv ... )
88
- metric , err := prometheus .NewConstMetric (desc , prometheus .GaugeValue , v , lv ... )
89
- if err != nil {
90
- klog .Warningf ("Failed to generate metric: %v" , err )
91
- return
92
- }
93
- ch <- metric
98
+
99
+ ch <- metrics .NewLazyConstMetric (desc , metrics .GaugeValue , v , lv ... )
94
100
}
95
101
allPVCs := sets.String {}
96
102
for _ , podStat := range podStats {
0 commit comments