diff --git a/prometheus/hashed_metric_list.go b/prometheus/hashed_metric_list.go index 79c8a20..5955b85 100644 --- a/prometheus/hashed_metric_list.go +++ b/prometheus/hashed_metric_list.go @@ -3,6 +3,8 @@ package prometheus import ( "crypto/sha256" "fmt" + "maps" + "slices" "sync" "time" @@ -80,8 +82,8 @@ func (m *HashedMetricList) Inc(labels prometheus.Labels) { defer m.mux.Unlock() metricKey := "" - for key, value := range labels { - metricKey = metricKey + key + "=" + value + ";" + for _, key := range slices.Sorted(maps.Keys(labels)) { + metricKey = metricKey + key + "=" + labels[key] + ";" } hashKey := fmt.Sprintf("%x", sha256.Sum256([]byte(metricKey))) if _, exists := m.List[hashKey]; exists { diff --git a/prometheus/hashed_metrics_list_test.go b/prometheus/hashed_metrics_list_test.go index cd02c5b..71dac32 100644 --- a/prometheus/hashed_metrics_list_test.go +++ b/prometheus/hashed_metrics_list_test.go @@ -14,25 +14,25 @@ func Test_HashedMetricsList(t *testing.T) { func hashedMetricsListGenerateMetrics(t *testing.T, m *HashedMetricList) { expectHashedListCount(t, m, 0) - m.Inc(prometheus.Labels{"key": "info"}) + m.Inc(prometheus.Labels{"key": "info", "foo": "bar"}) expectHashedListCount(t, m, 1) - m.Inc(prometheus.Labels{"key": "info"}) + m.Inc(prometheus.Labels{"key": "info", "foo": "bar"}) expectHashedListCount(t, m, 1) - m.Inc(prometheus.Labels{"key": "test"}) + m.Inc(prometheus.Labels{"key": "test", "foo": "bar"}) expectHashedListCount(t, m, 2) - m.Inc(prometheus.Labels{"key": "info"}) + m.Inc(prometheus.Labels{"key": "info", "foo": "bar"}) expectHashedListCount(t, m, 2) - m.Inc(prometheus.Labels{"key": "test"}) + m.Inc(prometheus.Labels{"key": "test", "foo": "bar"}) expectHashedListCount(t, m, 2) - m.Inc(prometheus.Labels{"key": "test2"}) + m.Inc(prometheus.Labels{"key": "test2", "foo": "bar"}) expectHashedListCount(t, m, 3) - m.Inc(prometheus.Labels{"key": "info"}) + m.Inc(prometheus.Labels{"key": "info", "foo": "bar"}) expectHashedListCount(t, m, 3) }