Skip to content

Commit 12ebb39

Browse files
authored
Merge pull request #90 from grafana/paula/refactor-exporter
Refactor provider file
2 parents b2599b6 + b696247 commit 12ebb39

File tree

1 file changed

+57
-52
lines changed

1 file changed

+57
-52
lines changed

cmd/unused-exporter/exporter.go

+57-52
Original file line numberDiff line numberDiff line change
@@ -132,14 +132,11 @@ func (e *exporter) pollProvider(p unused.Provider) {
132132
// polling immediately; we wait at the end.
133133

134134
var (
135-
providerName = strings.ToLower(p.Name())
136-
providerID = p.ID()
137-
138135
success int64 = 1
139136

140137
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()),
143140
)
144141
)
145142

@@ -155,29 +152,13 @@ func (e *exporter) pollProvider(p unused.Provider) {
155152
}
156153

157154
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
173156

157+
for _, d := range disks {
158+
diskLabels := getDiskLabels(d, e.verbose)
174159
e.logger.Info("unused disk found", diskLabels...)
175160

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)
181162
di := diskInfoByNamespace[ns]
182163
if di == nil {
183164
di = &namespaceInfo{
@@ -188,44 +169,24 @@ func (e *exporter) pollProvider(p unused.Provider) {
188169
di.Count += 1
189170
di.SizeByType[d.DiskType()] += float64(d.SizeGB())
190171

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-
212172
e.logger.Info(fmt.Sprintf("Disk %s last used at %v", d.Name(), d.LastUsedAt()))
213173

174+
m := d.Meta()
214175
if m.CreatedForPV() == "" {
215176
continue
216177
}
217178

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())
219180
}
220181

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))
224185

225186
for ns, di := range diskInfoByNamespace {
226-
addMetric(e.count, float64(di.Count), ns)
187+
addMetric(&ms, p, e.count, float64(di.Count), ns)
227188
for diskType, diskSize := range di.SizeByType {
228-
addMetric(e.size, diskSize, ns, string(diskType))
189+
addMetric(&ms, p, e.size, diskSize, ns, string(diskType))
229190
}
230191
}
231192

@@ -272,3 +233,47 @@ func (e *exporter) Collect(ch chan<- prometheus.Metric) {
272233
}
273234
}
274235
}
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

Comments
 (0)