mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-15 16:33:47 +00:00
Clean ethstats syncer
This commit is contained in:
parent
3a6744785b
commit
1b9c2ad419
2 changed files with 41 additions and 36 deletions
|
|
@ -35,18 +35,6 @@ func (c *ChainWatchCommand) Synopsis() string {
|
||||||
return "Watch the chainHead, reorg and fork events in real-time"
|
return "Watch the chainHead, reorg and fork events in real-time"
|
||||||
}
|
}
|
||||||
|
|
||||||
func printEvent(msg *proto.ChainWatchResponse) string {
|
|
||||||
var out string
|
|
||||||
if msg.Type == core.Chain2HeadCanonicalEvent {
|
|
||||||
out = fmt.Sprintf("Block Added : %v", msg.Newchain)
|
|
||||||
} else if msg.Type == core.Chain2HeadForkEvent {
|
|
||||||
out = fmt.Sprintf("New Fork Block : %v", msg.Newchain)
|
|
||||||
} else if msg.Type == core.Chain2HeadReorgEvent {
|
|
||||||
out = fmt.Sprintf("Reorg Detected \nAdded : %v \nRemoved : %v", msg.Newchain, msg.Oldchain)
|
|
||||||
}
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// Run implements the cli.Command interface
|
// Run implements the cli.Command interface
|
||||||
func (c *ChainWatchCommand) Run(args []string) int {
|
func (c *ChainWatchCommand) Run(args []string) int {
|
||||||
flags := c.Flags()
|
flags := c.Flags()
|
||||||
|
|
@ -82,8 +70,20 @@ func (c *ChainWatchCommand) Run(args []string) int {
|
||||||
c.UI.Output(err.Error())
|
c.UI.Output(err.Error())
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
c.UI.Output(printEvent(msg))
|
c.UI.Output(formatHeadEvent(msg))
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func formatHeadEvent(msg *proto.ChainWatchResponse) string {
|
||||||
|
var out string
|
||||||
|
if msg.Type == core.Chain2HeadCanonicalEvent {
|
||||||
|
out = fmt.Sprintf("Block Added : %v", msg.Newchain)
|
||||||
|
} else if msg.Type == core.Chain2HeadForkEvent {
|
||||||
|
out = fmt.Sprintf("New Fork Block : %v", msg.Newchain)
|
||||||
|
} else if msg.Type == core.Chain2HeadReorgEvent {
|
||||||
|
out = fmt.Sprintf("Reorg Detected \nAdded : %v \nRemoved : %v", msg.Newchain, msg.Oldchain)
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -230,7 +230,7 @@ func (s *Service) loop(chainHeadCh chan core.ChainHeadEvent, chain2HeadCh chan c
|
||||||
quitCh = make(chan struct{})
|
quitCh = make(chan struct{})
|
||||||
headCh = make(chan *types.Block, 1)
|
headCh = make(chan *types.Block, 1)
|
||||||
txCh = make(chan struct{}, 1)
|
txCh = make(chan struct{}, 1)
|
||||||
head2Ch = make(chan core.Chain2HeadEvent, 1)
|
head2Ch = make(chan core.Chain2HeadEvent, 100)
|
||||||
)
|
)
|
||||||
go func() {
|
go func() {
|
||||||
var lastTx mclock.AbsTime
|
var lastTx mclock.AbsTime
|
||||||
|
|
@ -777,40 +777,45 @@ func (s *Service) reportPending(conn *connWrapper) error {
|
||||||
return conn.WriteJSON(report)
|
return conn.WriteJSON(report)
|
||||||
}
|
}
|
||||||
|
|
||||||
type Chain2HeadStats struct {
|
type blockStub struct {
|
||||||
NewChain []*blockStats
|
Hash string `json:"hash"`
|
||||||
OldChain []*blockStats
|
Number uint64 `json:"number"`
|
||||||
Type string
|
ParentHash string `json:"parent_hash"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func createStub(b *types.Block) *blockStub {
|
||||||
|
s := &blockStub{
|
||||||
|
Hash: b.Hash().String(),
|
||||||
|
ParentHash: b.ParentHash().String(),
|
||||||
|
Number: b.NumberU64(),
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
type ChainHeadEvent struct {
|
||||||
|
NewChain []*blockStub `json:"added"`
|
||||||
|
OldChain []*blockStub `json:"removed"`
|
||||||
|
Type string `json:"type"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// reportChain2Head checks for reorg and sends current head to stats server.
|
// reportChain2Head checks for reorg and sends current head to stats server.
|
||||||
func (s *Service) reportChain2Head(conn *connWrapper, chain2HeadData *core.Chain2HeadEvent) error {
|
func (s *Service) reportChain2Head(conn *connWrapper, chain2HeadData *core.Chain2HeadEvent) error {
|
||||||
|
chainHeadEvent := ChainHeadEvent{
|
||||||
var chain2headStats Chain2HeadStats
|
Type: chain2HeadData.Type,
|
||||||
|
}
|
||||||
// assemble new chain
|
|
||||||
for _, block := range chain2HeadData.NewChain {
|
for _, block := range chain2HeadData.NewChain {
|
||||||
chain2headStats.NewChain = append(chain2headStats.NewChain, s.assembleBlockStats(block))
|
chainHeadEvent.NewChain = append(chainHeadEvent.NewChain, createStub(block))
|
||||||
}
|
}
|
||||||
|
|
||||||
// assemble old chain
|
|
||||||
for _, block := range chain2HeadData.OldChain {
|
for _, block := range chain2HeadData.OldChain {
|
||||||
chain2headStats.OldChain = append(chain2headStats.OldChain, s.assembleBlockStats(block))
|
chainHeadEvent.OldChain = append(chainHeadEvent.OldChain, createStub(block))
|
||||||
}
|
}
|
||||||
|
|
||||||
chain2headStats.Type = chain2HeadData.Type
|
|
||||||
|
|
||||||
// Assemble the block report and send it to the server
|
|
||||||
log.Trace("Reorg Detected", "reorg root block number", chain2headStats.NewChain[0].Number, "block hash", chain2headStats.NewChain[0].Hash)
|
|
||||||
|
|
||||||
stats := map[string]interface{}{
|
stats := map[string]interface{}{
|
||||||
"id": s.node,
|
"id": s.node,
|
||||||
"reorg root block number": chain2headStats.NewChain[0].Number,
|
"event": chainHeadEvent,
|
||||||
"reorg root block hash": chain2headStats.NewChain[0].Hash,
|
|
||||||
"details": chain2headStats,
|
|
||||||
}
|
}
|
||||||
report := map[string][]interface{}{
|
report := map[string][]interface{}{
|
||||||
"emit": {"Chain2Head", stats},
|
"emit": {"headEvent", stats},
|
||||||
}
|
}
|
||||||
return conn.WriteJSON(report)
|
return conn.WriteJSON(report)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue