Commit 852fbd93 authored by Zahoor Mohamed's avatar Zahoor Mohamed Committed by GitHub

P3 - Replace ethereum's metrics with bee's metrics (#73)

* added bee's metrics instead of ethereum's metrics in shed
parent 54486d7a
......@@ -38,6 +38,7 @@ const (
// information about naming and types.
type DB struct {
ldb *leveldb.DB
metrics metrics
quit chan struct{} // Quit channel to stop the metrics collection before closing the database
}
......@@ -53,6 +54,7 @@ func NewDB(path string, metricsPrefix string) (db *DB, err error) {
}
db = &DB{
ldb: ldb,
metrics: newMetrics(),
}
if _, err = db.getSchema(); err != nil {
......@@ -79,17 +81,23 @@ func NewDB(path string, metricsPrefix string) (db *DB, err error) {
func (db *DB) Put(key []byte, value []byte) (err error) {
err = db.ldb.Put(key, value, nil)
if err != nil {
db.metrics.PutFailCounter.Inc()
return err
}
db.metrics.PutCounter.Inc()
return nil
}
// Get wraps LevelDB Get method to increment metrics counter.
func (db *DB) Get(key []byte) (value []byte, err error) {
value, err = db.ldb.Get(key, nil)
if err != nil {
if err == leveldb.ErrNotFound {
db.metrics.GetNotFoundCounter.Inc()
return nil, err
} else {
db.metrics.GetFailCounter.Inc()
}
db.metrics.GetCounter.Inc()
return value, nil
}
......@@ -97,8 +105,10 @@ func (db *DB) Get(key []byte) (value []byte, err error) {
func (db *DB) Has(key []byte) (yes bool, err error) {
yes, err = db.ldb.Has(key, nil)
if err != nil {
db.metrics.HasFailCounter.Inc()
return false, err
}
db.metrics.HasCounter.Inc()
return yes, nil
}
......@@ -106,13 +116,16 @@ func (db *DB) Has(key []byte) (yes bool, err error) {
func (db *DB) Delete(key []byte) (err error) {
err = db.ldb.Delete(key, nil)
if err != nil {
db.metrics.DeleteFailCounter.Inc()
return err
}
db.metrics.DeleteCounter.Inc()
return nil
}
// NewIterator wraps LevelDB NewIterator method to increment metrics counter.
func (db *DB) NewIterator() iterator.Iterator {
db.metrics.IteratorCounter.Inc()
return db.ldb.NewIterator(nil, nil)
}
......@@ -120,8 +133,10 @@ func (db *DB) NewIterator() iterator.Iterator {
func (db *DB) WriteBatch(batch *leveldb.Batch) (err error) {
err = db.ldb.Write(batch, nil)
if err != nil {
db.metrics.WriteBatchFailCounter.Inc()
return err
}
db.metrics.WriteBatchCounter.Inc()
return nil
}
......
// Copyright 2020 The Swarm Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package shed
import (
m "github.com/ethersphere/bee/pkg/metrics"
"github.com/prometheus/client_golang/prometheus"
)
type metrics struct {
// all metrics fields must be exported
// to be able to return them by Metrics()
// using reflection
PutCounter prometheus.Counter
PutFailCounter prometheus.Counter
GetCounter prometheus.Counter
GetFailCounter prometheus.Counter
GetNotFoundCounter prometheus.Counter
HasCounter prometheus.Counter
HasFailCounter prometheus.Counter
DeleteCounter prometheus.Counter
DeleteFailCounter prometheus.Counter
IteratorCounter prometheus.Counter
WriteBatchCounter prometheus.Counter
WriteBatchFailCounter prometheus.Counter
}
func newMetrics() metrics {
subsystem := "shed"
return metrics{
PutCounter: prometheus.NewCounter(prometheus.CounterOpts{
Namespace: m.Namespace,
Subsystem: subsystem,
Name: "put_count",
Help: "Number of times the PUT operation is done.",
}),
PutFailCounter: prometheus.NewCounter(prometheus.CounterOpts{
Namespace: m.Namespace,
Subsystem: subsystem,
Name: "put_fail_count",
Help: "Number of times the PUT operation failed.",
}),
GetCounter: prometheus.NewCounter(prometheus.CounterOpts{
Namespace: m.Namespace,
Subsystem: subsystem,
Name: "get_count",
Help: "Number of times the GET operation is done.",
}),
GetNotFoundCounter: prometheus.NewCounter(prometheus.CounterOpts{
Namespace: m.Namespace,
Subsystem: subsystem,
Name: "get_not_found_count",
Help: "Number of times the GET operation could not find key.",
}),
GetFailCounter: prometheus.NewCounter(prometheus.CounterOpts{
Namespace: m.Namespace,
Subsystem: subsystem,
Name: "get_fail_count",
Help: "Number of times the GET operation is failed.",
}),
HasCounter: prometheus.NewCounter(prometheus.CounterOpts{
Namespace: m.Namespace,
Subsystem: subsystem,
Name: "has_count",
Help: "Number of times the HAS operation is done.",
}),
HasFailCounter: prometheus.NewCounter(prometheus.CounterOpts{
Namespace: m.Namespace,
Subsystem: subsystem,
Name: "has_fail_count",
Help: "Number of times the HAS operation failed.",
}),
DeleteCounter: prometheus.NewCounter(prometheus.CounterOpts{
Namespace: m.Namespace,
Subsystem: subsystem,
Name: "delete_count",
Help: "Number of times the DELETE operation is done.",
}),
DeleteFailCounter: prometheus.NewCounter(prometheus.CounterOpts{
Namespace: m.Namespace,
Subsystem: subsystem,
Name: "delete_fail_count",
Help: "Number of times the DELETE operation failed.",
}),
IteratorCounter: prometheus.NewCounter(prometheus.CounterOpts{
Namespace: m.Namespace,
Subsystem: subsystem,
Name: "iterator_count",
Help: "Number of times the ITERATOR operation is done.",
}),
WriteBatchCounter: prometheus.NewCounter(prometheus.CounterOpts{
Namespace: m.Namespace,
Subsystem: subsystem,
Name: "write_batch_count",
Help: "Number of times the WRITE_BATCH operation is done.",
}),
WriteBatchFailCounter: prometheus.NewCounter(prometheus.CounterOpts{
Namespace: m.Namespace,
Subsystem: subsystem,
Name: "write_batch_fail_count",
Help: "Number of times the WRITE_BATCH operation failed.",
}),
}
}
func (s *DB) Metrics() []prometheus.Collector {
return m.PrometheusCollectorsFromFields(s.metrics)
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment