@@ -412,38 +412,44 @@ func handleMetric(reservedNames []string, prefix, nextPrefix, k string, val inte
412412 case []interface {}:
413413 // skip
414414 default :
415- rm , err := makeRawMetric (reservedNames , prefix , k , v , l )
416- if err != nil {
417- invalidMetric := prometheus .NewInvalidMetric (prometheus .NewInvalidDesc (err ), err )
418- res = append (res , invalidMetric )
419- return res
420- }
415+ res = append (res , handleRawMetric (reservedNames , prefix , k , v , l , compatibleMode )... )
416+ }
417+ return res
418+ }
421419
422- // makeRawMetric returns a nil metric for some data types like strings
423- // because we cannot extract data from all types
424- if rm == nil {
425- return res
426- }
420+ func handleRawMetric (reservedNames []string , prefix , k string , v interface {}, l map [string ]string , compatibleMode bool ) []prometheus.Metric {
421+ var res []prometheus.Metric
422+ rm , err := makeRawMetric (reservedNames , prefix , k , v , l )
423+ if err != nil {
424+ invalidMetric := prometheus .NewInvalidMetric (prometheus .NewInvalidDesc (err ), err )
425+ res = append (res , invalidMetric )
426+ return res
427+ }
427428
428- metrics := []* rawMetric {rm }
429+ // makeRawMetric returns a nil metric for some data types like strings
430+ // because we cannot extract data from all types
431+ if rm == nil {
432+ return res
433+ }
429434
430- if renamedMetrics := metricRenameAndLabel (rm , specialConversions ); renamedMetrics != nil {
431- metrics = renamedMetrics
432- }
435+ metrics := []* rawMetric {rm }
433436
434- for _ , m := range metrics {
435- metric , err := rawToPrometheusMetric (m )
436- if err != nil {
437- invalidMetric := prometheus .NewInvalidMetric (prometheus .NewInvalidDesc (err ), err )
438- res = append (res , invalidMetric )
439- continue
440- }
437+ if renamedMetrics := metricRenameAndLabel (rm , specialConversions ); renamedMetrics != nil {
438+ metrics = renamedMetrics
439+ }
441440
442- res = append (res , metric )
441+ for _ , m := range metrics {
442+ metric , err := rawToPrometheusMetric (m )
443+ if err != nil {
444+ invalidMetric := prometheus .NewInvalidMetric (prometheus .NewInvalidDesc (err ), err )
445+ res = append (res , invalidMetric )
446+ continue
447+ }
443448
444- if compatibleMode {
445- res = appendCompatibleMetric (res , m )
446- }
449+ res = append (res , metric )
450+
451+ if compatibleMode {
452+ res = appendCompatibleMetric (res , m )
447453 }
448454 }
449455 return res
0 commit comments