@@ -132,14 +132,11 @@ func (e *exporter) pollProvider(p unused.Provider) {
132
132
// polling immediately; we wait at the end.
133
133
134
134
var (
135
- providerName = strings .ToLower (p .Name ())
136
- providerID = p .ID ()
137
-
138
135
success int64 = 1
139
136
140
137
logger = e .logger .With (
141
- slog .String ("provider" , providerName ),
142
- slog .String ("provider_id" , providerID ),
138
+ slog .String ("provider" , strings . ToLower ( p . Name ()) ),
139
+ slog .String ("provider_id" , p . ID () ),
143
140
)
144
141
)
145
142
@@ -155,29 +152,13 @@ func (e *exporter) pollProvider(p unused.Provider) {
155
152
}
156
153
157
154
diskInfoByNamespace := make (map [string ]* namespaceInfo )
158
- for _ , d := range disks {
159
- diskLabels := []any {
160
- slog .String ("name" , d .Name ()),
161
- slog .Int ("size_gb" , d .SizeGB ()),
162
- slog .Time ("created" , d .CreatedAt ()),
163
- }
164
-
165
- meta := d .Meta ()
166
- if e .verbose {
167
- diskMetaLabels := make ([]any , 0 , len (meta ))
168
- for _ , k := range meta .Keys () {
169
- diskMetaLabels = append (diskMetaLabels , slog .String (k , meta [k ]))
170
- }
171
- diskLabels = append (diskLabels , diskMetaLabels ... )
172
- }
155
+ var ms []metric
173
156
157
+ for _ , d := range disks {
158
+ diskLabels := getDiskLabels (d , e .verbose )
174
159
e .logger .Info ("unused disk found" , diskLabels ... )
175
160
176
- ns := meta ["kubernetes.io/created-for/pvc/namespace" ]
177
- if providerName == "azure" {
178
- ns = meta ["kubernetes.io-created-for-pvc-namespace" ]
179
- }
180
-
161
+ ns := getNamespace (d , p )
181
162
di := diskInfoByNamespace [ns ]
182
163
if di == nil {
183
164
di = & namespaceInfo {
@@ -188,44 +169,24 @@ func (e *exporter) pollProvider(p unused.Provider) {
188
169
di .Count += 1
189
170
di .SizeByType [d .DiskType ()] += float64 (d .SizeGB ())
190
171
191
- }
192
-
193
- var ms []metric // TODO we can optimize this creation here and allocate memory only once
194
-
195
- addMetric := func (d * prometheus.Desc , v float64 , lbls ... string ) {
196
- ms = append (ms , metric {
197
- desc : d ,
198
- value : v ,
199
- labels : append ([]string {providerName , providerID }, lbls ... ),
200
- })
201
- }
202
-
203
- for _ , d := range disks {
204
- m := d .Meta ()
205
-
206
- var ts float64
207
- lastUsed := d .LastUsedAt ()
208
- if ! lastUsed .IsZero () {
209
- ts = float64 (lastUsed .UnixMilli ())
210
- }
211
-
212
172
e .logger .Info (fmt .Sprintf ("Disk %s last used at %v" , d .Name (), d .LastUsedAt ()))
213
173
174
+ m := d .Meta ()
214
175
if m .CreatedForPV () == "" {
215
176
continue
216
177
}
217
178
218
- addMetric (e .dlu , ts , d .ID (), m .CreatedForPV (), m .CreatedForPVC (), m .Zone ())
179
+ addMetric (& ms , p , e .dlu , lastUsedTS ( d ) , d .ID (), m .CreatedForPV (), m .CreatedForPVC (), m .Zone ())
219
180
}
220
181
221
- addMetric (e .info , 1 )
222
- addMetric (e .dur , float64 (dur .Milliseconds ()))
223
- addMetric (e .suc , float64 (success ))
182
+ addMetric (& ms , p , e .info , 1 )
183
+ addMetric (& ms , p , e .dur , float64 (dur .Milliseconds ()))
184
+ addMetric (& ms , p , e .suc , float64 (success ))
224
185
225
186
for ns , di := range diskInfoByNamespace {
226
- addMetric (e .count , float64 (di .Count ), ns )
187
+ addMetric (& ms , p , e .count , float64 (di .Count ), ns )
227
188
for diskType , diskSize := range di .SizeByType {
228
- addMetric (e .size , diskSize , ns , string (diskType ))
189
+ addMetric (& ms , p , e .size , diskSize , ns , string (diskType ))
229
190
}
230
191
}
231
192
@@ -272,3 +233,47 @@ func (e *exporter) Collect(ch chan<- prometheus.Metric) {
272
233
}
273
234
}
274
235
}
236
+
237
+ func getDiskLabels (d unused.Disk , v bool ) []any {
238
+ diskLabels := []any {
239
+ slog .String ("name" , d .Name ()),
240
+ slog .Int ("size_gb" , d .SizeGB ()),
241
+ slog .Time ("created" , d .CreatedAt ()),
242
+ }
243
+
244
+ if v {
245
+ meta := d .Meta ()
246
+ diskMetaLabels := make ([]any , 0 , len (meta ))
247
+ for _ , k := range meta .Keys () {
248
+ diskMetaLabels = append (diskMetaLabels , slog .String (k , meta [k ]))
249
+ }
250
+ diskLabels = append (diskLabels , diskMetaLabels ... )
251
+ }
252
+
253
+ return diskLabels
254
+ }
255
+
256
+ func getNamespace (d unused.Disk , p unused.Provider ) string {
257
+ if strings .ToLower (p .Name ()) == "azure" {
258
+ return d .Meta ()["kubernetes.io-created-for-pvc-namespace" ]
259
+ }
260
+
261
+ return d .Meta ()["kubernetes.io/created-for/pvc/namespace" ]
262
+ }
263
+
264
+ func addMetric (ms * []metric , p unused.Provider , d * prometheus.Desc , v float64 , lbls ... string ) {
265
+ * ms = append (* ms , metric {
266
+ desc : d ,
267
+ value : v ,
268
+ labels : append ([]string {strings .ToLower (p .Name ()), p .ID ()}, lbls ... ),
269
+ })
270
+ }
271
+
272
+ func lastUsedTS (d unused.Disk ) float64 {
273
+ lastUsed := d .LastUsedAt ()
274
+ if lastUsed .IsZero () {
275
+ return 0
276
+ }
277
+
278
+ return float64 (lastUsed .UnixMilli ())
279
+ }
0 commit comments