common.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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) GetTagsCopy() map[string]string {
  24. if len(m.tags) == 0 {
  25. return make(map[string]string)
  26. }
  27. copy := make(map[string]string)
  28. for k2, v2 := range m.tags {
  29. copy[k2] = v2
  30. }
  31. return copy
  32. }
  33. func (m *MetricMeta) StringifyTags() string {
  34. if len(m.tags) == 0 {
  35. return ""
  36. }
  37. str := ""
  38. for key, value := range m.tags {
  39. str += "." + key + "_" + value
  40. }
  41. return str
  42. }
  43. type Metric interface {
  44. Name() string
  45. GetTagsCopy() map[string]string
  46. StringifyTags() string
  47. Snapshot() Metric
  48. }