frostfs-node/pkg/metrics/registry.go
Evgenii Stratonikov 015d62425b [#164] metrics: Fill local registry explicitly
Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
2023-04-24 09:01:13 +00:00

40 lines
1.1 KiB
Go

package metrics
import (
"net/http"
"sync"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/collectors"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
// Handler returns an http.Handler for the local registry.
func Handler() http.Handler {
promhttp.Handler()
return promhttp.InstrumentMetricHandler(
registry,
promhttp.HandlerFor(registry, promhttp.HandlerOpts{}))
}
var (
registry = prometheus.NewRegistry()
// registeredCollectorsMtx protects collectors slice.
// It should not be acessed concurrently, but we can easily forget this in future, thus this mutex.
registeredCollectorsMtx sync.Mutex
registeredCollectors []prometheus.Collector
)
func init() {
mustRegister(collectors.NewProcessCollector(collectors.ProcessCollectorOpts{}))
mustRegister(collectors.NewGoCollector())
}
func mustRegister(cs ...prometheus.Collector) {
for i := range cs {
registry.MustRegister(cs[i])
}
registeredCollectorsMtx.Lock()
registeredCollectors = append(registeredCollectors, cs...)
registeredCollectorsMtx.Unlock()
}