Просмотр исходного кода

net/portmapper: avoid alloc in getUPnPErrorsMetric

Updates #cleanup

Signed-off-by: Andrew Dunham <[email protected]>
Change-Id: Iea558024c038face24cc46584421998d10f13a66
Andrew Dunham 2 лет назад
Родитель
Сommit
ef596aed9b
1 измененных файлов с 12 добавлено и 10 удалено
  1. 12 10
      net/portmapper/portmapper.go

+ 12 - 10
net/portmapper/portmapper.go

@@ -1028,19 +1028,21 @@ var (
 
 // UPnP error metric that's keyed by code; lazily registered on first read
 var (
-	metricUPnPErrorsByCode syncs.Map[string, *clientmetric.Metric]
+	metricUPnPErrorsByCode syncs.Map[int, *clientmetric.Metric]
 )
 
 func getUPnPErrorsMetric(code int) *clientmetric.Metric {
-	// Metric names cannot contain a hyphen, so we handle negative numbers
-	// by prefixing the name with a "minus_".
-	var codeStr string
-	if code < 0 {
-		codeStr = fmt.Sprintf("portmap_upnp_errors_with_code_minus_%d", -code)
-	} else {
-		codeStr = fmt.Sprintf("portmap_upnp_errors_with_code_%d", code)
-	}
+	mm, _ := metricUPnPErrorsByCode.LoadOrInit(code, func() *clientmetric.Metric {
+		// Metric names cannot contain a hyphen, so we handle negative
+		// numbers by prefixing the name with a "minus_".
+		var codeStr string
+		if code < 0 {
+			codeStr = fmt.Sprintf("portmap_upnp_errors_with_code_minus_%d", -code)
+		} else {
+			codeStr = fmt.Sprintf("portmap_upnp_errors_with_code_%d", code)
+		}
 
-	mm, _ := metricUPnPErrorsByCode.LoadOrInit(codeStr, func() *clientmetric.Metric { return clientmetric.NewCounter(codeStr) })
+		return clientmetric.NewCounter(codeStr)
+	})
 	return mm
 }