Skip to content

Commit 858c62a

Browse files
committed
PMM-14431 Refactor to decrease complexity.
1 parent bf06103 commit 858c62a

File tree

1 file changed

+36
-38
lines changed

1 file changed

+36
-38
lines changed

exporter/metrics.go

Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -364,52 +364,50 @@ func makeMetrics(reservedNames []string, prefix string, m bson.M, labels map[str
364364
} else {
365365
l = labels
366366
}
367-
switch v := val.(type) {
368-
case bson.M:
369-
res = append(res, makeMetrics(reservedNames, nextPrefix, v, l, compatibleMode)...)
370-
case map[string]interface{}:
371-
res = append(res, makeMetrics(reservedNames, nextPrefix, v, l, compatibleMode)...)
372-
case primitive.A:
373-
res = append(res, processSlice(reservedNames, nextPrefix, v, l, compatibleMode)...)
374-
case []interface{}:
375-
continue
376-
default:
377-
rm, err := makeRawMetric(reservedNames, prefix, k, v, l)
367+
res = append(res, handleMetricSwitch(reservedNames, prefix, nextPrefix, k, val, l, compatibleMode)...)
368+
}
369+
return res
370+
}
371+
372+
// Helper for switch block from makeMetrics
373+
func handleMetricSwitch(reservedNames []string, prefix, nextPrefix, k string, val interface{}, l map[string]string, compatibleMode bool) []prometheus.Metric {
374+
var res []prometheus.Metric
375+
switch v := val.(type) {
376+
case bson.M:
377+
res = append(res, makeMetrics(reservedNames, nextPrefix, v, l, compatibleMode)...)
378+
case map[string]interface{}:
379+
res = append(res, makeMetrics(reservedNames, nextPrefix, v, l, compatibleMode)...)
380+
case primitive.A:
381+
res = append(res, processSlice(reservedNames, nextPrefix, v, l, compatibleMode)...)
382+
case []interface{}:
383+
// skip
384+
default:
385+
rm, err := makeRawMetric(reservedNames, prefix, k, v, l)
386+
if err != nil {
387+
invalidMetric := prometheus.NewInvalidMetric(prometheus.NewInvalidDesc(err), err)
388+
res = append(res, invalidMetric)
389+
return res
390+
}
391+
if rm == nil {
392+
return res
393+
}
394+
metrics := []*rawMetric{rm}
395+
if renamedMetrics := metricRenameAndLabel(rm, specialConversions); renamedMetrics != nil {
396+
metrics = renamedMetrics
397+
}
398+
for _, m := range metrics {
399+
metric, err := rawToPrometheusMetric(m)
378400
if err != nil {
379401
invalidMetric := prometheus.NewInvalidMetric(prometheus.NewInvalidDesc(err), err)
380402
res = append(res, invalidMetric)
381403
continue
382404
}
383-
384-
// makeRawMetric returns a nil metric for some data types like strings
385-
// because we cannot extract data from all types
386-
if rm == nil {
387-
continue
388-
}
389-
390-
metrics := []*rawMetric{rm}
391-
392-
if renamedMetrics := metricRenameAndLabel(rm, specialConversions); renamedMetrics != nil {
393-
metrics = renamedMetrics
394-
}
395-
396-
for _, m := range metrics {
397-
metric, err := rawToPrometheusMetric(m)
398-
if err != nil {
399-
invalidMetric := prometheus.NewInvalidMetric(prometheus.NewInvalidDesc(err), err)
400-
res = append(res, invalidMetric)
401-
continue
402-
}
403-
404-
res = append(res, metric)
405-
406-
if compatibleMode {
407-
res = appendCompatibleMetric(res, m)
408-
}
405+
res = append(res, metric)
406+
if compatibleMode {
407+
res = appendCompatibleMetric(res, m)
409408
}
410409
}
411410
}
412-
413411
return res
414412
}
415413

0 commit comments

Comments
 (0)