info.go 990 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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. name string
  11. labelValues []string
  12. additionalInfo map[string]string
  13. }
  14. func Info(name string, labelValues []string) MetricAggregator {
  15. return &infoAggregator{
  16. name: name,
  17. labelValues: labelValues,
  18. }
  19. }
  20. func (a *infoAggregator) Name() string {
  21. return a.name
  22. }
  23. func (a *infoAggregator) AdditionInfo() map[string]string {
  24. a.lock.Lock()
  25. defer a.lock.Unlock()
  26. return maps.Clone(a.additionalInfo)
  27. }
  28. func (a *infoAggregator) LabelValues() []string {
  29. return a.labelValues
  30. }
  31. func (a *infoAggregator) Update(value float64, timestamp time.Time, additionalInfo map[string]string) {
  32. a.lock.Lock()
  33. defer a.lock.Unlock()
  34. a.additionalInfo = maps.Clone(additionalInfo)
  35. }
  36. func (a *infoAggregator) Value() []MetricValue {
  37. return []MetricValue{
  38. {Value: 1},
  39. }
  40. }