mirror of
https://github.com/prometheus/statsd_exporter.git
synced 2025-03-13 03:02:40 +00:00
Drop Value() method from MultiValueEvent and fixing expansion logic
Signed-off-by: Pedro Tanaka <pedro.stanaka@gmail.com>
This commit is contained in:
parent
a125dac85b
commit
cc1fcb45af
2 changed files with 53 additions and 13 deletions
|
@ -18,6 +18,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
|
|
||||||
"github.com/prometheus/statsd_exporter/pkg/clock"
|
"github.com/prometheus/statsd_exporter/pkg/clock"
|
||||||
"github.com/prometheus/statsd_exporter/pkg/mapper"
|
"github.com/prometheus/statsd_exporter/pkg/mapper"
|
||||||
)
|
)
|
||||||
|
@ -170,20 +171,21 @@ func (m *MultiObserverEvent) Values() []float64 { return m.OValues }
|
||||||
// And keep the exporter code compatible with previous versions.
|
// And keep the exporter code compatible with previous versions.
|
||||||
func (m *MultiObserverEvent) Expand() []Event {
|
func (m *MultiObserverEvent) Expand() []Event {
|
||||||
if len(m.OValues) == 1 && m.SampleRate == 0 {
|
if len(m.OValues) == 1 && m.SampleRate == 0 {
|
||||||
return []Event{m}
|
return []Event{
|
||||||
|
&ObserverEvent{
|
||||||
|
OMetricName: m.OMetricName,
|
||||||
|
OValue: m.OValues[0],
|
||||||
|
OLabels: copyLabels(m.OLabels),
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
events := make([]Event, 0, len(m.OValues))
|
events := make([]Event, 0, len(m.OValues))
|
||||||
for _, value := range m.OValues {
|
for _, value := range m.OValues {
|
||||||
labels := make(map[string]string, len(m.OLabels))
|
|
||||||
for k, v := range m.OLabels {
|
|
||||||
labels[k] = v
|
|
||||||
}
|
|
||||||
|
|
||||||
events = append(events, &ObserverEvent{
|
events = append(events, &ObserverEvent{
|
||||||
OMetricName: m.OMetricName,
|
OMetricName: m.OMetricName,
|
||||||
OValue: value,
|
OValue: value,
|
||||||
OLabels: labels,
|
OLabels: copyLabels(m.OLabels),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -191,7 +193,14 @@ func (m *MultiObserverEvent) Expand() []Event {
|
||||||
multiplier := int(1 / m.SampleRate)
|
multiplier := int(1 / m.SampleRate)
|
||||||
multipliedEvents := make([]Event, 0, len(events)*multiplier)
|
multipliedEvents := make([]Event, 0, len(events)*multiplier)
|
||||||
for i := 0; i < multiplier; i++ {
|
for i := 0; i < multiplier; i++ {
|
||||||
multipliedEvents = append(multipliedEvents, events...)
|
for _, event := range events {
|
||||||
|
e := event.(*ObserverEvent)
|
||||||
|
multipliedEvents = append(multipliedEvents, &ObserverEvent{
|
||||||
|
OMetricName: e.OMetricName,
|
||||||
|
OValue: e.OValue,
|
||||||
|
OLabels: copyLabels(e.OLabels),
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return multipliedEvents
|
return multipliedEvents
|
||||||
}
|
}
|
||||||
|
@ -199,6 +208,15 @@ func (m *MultiObserverEvent) Expand() []Event {
|
||||||
return events
|
return events
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Helper function to copy labels map
|
||||||
|
func copyLabels(labels map[string]string) map[string]string {
|
||||||
|
newLabels := make(map[string]string, len(labels))
|
||||||
|
for k, v := range labels {
|
||||||
|
newLabels[k] = v
|
||||||
|
}
|
||||||
|
return newLabels
|
||||||
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
_ ExpandableEvent = &MultiObserverEvent{}
|
_ ExpandableEvent = &MultiObserverEvent{}
|
||||||
_ MultiValueEvent = &MultiObserverEvent{}
|
_ MultiValueEvent = &MultiObserverEvent{}
|
||||||
|
|
|
@ -14,11 +14,13 @@
|
||||||
package event
|
package event
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
|
|
||||||
"github.com/prometheus/statsd_exporter/pkg/clock"
|
"github.com/prometheus/statsd_exporter/pkg/clock"
|
||||||
"github.com/prometheus/statsd_exporter/pkg/mapper"
|
"github.com/prometheus/statsd_exporter/pkg/mapper"
|
||||||
)
|
)
|
||||||
|
@ -180,6 +182,7 @@ func TestMultiValueEvent(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMultiObserverEvent_Expand(t *testing.T) {
|
func TestMultiObserverEvent_Expand(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
event *MultiObserverEvent
|
event *MultiObserverEvent
|
||||||
|
@ -194,11 +197,10 @@ func TestMultiObserverEvent_Expand(t *testing.T) {
|
||||||
SampleRate: 0,
|
SampleRate: 0,
|
||||||
},
|
},
|
||||||
wantEvents: []Event{
|
wantEvents: []Event{
|
||||||
&MultiObserverEvent{
|
&ObserverEvent{
|
||||||
OMetricName: "test_metric",
|
OMetricName: "test_metric",
|
||||||
OValues: []float64{1.0},
|
OValue: 1.0,
|
||||||
OLabels: map[string]string{"label": "value"},
|
OLabels: map[string]string{"label": "value"},
|
||||||
SampleRate: 0,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -263,9 +265,29 @@ func TestMultiObserverEvent_Expand(t *testing.T) {
|
||||||
|
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
got := tt.event.Expand()
|
got := tt.event.Expand()
|
||||||
if !reflect.DeepEqual(got, tt.wantEvents) {
|
if len(tt.wantEvents) != len(got) {
|
||||||
t.Errorf("MultiObserverEvent.Expand() = %v, want %v", got, tt.wantEvents)
|
t.Fatalf("Expected %d events, but got %d", len(tt.wantEvents), len(got))
|
||||||
|
}
|
||||||
|
|
||||||
|
eventCount := func(events []Event) map[string]int {
|
||||||
|
counts := make(map[string]int)
|
||||||
|
for _, event := range events {
|
||||||
|
oe := event.(*ObserverEvent)
|
||||||
|
key := fmt.Sprintf("%s%f%v", oe.OMetricName, oe.OValue, oe.OLabels)
|
||||||
|
counts[key]++
|
||||||
|
}
|
||||||
|
return counts
|
||||||
|
}
|
||||||
|
|
||||||
|
wantMap := eventCount(tt.wantEvents)
|
||||||
|
gotMap := eventCount(got)
|
||||||
|
|
||||||
|
for key, count := range wantMap {
|
||||||
|
if gotMap[key] != count {
|
||||||
|
t.Fatalf("Event mismatch for key %v: expected %d, got %d", key, count, gotMap[key])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue