aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2015-04-20 03:45:58 +0800
committerobscuren <geffobscura@gmail.com>2015-04-20 03:46:19 +0800
commit5dd56bb474e9001db6decb75b7abfca99050d844 (patch)
tree3a4e323d0941f4c2d4f7ae17f3d8385867a837ff
parent2c1a6a349b4f8bb23e37a75d8d8ceaa0fbfced8d (diff)
downloaddexon-5dd56bb474e9001db6decb75b7abfca99050d844.tar.gz
dexon-5dd56bb474e9001db6decb75b7abfca99050d844.tar.zst
dexon-5dd56bb474e9001db6decb75b7abfca99050d844.zip
geth: admin download status
-rw-r--r--cmd/geth/admin.go7
-rw-r--r--eth/downloader/downloader.go26
2 files changed, 22 insertions, 11 deletions
diff --git a/cmd/geth/admin.go b/cmd/geth/admin.go
index 2ac155e33..c42e91615 100644
--- a/cmd/geth/admin.go
+++ b/cmd/geth/admin.go
@@ -34,6 +34,7 @@ func (js *jsre) adminBindings() {
admin.Set("export", js.exportChain)
admin.Set("verbosity", js.verbosity)
admin.Set("backtrace", js.backtrace)
+ admin.Set("progress", js.downloadProgress)
admin.Set("miner", struct{}{})
t, _ = admin.Get("miner")
@@ -51,6 +52,12 @@ func (js *jsre) adminBindings() {
debug.Set("getBlockRlp", js.getBlockRlp)
}
+func (js *jsre) downloadProgress(call otto.FunctionCall) otto.Value {
+ current, max := js.ethereum.Downloader().Stats()
+
+ return js.re.ToVal(fmt.Sprintf("%d/%d", current, max))
+}
+
func (js *jsre) getBlockRlp(call otto.FunctionCall) otto.Value {
var block *types.Block
if len(call.ArgumentList) > 0 {
diff --git a/eth/downloader/downloader.go b/eth/downloader/downloader.go
index c4af5e17b..addcbcc44 100644
--- a/eth/downloader/downloader.go
+++ b/eth/downloader/downloader.go
@@ -41,6 +41,17 @@ type chainInsertFn func(types.Blocks) error
type hashIterFn func() (common.Hash, error)
type currentTdFn func() *big.Int
+type blockPack struct {
+ peerId string
+ blocks []*types.Block
+}
+
+type syncPack struct {
+ peer *peer
+ hash common.Hash
+ ignoreInitial bool
+}
+
type Downloader struct {
mu sync.RWMutex
queue *queue
@@ -65,17 +76,6 @@ type Downloader struct {
quit chan struct{}
}
-type blockPack struct {
- peerId string
- blocks []*types.Block
-}
-
-type syncPack struct {
- peer *peer
- hash common.Hash
- ignoreInitial bool
-}
-
func New(hasBlock hashCheckFn, insertChain chainInsertFn, currentTd currentTdFn) *Downloader {
downloader := &Downloader{
queue: newqueue(),
@@ -95,6 +95,10 @@ func New(hasBlock hashCheckFn, insertChain chainInsertFn, currentTd currentTdFn)
return downloader
}
+func (d *Downloader) Stats() (current int, max int) {
+ return d.queue.blockHashes.Size(), d.queue.fetchPool.Size() + d.queue.hashPool.Size()
+}
+
func (d *Downloader) RegisterPeer(id string, td *big.Int, hash common.Hash, getHashes hashFetcherFn, getBlocks blockFetcherFn) error {
d.mu.Lock()
defer d.mu.Unlock()