| 12345678910111213141516171819202122232425262728293031323334353637 |
- package metrics
- import "sync"
- type Registry interface {
- GetSnapshots() []Metric
- Register(metric Metric)
- }
- // The standard implementation of a Registry is a mutex-protected map
- // of names to metrics.
- type StandardRegistry struct {
- metrics []Metric
- mutex sync.Mutex
- }
- // Create a new registry.
- func NewRegistry() Registry {
- return &StandardRegistry{
- metrics: make([]Metric, 0),
- }
- }
- func (r *StandardRegistry) Register(metric Metric) {
- r.mutex.Lock()
- defer r.mutex.Unlock()
- r.metrics = append(r.metrics, metric)
- }
- // Call the given function for each registered metric.
- func (r *StandardRegistry) GetSnapshots() []Metric {
- metrics := make([]Metric, len(r.metrics))
- for i, metric := range r.metrics {
- metrics[i] = metric.Snapshot()
- }
- return metrics
- }
|