You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.1 KiB
42 lines
1.1 KiB
package models |
|
|
|
// Statistic is the representation of a statistic used by the monitoring service. |
|
type Statistic struct { |
|
Name string `json:"name"` |
|
Tags map[string]string `json:"tags"` |
|
Values map[string]interface{} `json:"values"` |
|
} |
|
|
|
// NewStatistic returns an initialized Statistic. |
|
func NewStatistic(name string) Statistic { |
|
return Statistic{ |
|
Name: name, |
|
Tags: make(map[string]string), |
|
Values: make(map[string]interface{}), |
|
} |
|
} |
|
|
|
// StatisticTags is a map that can be merged with others without causing |
|
// mutations to either map. |
|
type StatisticTags map[string]string |
|
|
|
// Merge creates a new map containing the merged contents of tags and t. |
|
// If both tags and the receiver map contain the same key, the value in tags |
|
// is used in the resulting map. |
|
// |
|
// Merge always returns a usable map. |
|
func (t StatisticTags) Merge(tags map[string]string) map[string]string { |
|
// Add everything in tags to the result. |
|
out := make(map[string]string, len(tags)) |
|
for k, v := range tags { |
|
out[k] = v |
|
} |
|
|
|
// Only add values from t that don't appear in tags. |
|
for k, v := range t { |
|
if _, ok := tags[k]; !ok { |
|
out[k] = v |
|
} |
|
} |
|
return out |
|
}
|
|
|