1// Package provider provides a factory-like abstraction for metrics backends. 2// This package is provided specifically for the needs of the NY Times framework 3// Gizmo. Most normal Go kit users shouldn't need to use it. 4// 5// Normally, if your microservice needs to support different metrics backends, 6// you can simply do different construction based on a flag. For example, 7// 8// var latency metrics.Histogram 9// var requests metrics.Counter 10// switch *metricsBackend { 11// case "prometheus": 12// latency = prometheus.NewSummaryVec(...) 13// requests = prometheus.NewCounterVec(...) 14// case "statsd": 15// s := statsd.New(...) 16// t := time.NewTicker(5*time.Second) 17// go s.SendLoop(ctx, t.C, "tcp", "statsd.local:8125") 18// latency = s.NewHistogram(...) 19// requests = s.NewCounter(...) 20// default: 21// log.Fatal("unsupported metrics backend %q", *metricsBackend) 22// } 23// 24package provider 25 26import ( 27 "github.com/go-kit/kit/metrics" 28) 29 30// Provider abstracts over constructors and lifecycle management functions for 31// each supported metrics backend. It should only be used by those who need to 32// swap out implementations dynamically. 33// 34// This is primarily useful for intermediating frameworks, and is likely 35// unnecessary for most Go kit services. See the package-level doc comment for 36// more typical usage instructions. 37type Provider interface { 38 NewCounter(name string) metrics.Counter 39 NewGauge(name string) metrics.Gauge 40 NewHistogram(name string, buckets int) metrics.Histogram 41 Stop() 42} 43