MCPcopy
hub / github.com/grafana/tempo / TestAvgOverTimeScalesResults

Function TestAvgOverTimeScalesResults

pkg/traceql/engine_metrics_average_test.go:124–229  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

122}
123
124func TestAvgOverTimeScalesResults(t *testing.T) {
125 // Test data designed to verify multiplication accuracy in weighted mean calculation
126 // The addWeigthedMean function uses: meanDelta := ((mean - currentMean.mean) * weight) / sumWeights
127 in := []Span{
128 // Time interval 1: service=a has 2 spans with durations 100, 200 (mean=150, count=2)
129 newMockSpan(nil).WithStartTime(uint64(1*time.Second)).WithSpanString("service", "a").WithDuration(uint64(100 * time.Second)),
130 newMockSpan(nil).WithStartTime(uint64(1*time.Second)).WithSpanString("service", "a").WithDuration(uint64(200 * time.Second)),
131
132 // Time interval 1: service=b has 3 spans with durations 300, 600, 900 (mean=600, count=3)
133 newMockSpan(nil).WithStartTime(uint64(1*time.Second)).WithSpanString("service", "b").WithDuration(uint64(300 * time.Second)),
134 newMockSpan(nil).WithStartTime(uint64(1*time.Second)).WithSpanString("service", "b").WithDuration(uint64(600 * time.Second)),
135 newMockSpan(nil).WithStartTime(uint64(1*time.Second)).WithSpanString("service", "b").WithDuration(uint64(900 * time.Second)),
136
137 // Time interval 2: service=a has 4 spans with durations 400, 800, 1200, 1600 (mean=1000, count=4)
138 newMockSpan(nil).WithStartTime(uint64(2*time.Second)).WithSpanString("service", "a").WithDuration(uint64(400 * time.Second)),
139 newMockSpan(nil).WithStartTime(uint64(2*time.Second)).WithSpanString("service", "a").WithDuration(uint64(800 * time.Second)),
140 newMockSpan(nil).WithStartTime(uint64(2*time.Second)).WithSpanString("service", "a").WithDuration(uint64(1200 * time.Second)),
141 newMockSpan(nil).WithStartTime(uint64(2*time.Second)).WithSpanString("service", "a").WithDuration(uint64(1600 * time.Second)),
142
143 // Time interval 2: service=b has 1 span with duration 2000 (mean=2000, count=1)
144 newMockSpan(nil).WithStartTime(uint64(2*time.Second)).WithSpanString("service", "b").WithDuration(uint64(2000 * time.Second)),
145
146 // Time interval 3: service=a has varying precision values to test floating point accuracy
147 newMockSpan(nil).WithStartTime(uint64(3*time.Second)).WithSpanString("service", "a").WithDuration(uint64(123 * time.Second)),
148 newMockSpan(nil).WithStartTime(uint64(3*time.Second)).WithSpanString("service", "a").WithDuration(uint64(456 * time.Second)),
149 newMockSpan(nil).WithStartTime(uint64(3*time.Second)).WithSpanString("service", "a").WithDuration(uint64(789 * time.Second)),
150 }
151
152 a := newAverageOverTimeMetricsAggregator(IntrinsicDurationAttribute, []Attribute{NewAttribute("service")})
153 a.init(&tempopb.QueryRangeRequest{
154 Start: 1,
155 End: uint64(3 * time.Second),
156 Step: uint64(1 * time.Second),
157 }, AggregateModeRaw)
158
159 for _, span := range in {
160 a.observe(span)
161 }
162
163 ss := a.result(1.0)
164 expected := []TimeSeries{
165 {
166 Labels: Labels{
167 Label{Name: ".service", Value: NewStaticString("a")},
168 },
169 Values: []float64{150.0, 1000.0, 456.0},
170 Exemplars: []Exemplar{},
171 },
172 {
173 Labels: Labels{
174 Label{Name: ".service", Value: NewStaticString("a")},
175 Label{internalLabelMetaType, NewStaticString(internalMetaTypeCount)},
176 },
177 Values: []float64{2, 4, 3},
178 },
179 {
180 Labels: Labels{
181 Label{Name: ".service", Value: NewStaticString("b")},

Callers

nothing calls this directly

Calls 11

newMockSpanFunction · 0.85
NewAttributeFunction · 0.85
NewStaticStringFunction · 0.85
requireEqualSeriesSetsFunction · 0.85
WithDurationMethod · 0.80
WithSpanStringMethod · 0.80
WithStartTimeMethod · 0.80
initMethod · 0.65
observeMethod · 0.65
resultMethod · 0.65

Tested by

no test coverage detected