diff options
Diffstat (limited to 'service/metrics/service.go')
-rw-r--r-- | service/metrics/service.go | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/service/metrics/service.go b/service/metrics/service.go new file mode 100644 index 00000000..50b533f8 --- /dev/null +++ b/service/metrics/service.go @@ -0,0 +1,53 @@ +package metrics + +import ( + "context" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promhttp" + "net/http" +) + +// ID declares public service name. +const ID = "metrics" + +// Service to manage application metrics using Prometheus. +type Service struct { + cfg *Config + http *http.Server +} + +// Init service. +func (s *Service) Init(cfg *Config) (bool, error) { + s.cfg = cfg + return true, nil +} + +// Enabled indicates that server is able to collect metrics. +func (s *Service) Enabled() bool { + return s.cfg != nil +} + +// Register new prometheus collector. +func (s *Service) Register(c prometheus.Collector) error { + return prometheus.Register(c) +} + +// MustRegister registers new collector or fails with panic. +func (s *Service) MustRegister(c prometheus.Collector) { + if err := prometheus.Register(c); err != nil { + panic(err) + } +} + +// Serve prometheus metrics service. +func (s *Service) Serve() error { + s.http = &http.Server{Addr: s.cfg.Address, Handler: promhttp.Handler()} + + return s.http.ListenAndServe() +} + +// Stop prometheus metrics service. +func (s *Service) Stop() { + // gracefully stop server + s.http.Shutdown(context.Background()) +} |