1
0
Fork 0
mirror of https://github.com/anyproto/any-sync.git synced 2025-06-08 05:57:03 +09:00
any-sync/app/ocache/metrics.go
2023-01-05 15:34:09 +03:00

52 lines
1.2 KiB
Go

package ocache
import "github.com/prometheus/client_golang/prometheus"
func WithPrometheus(reg *prometheus.Registry, namespace, subsystem string) Option {
if subsystem == "" {
subsystem = "cache"
}
return func(cache *oCache) {
cache.metrics = &metrics{
hit: prometheus.NewCounter(prometheus.CounterOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "hit",
Help: "cache hit count",
}),
miss: prometheus.NewCounter(prometheus.CounterOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "miss",
Help: "cache miss count",
}),
gc: prometheus.NewCounter(prometheus.CounterOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "gc",
Help: "garbage collected count",
}),
size: prometheus.NewGaugeFunc(prometheus.GaugeOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "size",
Help: "cache size",
}, func() float64 {
return float64(cache.Len())
}),
}
reg.MustRegister(
cache.metrics.hit,
cache.metrics.miss,
cache.metrics.gc,
cache.metrics.size,
)
}
}
type metrics struct {
hit prometheus.Counter
miss prometheus.Counter
gc prometheus.Counter
size prometheus.GaugeFunc
}