//
// SPDX-License-Identifier: AGPL-3.0
-package main
+package keepstore
import (
"sync"
InBytes uint64
OutBytes uint64
- // Prometheus metrics
- PromErrors prometheus.Counter
- PromInBytes prometheus.Counter
- PromOutBytes prometheus.Counter
- PromErrorCodes *prometheus.CounterVec
-
ErrorCodes map[string]uint64 `json:",omitempty"`
lock sync.Mutex
+
+ opsCounters *prometheus.CounterVec
+ errCounters *prometheus.CounterVec
+ ioBytes *prometheus.CounterVec
}
// Tick increments each of the given counters by 1 using
if err == nil {
return
}
- s.PromErrors.Inc()
s.Tick(&s.Errors)
s.lock.Lock()
}
s.ErrorCodes[errType]++
s.lock.Unlock()
- s.PromErrorCodes.WithLabelValues(errType).Inc()
+ if s.errCounters != nil {
+ s.errCounters.With(prometheus.Labels{"error_type": errType}).Inc()
+ }
}
// TickInBytes increments the incoming byte counter by n.
func (s *statsTicker) TickInBytes(n uint64) {
- s.PromInBytes.Add(float64(n))
+ if s.ioBytes != nil {
+ s.ioBytes.With(prometheus.Labels{"direction": "in"}).Add(float64(n))
+ }
atomic.AddUint64(&s.InBytes, n)
}
// TickOutBytes increments the outgoing byte counter by n.
func (s *statsTicker) TickOutBytes(n uint64) {
- s.PromOutBytes.Add(float64(n))
+ if s.ioBytes != nil {
+ s.ioBytes.With(prometheus.Labels{"direction": "out"}).Add(float64(n))
+ }
atomic.AddUint64(&s.OutBytes, n)
}
+
+// TickOps increments the counter of the listed operations by 1.
+func (s *statsTicker) TickOps(operations ...string) {
+ if s.opsCounters == nil {
+ return
+ }
+ for _, opType := range operations {
+ s.opsCounters.With(prometheus.Labels{"operation": opType}).Inc()
+ }
+}