Refactor the multi-host salt install page.
[arvados.git] / services / keepstore / stats_ticker.go
index a9f24744b3991c04736838e054ffcde3f373531e..520d4530c2ac2404ca47f561b3dd08c015f1e832 100644 (file)
@@ -2,7 +2,7 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-package main
+package keepstore
 
 import (
        "sync"
@@ -16,21 +16,12 @@ type statsTicker struct {
        InBytes  uint64
        OutBytes uint64
 
-       // Prometheus metrics
-       errors      prometheus.Counter
-       inBytes     prometheus.Counter
-       outBytes    prometheus.Counter
-       errCounters *prometheus.CounterVec
-
        ErrorCodes map[string]uint64 `json:",omitempty"`
        lock       sync.Mutex
-}
 
-func (s *statsTicker) setup(m *volumeMetrics) {
-       s.errors = m.Errors
-       s.errCounters = m.ErrorCodes
-       s.inBytes = m.InBytes
-       s.outBytes = m.OutBytes
+       opsCounters *prometheus.CounterVec
+       errCounters *prometheus.CounterVec
+       ioBytes     *prometheus.CounterVec
 }
 
 // Tick increments each of the given counters by 1 using
@@ -48,9 +39,6 @@ func (s *statsTicker) TickErr(err error, errType string) {
        if err == nil {
                return
        }
-       if s.errors != nil {
-               s.errors.Inc()
-       }
        s.Tick(&s.Errors)
 
        s.lock.Lock()
@@ -60,22 +48,32 @@ func (s *statsTicker) TickErr(err error, errType string) {
        s.ErrorCodes[errType]++
        s.lock.Unlock()
        if s.errCounters != nil {
-               s.errCounters.WithLabelValues(errType).Inc()
+               s.errCounters.With(prometheus.Labels{"error_type": errType}).Inc()
        }
 }
 
 // TickInBytes increments the incoming byte counter by n.
 func (s *statsTicker) TickInBytes(n uint64) {
-       if s.inBytes != nil {
-               s.inBytes.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) {
-       if s.outBytes != nil {
-               s.outBytes.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()
+       }
+}