ae9f97221a
* go-metrics: fork library and introduce ResettingTimer and InfluxDB reporter. * vendor: change nonsense/go-metrics to ethersphere/go-metrics * go-metrics: add tests. move ResettingTimer logic from reporter to type. * all, metrics: pull in metrics package in go-ethereum * metrics/test: make sure metrics are enabled for tests * metrics: apply gosimple rules * metrics/exp, internal/debug: init expvar endpoint when starting pprof server * internal/debug: tiny comment formatting fix
43 lines
1.1 KiB
Go
43 lines
1.1 KiB
Go
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
|
|
}
|