mirror of
https://github.com/datarhei/core.git
synced 2025-09-27 04:16:25 +08:00
52 lines
935 B
Go
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{}))
|
|
}
|