Files
core/prometheus/prometheus.go
Jan Stabenow 9c0b535199 Add v16.7.2
2022-05-13 19:26:45 +02:00

52 lines
935 B
Go

package prometheus
import (
"net/http"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
type Metrics interface {
Register(cs prometheus.Collector) error
UnregisterAll()
Reader
}
type Reader interface {
HTTPHandler() http.Handler
}
type metrics struct {
registry *prometheus.Registry
collectors []prometheus.Collector
}
func New() Metrics {
m := &metrics{
registry: prometheus.NewRegistry(),
}
return m
}
func (m *metrics) Register(cs prometheus.Collector) error {
if err := m.registry.Register(cs); err != nil {
return err
}
m.collectors = append(m.collectors, cs)
return nil
}
func (m *metrics) UnregisterAll() {
for _, cs := range m.collectors {
m.registry.Unregister(cs)
}
}
func (m *metrics) HTTPHandler() http.Handler {
return promhttp.InstrumentMetricHandler(m.registry, promhttp.HandlerFor(m.registry, promhttp.HandlerOpts{}))
}