info.go 874 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package aggregator
  2. import (
  3. "maps"
  4. "sync"
  5. "time"
  6. )
  7. // infoAggregator is MetricAggregator meant to record label values and addition information
  8. type infoAggregator struct {
  9. lock sync.RWMutex
  10. labelValues []string
  11. additionalInfo map[string]string
  12. }
  13. func Info(labelValues []string) MetricAggregator {
  14. return &infoAggregator{
  15. labelValues: labelValues,
  16. }
  17. }
  18. func (a *infoAggregator) AdditionInfo() map[string]string {
  19. a.lock.Lock()
  20. defer a.lock.Unlock()
  21. return maps.Clone(a.additionalInfo)
  22. }
  23. func (a *infoAggregator) LabelValues() []string {
  24. return a.labelValues
  25. }
  26. func (a *infoAggregator) Update(value float64, timestamp time.Time, additionalInfo map[string]string) {
  27. a.lock.Lock()
  28. defer a.lock.Unlock()
  29. a.additionalInfo = maps.Clone(additionalInfo)
  30. }
  31. func (a *infoAggregator) Value() []MetricValue {
  32. return []MetricValue{
  33. {Value: 1},
  34. }
  35. }