common.go 903 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package metrics
  2. import "github.com/grafana/grafana/pkg/log"
  3. type MetricMeta struct {
  4. tags map[string]string
  5. name string
  6. }
  7. func NewMetricMeta(name string, tagStrings []string) *MetricMeta {
  8. if len(tagStrings)%2 != 0 {
  9. log.Fatal(3, "Metrics: tags array is missing value for key, %v", tagStrings)
  10. }
  11. tags := make(map[string]string)
  12. for i := 0; i < len(tagStrings); i += 2 {
  13. tags[tagStrings[i]] = tagStrings[i+1]
  14. }
  15. return &MetricMeta{
  16. tags: tags,
  17. name: name,
  18. }
  19. }
  20. func (m *MetricMeta) Name() string {
  21. return m.name
  22. }
  23. func (m *MetricMeta) Tags() map[string]string {
  24. return m.tags
  25. }
  26. func (m *MetricMeta) StringifyTags() string {
  27. if len(m.tags) == 0 {
  28. return ""
  29. }
  30. str := ""
  31. for key, value := range m.tags {
  32. str += "." + key + "_" + value
  33. }
  34. return str
  35. }
  36. type Metric interface {
  37. Name() string
  38. Tags() map[string]string
  39. StringifyTags() string
  40. Snapshot() Metric
  41. Clear()
  42. }