@@ -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