Преглед на файлове

eth: add chaindbProperty to debug API

Felix Lange преди 9 години
родител
ревизия
bcd8aeefdd
променени са 2 файла, в които са добавени 24 реда и са изтрити 0 реда
  1. 18 0
      eth/api.go
  2. 6 0
      rpc/javascript.go

+ 18 - 0
eth/api.go

@@ -26,6 +26,7 @@ import (
 	"math/big"
 	"os"
 	"runtime"
+	"strings"
 	"sync"
 	"time"
 
@@ -46,6 +47,7 @@ import (
 	"github.com/ethereum/go-ethereum/p2p"
 	"github.com/ethereum/go-ethereum/rlp"
 	"github.com/ethereum/go-ethereum/rpc"
+	"github.com/syndtr/goleveldb/leveldb"
 	"golang.org/x/net/context"
 )
 
@@ -1566,6 +1568,22 @@ func NewPrivateDebugAPI(config *core.ChainConfig, eth *Ethereum) *PrivateDebugAP
 	return &PrivateDebugAPI{config: config, eth: eth}
 }
 
+// ChaindbProperty returns leveldb properties of the chain database.
+func (api *PrivateDebugAPI) ChaindbProperty(property string) (string, error) {
+	ldb, ok := api.eth.chainDb.(interface {
+		LDB() *leveldb.DB
+	})
+	if !ok {
+		return "", fmt.Errorf("chaindbProperty does not work for memory databases")
+	}
+	if property == "" {
+		property = "leveldb.stats"
+	} else if !strings.HasPrefix(property, "leveldb.") {
+		property = "leveldb." + property
+	}
+	return ldb.LDB().GetProperty(property)
+}
+
 // BlockTraceResults is the returned value when replaying a block to check for
 // consensus results and full VM trace logs for all included transactions.
 type BlockTraceResult struct {

+ 6 - 0
rpc/javascript.go

@@ -295,6 +295,12 @@ web3._extend({
 			call: 'debug_dumpBlock',
 			params: 1
 		}),
+		new web3._extend.Method({
+			name: 'chaindbProperty',
+			call: 'debug_chaindbProperty',
+			params: 1,
+			outputFormatter: console.log
+		}),
 		new web3._extend.Method({
 			name: 'metrics',
 			call: 'debug_metrics',