X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f0553505e32ee00999d1d680da14260a9a0f6b99..7c430b8a41da3a66522d1ca08e3a9f637b609195:/services/keepstore/stats_ticker.go diff --git a/services/keepstore/stats_ticker.go b/services/keepstore/stats_ticker.go index 36fbcf98af..342b9e3205 100644 --- a/services/keepstore/stats_ticker.go +++ b/services/keepstore/stats_ticker.go @@ -5,7 +5,6 @@ package main import ( - "fmt" "sync" "sync/atomic" @@ -19,28 +18,10 @@ type statsTicker struct { ErrorCodes map[string]uint64 `json:",omitempty"` lock sync.Mutex -} -func (s *statsTicker) setupPrometheus(drv string, reg *prometheus.Registry, lbl prometheus.Labels) { - metrics := map[string][]interface{}{ - "errors": []interface{}{string("errors"), s.Errors}, - "in_bytes": []interface{}{string("input bytes"), s.InBytes}, - "out_bytes": []interface{}{string("output bytes"), s.OutBytes}, - } - for mName, data := range metrics { - mHelp := data[0].(string) - mVal := data[1].(uint64) - reg.Register(prometheus.NewGaugeFunc( - prometheus.GaugeOpts{ - Namespace: "arvados", - Subsystem: "keepstore", - Name: fmt.Sprintf("%s_%s", drv, mName), - Help: fmt.Sprintf("Number of %s backend %s", drv, mHelp), - ConstLabels: lbl, - }, - func() float64 { return float64(mVal) }, - )) - } + opsCounters *prometheus.CounterVec + errCounters *prometheus.CounterVec + ioBytes *prometheus.CounterVec } // Tick increments each of the given counters by 1 using @@ -66,14 +47,33 @@ func (s *statsTicker) TickErr(err error, errType string) { } s.ErrorCodes[errType]++ s.lock.Unlock() + 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) { + 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.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() + } +}