1package models 2 3// Statistic is the representation of a statistic used by the monitoring service. 4type Statistic struct { 5 Name string `json:"name"` 6 Tags map[string]string `json:"tags"` 7 Values map[string]interface{} `json:"values"` 8} 9 10// NewStatistic returns an initialized Statistic. 11func NewStatistic(name string) Statistic { 12 return Statistic{ 13 Name: name, 14 Tags: make(map[string]string), 15 Values: make(map[string]interface{}), 16 } 17} 18 19// StatisticTags is a map that can be merged with others without causing 20// mutations to either map. 21type StatisticTags map[string]string 22 23// Merge creates a new map containing the merged contents of tags and t. 24// If both tags and the receiver map contain the same key, the value in tags 25// is used in the resulting map. 26// 27// Merge always returns a usable map. 28func (t StatisticTags) Merge(tags map[string]string) map[string]string { 29 // Add everything in tags to the result. 30 out := make(map[string]string, len(tags)) 31 for k, v := range tags { 32 out[k] = v 33 } 34 35 // Only add values from t that don't appear in tags. 36 for k, v := range t { 37 if _, ok := tags[k]; !ok { 38 out[k] = v 39 } 40 } 41 return out 42} 43