4ea9b62b5c
This adds all dashboard changes from the last couple months. We're about to remove the dashboard, but decided that we should get all the recent work in first in case anyone wants to pick up this project later on. * cmd, dashboard, eth, p2p: send peer info to the dashboard * dashboard: update npm packages, improve UI, rebase * dashboard, p2p: remove println, change doc * cmd, dashboard, eth, p2p: cleanup after review * dashboard: send current block to the dashboard client
78 lines
1.7 KiB
Go
78 lines
1.7 KiB
Go
package dashboard
|
|
|
|
import (
|
|
"github.com/ethereum/go-ethereum/core"
|
|
"github.com/ethereum/go-ethereum/event"
|
|
"github.com/ethereum/go-ethereum/log"
|
|
)
|
|
|
|
type block struct {
|
|
Number int64 `json:"number,omitempty"`
|
|
Time uint64 `json:"timestamp,omitempty"`
|
|
}
|
|
|
|
func (db *Dashboard) collectChainData() {
|
|
defer db.wg.Done()
|
|
|
|
var (
|
|
currentBlock *block
|
|
chainCh chan core.ChainHeadEvent
|
|
chainSub event.Subscription
|
|
)
|
|
switch {
|
|
case db.ethServ != nil:
|
|
chain := db.ethServ.BlockChain()
|
|
currentBlock = &block{
|
|
Number: chain.CurrentHeader().Number.Int64(),
|
|
Time: chain.CurrentHeader().Time,
|
|
}
|
|
chainCh = make(chan core.ChainHeadEvent)
|
|
chainSub = chain.SubscribeChainHeadEvent(chainCh)
|
|
case db.lesServ != nil:
|
|
chain := db.lesServ.BlockChain()
|
|
currentBlock = &block{
|
|
Number: chain.CurrentHeader().Number.Int64(),
|
|
Time: chain.CurrentHeader().Time,
|
|
}
|
|
chainCh = make(chan core.ChainHeadEvent)
|
|
chainSub = chain.SubscribeChainHeadEvent(chainCh)
|
|
default:
|
|
errc := <-db.quit
|
|
errc <- nil
|
|
return
|
|
}
|
|
defer chainSub.Unsubscribe()
|
|
|
|
db.chainLock.Lock()
|
|
db.history.Chain = &ChainMessage{
|
|
CurrentBlock: currentBlock,
|
|
}
|
|
db.chainLock.Unlock()
|
|
db.sendToAll(&Message{Chain: &ChainMessage{CurrentBlock: currentBlock}})
|
|
|
|
for {
|
|
select {
|
|
case e := <-chainCh:
|
|
currentBlock := &block{
|
|
Number: e.Block.Number().Int64(),
|
|
Time: e.Block.Time(),
|
|
}
|
|
db.chainLock.Lock()
|
|
db.history.Chain = &ChainMessage{
|
|
CurrentBlock: currentBlock,
|
|
}
|
|
db.chainLock.Unlock()
|
|
|
|
db.sendToAll(&Message{Chain: &ChainMessage{CurrentBlock: currentBlock}})
|
|
case err := <-chainSub.Err():
|
|
log.Warn("Chain subscription error", "err", err)
|
|
errc := <-db.quit
|
|
errc <- nil
|
|
return
|
|
case errc := <-db.quit:
|
|
errc <- nil
|
|
return
|
|
}
|
|
}
|
|
}
|