From e36cdf099e92738de42370ef97e52b0a7075ad5e Mon Sep 17 00:00:00 2001 From: Lukasz Raczylo Date: Wed, 5 Nov 2025 10:26:51 +0000 Subject: [PATCH] fixup! Update go.mod and go.sum --- monitoring/helpers.go | 46 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/monitoring/helpers.go b/monitoring/helpers.go index 11dc056..cefb8c6 100644 --- a/monitoring/helpers.go +++ b/monitoring/helpers.go @@ -69,19 +69,33 @@ func ensureDefaultLabels(labels *map[string]string, podName string) { } func appendSortedLabels(buf *bytes.Buffer, labels map[string]string) { - keys := getSortedKeys(labels) + if len(labels) == 0 { + return + } + + // Create a snapshot to avoid concurrent access issues + labelsCopy := make(map[string]string, len(labels)) + for k, v := range labels { + labelsCopy[k] = v + } + + keys := getSortedKeys(labelsCopy) for i, k := range keys { if i > 0 { buf.WriteByte(',') } buf.WriteString(k) buf.WriteString(`="`) - buf.WriteString(labels[k]) + buf.WriteString(labelsCopy[k]) buf.WriteByte('"') } } func getSortedKeys(labels map[string]string) []string { + if labels == nil { + return []string{} + } + labelsKey := labelsToString(labels) // Check if the sorted keys are already cached @@ -89,7 +103,7 @@ func getSortedKeys(labels map[string]string) []string { return keys.([]string) } - // Compute the sorted keys + // Compute the sorted keys - create a snapshot to avoid concurrent access issues keys := make([]string, 0, len(labels)) for k := range labels { keys = append(keys, k) @@ -103,9 +117,17 @@ func getSortedKeys(labels map[string]string) []string { } func labelsToString(labels map[string]string) string { + if labels == nil { + return "" + } + + // Create a snapshot of the map to avoid concurrent access issues keys := make([]string, 0, len(labels)) - for k := range labels { + values := make(map[string]string, len(labels)) + + for k, v := range labels { keys = append(keys, k) + values[k] = v } sort.Strings(keys) @@ -113,7 +135,7 @@ func labelsToString(labels map[string]string) string { for _, k := range keys { sb.WriteString(k) sb.WriteByte('=') - sb.WriteString(labels[k]) + sb.WriteString(values[k]) sb.WriteByte(';') } return sb.String() @@ -168,13 +190,23 @@ func compile_metrics_with_labels(name string, labels map[string]string) string { buf.WriteString(name) - keys := getSortedKeys(labels) + if len(labels) == 0 { + return buf.String() + } + + // Create a snapshot to avoid concurrent access issues + labelsCopy := make(map[string]string, len(labels)) + for k, v := range labels { + labelsCopy[k] = v + } + + keys := getSortedKeys(labelsCopy) for _, k := range keys { buf.WriteByte('_') buf.WriteString(k) buf.WriteByte('_') - buf.WriteString(labels[k]) + buf.WriteString(labelsCopy[k]) } return buf.String()