Report metrics of txcache
parent
4343c888a0
commit
2535e4b6b7
|
@ -156,7 +156,7 @@ func main() {
|
|||
glog.Fatal("rpc: ", err)
|
||||
}
|
||||
|
||||
index, err = db.NewRocksDB(*dbPath, chain.GetChainParser())
|
||||
index, err = db.NewRocksDB(*dbPath, chain.GetChainParser(), metrics)
|
||||
if err != nil {
|
||||
glog.Fatal("rocksDB: ", err)
|
||||
}
|
||||
|
|
|
@ -15,11 +15,11 @@ const (
|
|||
|
||||
// InternalStateColumn contains the data of a db column
|
||||
type InternalStateColumn struct {
|
||||
Name string `json:"name"`
|
||||
Version uint32 `json:"version"`
|
||||
Rows int64 `json:"rows"`
|
||||
KeysSum int64 `json:"keysSum"`
|
||||
ValuesSum int64 `json:"valuesSum"`
|
||||
Name string `json:"name"`
|
||||
Version uint32 `json:"version"`
|
||||
Rows int64 `json:"rows"`
|
||||
KeyBytes int64 `json:"keysSum"`
|
||||
ValueBytes int64 `json:"valuesSum"`
|
||||
}
|
||||
|
||||
// InternalState contains the data of the internal state
|
||||
|
@ -97,20 +97,29 @@ func (is *InternalState) GetMempoolSyncState() (bool, time.Time) {
|
|||
return is.IsMempoolSynchronized, is.LastMempoolSync
|
||||
}
|
||||
|
||||
func (is *InternalState) AddDBColumnStats(c int, rowsDiff int64, keysSumDiff int64, valuesSumDiff int64) {
|
||||
func (is *InternalState) AddDBColumnStats(c int, rowsDiff int64, keyBytesDiff int64, valueBytesDiff int64) {
|
||||
is.mux.Lock()
|
||||
defer is.mux.Unlock()
|
||||
is.DbColumns[c].Rows += rowsDiff
|
||||
is.DbColumns[c].KeysSum += keysSumDiff
|
||||
is.DbColumns[c].ValuesSum += valuesSumDiff
|
||||
is.DbColumns[c].KeyBytes += keyBytesDiff
|
||||
is.DbColumns[c].ValueBytes += valueBytesDiff
|
||||
}
|
||||
|
||||
func (is *InternalState) SetDBColumnStats(c int, rowsDiff int64, keysSumDiff int64, valuesSumDiff int64) {
|
||||
func (is *InternalState) SetDBColumnStats(c int, rows int64, keyBytes int64, valueBytes int64) {
|
||||
is.mux.Lock()
|
||||
defer is.mux.Unlock()
|
||||
is.DbColumns[c].Rows = rowsDiff
|
||||
is.DbColumns[c].KeysSum = keysSumDiff
|
||||
is.DbColumns[c].ValuesSum = valuesSumDiff
|
||||
is.DbColumns[c].Rows = rows
|
||||
is.DbColumns[c].KeyBytes = keyBytes
|
||||
is.DbColumns[c].ValueBytes = valueBytes
|
||||
}
|
||||
|
||||
func (is *InternalState) GetDBColumnStats(c int) (int64, int64, int64) {
|
||||
is.mux.Lock()
|
||||
defer is.mux.Unlock()
|
||||
if c < len(is.DbColumns) {
|
||||
return is.DbColumns[c].Rows, is.DbColumns[c].KeyBytes, is.DbColumns[c].ValueBytes
|
||||
}
|
||||
return 0, 0, 0
|
||||
}
|
||||
|
||||
func (is *InternalState) DBSizeTotal() int64 {
|
||||
|
@ -118,7 +127,7 @@ func (is *InternalState) DBSizeTotal() int64 {
|
|||
defer is.mux.Unlock()
|
||||
total := int64(0)
|
||||
for _, c := range is.DbColumns {
|
||||
total += c.KeysSum + c.ValuesSum
|
||||
total += c.KeyBytes + c.ValueBytes
|
||||
}
|
||||
return total
|
||||
}
|
||||
|
|
|
@ -19,6 +19,8 @@ type Metrics struct {
|
|||
IndexDBSize prometheus.Gauge
|
||||
ExplorerViews *prometheus.CounterVec
|
||||
MempoolSize prometheus.Gauge
|
||||
DbColumnRows *prometheus.GaugeVec
|
||||
DbColumnSize *prometheus.GaugeVec
|
||||
}
|
||||
|
||||
type Labels = prometheus.Labels
|
||||
|
@ -121,6 +123,22 @@ func GetMetrics(coin string) (*Metrics, error) {
|
|||
ConstLabels: Labels{"coin": coin},
|
||||
},
|
||||
)
|
||||
metrics.DbColumnRows = prometheus.NewGaugeVec(
|
||||
prometheus.GaugeOpts{
|
||||
Name: "blockbook_dbcolumn_rows",
|
||||
Help: "Number of rows in db column",
|
||||
ConstLabels: Labels{"coin": coin},
|
||||
},
|
||||
[]string{"column"},
|
||||
)
|
||||
metrics.DbColumnSize = prometheus.NewGaugeVec(
|
||||
prometheus.GaugeOpts{
|
||||
Name: "blockbook_dbcolumn_size",
|
||||
Help: "Size of db column (in bytes)",
|
||||
ConstLabels: Labels{"coin": coin},
|
||||
},
|
||||
[]string{"column"},
|
||||
)
|
||||
|
||||
v := reflect.ValueOf(metrics)
|
||||
for i := 0; i < v.NumField(); i++ {
|
||||
|
|
|
@ -37,6 +37,7 @@ type RocksDB struct {
|
|||
cfh []*gorocksdb.ColumnFamilyHandle
|
||||
chainParser bchain.BlockChainParser
|
||||
is *common.InternalState
|
||||
metrics *common.Metrics
|
||||
}
|
||||
|
||||
const (
|
||||
|
@ -97,13 +98,13 @@ func openDB(path string) (*gorocksdb.DB, []*gorocksdb.ColumnFamilyHandle, error)
|
|||
|
||||
// NewRocksDB opens an internal handle to RocksDB environment. Close
|
||||
// needs to be called to release it.
|
||||
func NewRocksDB(path string, parser bchain.BlockChainParser) (d *RocksDB, err error) {
|
||||
func NewRocksDB(path string, parser bchain.BlockChainParser, metrics *common.Metrics) (d *RocksDB, err error) {
|
||||
glog.Infof("rocksdb: open %s", path)
|
||||
db, cfh, err := openDB(path)
|
||||
wo := gorocksdb.NewDefaultWriteOptions()
|
||||
ro := gorocksdb.NewDefaultReadOptions()
|
||||
ro.SetFillCache(false)
|
||||
return &RocksDB{path, db, wo, ro, cfh, parser, nil}, nil
|
||||
return &RocksDB{path, db, wo, ro, cfh, parser, nil, metrics}, nil
|
||||
}
|
||||
|
||||
func (d *RocksDB) closeDB() error {
|
||||
|
@ -930,8 +931,8 @@ func (d *RocksDB) LoadInternalState(rpcCoin string) (*common.InternalState, erro
|
|||
if sc[j].Name == nc[i].Name {
|
||||
nc[i].Version = sc[j].Version
|
||||
nc[i].Rows = sc[j].Rows
|
||||
nc[i].KeysSum = sc[j].KeysSum
|
||||
nc[i].ValuesSum = sc[j].ValuesSum
|
||||
nc[i].KeyBytes = sc[j].KeyBytes
|
||||
nc[i].ValueBytes = sc[j].ValueBytes
|
||||
break
|
||||
}
|
||||
}
|
||||
|
@ -947,6 +948,9 @@ func (d *RocksDB) SetInternalState(is *common.InternalState) {
|
|||
|
||||
// StoreInternalState stores the internal state to db
|
||||
func (d *RocksDB) StoreInternalState(is *common.InternalState) error {
|
||||
rows, keyBytes, valueBytes := d.is.GetDBColumnStats(cfTransactions)
|
||||
d.metrics.DbColumnRows.With(common.Labels{"column": cfNames[cfTransactions]}).Set(float64(rows))
|
||||
d.metrics.DbColumnSize.With(common.Labels{"column": cfNames[cfTransactions]}).Set(float64(keyBytes + valueBytes))
|
||||
buf, err := is.Pack()
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
@ -25,7 +25,7 @@ func setupRocksDB(t *testing.T, p bchain.BlockChainParser) *RocksDB {
|
|||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
d, err := NewRocksDB(tmp, p)
|
||||
d, err := NewRocksDB(tmp, p, nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue