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

Method Record

pkg/usagestats/stats.go:283–317  ·  view source on GitHub ↗
(v float64)

Source from the content-addressed store, hash-verified

281}
282
283func (s *Statistics) Record(v float64) {
284 for {
285 min := s.min.Load()
286 if min <= v {
287 break
288 }
289 if s.min.CompareAndSwap(min, v) {
290 break
291 }
292 }
293 for {
294 max := s.max.Load()
295 if max >= v {
296 break
297 }
298 if s.max.CompareAndSwap(max, v) {
299 break
300 }
301 }
302 for {
303 avg := s.avg.Load()
304 count := s.count.Load()
305 mean := s.mean.Load()
306 value := s.value.Load()
307
308 delta := v - mean
309 newCount := count + 1
310 newMean := mean + (delta / float64(newCount))
311 newValue := value + (delta * (v - newMean))
312 newAvg := avg + ((v - avg) / float64(newCount))
313 if s.avg.CompareAndSwap(avg, newAvg) && s.count.CompareAndSwap(count, newCount) && s.mean.CompareAndSwap(mean, newMean) && s.value.CompareAndSwap(value, newValue) {
314 break
315 }
316 }
317}
318
319type Counter struct {
320 total *atomic.Int64

Callers 3

Test_BuildReportFunction · 0.95
Test_BuildStatsFunction · 0.95
TestStatisticFunction · 0.95

Calls

no outgoing calls

Tested by 3

Test_BuildReportFunction · 0.76
Test_BuildStatsFunction · 0.76
TestStatisticFunction · 0.76