From 1b9c2ad4199deab6d503c9862e9a7e698e023346 Mon Sep 17 00:00:00 2001 From: Ferran Borreguero Date: Wed, 22 Dec 2021 12:03:22 +0100 Subject: [PATCH] Clean ethstats syncer --- command/chain_watch.go | 26 ++++++++++----------- ethstats/ethstats.go | 51 +++++++++++++++++++++++------------------- 2 files changed, 41 insertions(+), 36 deletions(-) diff --git a/command/chain_watch.go b/command/chain_watch.go index 8e40631ccd..53b76eb86a 100644 --- a/command/chain_watch.go +++ b/command/chain_watch.go @@ -35,18 +35,6 @@ func (c *ChainWatchCommand) Synopsis() string { 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 func (c *ChainWatchCommand) Run(args []string) int { flags := c.Flags() @@ -82,8 +70,20 @@ func (c *ChainWatchCommand) Run(args []string) int { c.UI.Output(err.Error()) break } - c.UI.Output(printEvent(msg)) + c.UI.Output(formatHeadEvent(msg)) } 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 +} diff --git a/ethstats/ethstats.go b/ethstats/ethstats.go index 2746f5ad94..c1a5e9cac0 100644 --- a/ethstats/ethstats.go +++ b/ethstats/ethstats.go @@ -230,7 +230,7 @@ func (s *Service) loop(chainHeadCh chan core.ChainHeadEvent, chain2HeadCh chan c quitCh = make(chan struct{}) headCh = make(chan *types.Block, 1) txCh = make(chan struct{}, 1) - head2Ch = make(chan core.Chain2HeadEvent, 1) + head2Ch = make(chan core.Chain2HeadEvent, 100) ) go func() { var lastTx mclock.AbsTime @@ -777,40 +777,45 @@ func (s *Service) reportPending(conn *connWrapper) error { return conn.WriteJSON(report) } -type Chain2HeadStats struct { - NewChain []*blockStats - OldChain []*blockStats - Type string +type blockStub struct { + Hash string `json:"hash"` + Number uint64 `json:"number"` + 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. func (s *Service) reportChain2Head(conn *connWrapper, chain2HeadData *core.Chain2HeadEvent) error { - - var chain2headStats Chain2HeadStats - - // assemble new chain + chainHeadEvent := ChainHeadEvent{ + Type: chain2HeadData.Type, + } 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 { - 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{}{ - "id": s.node, - "reorg root block number": chain2headStats.NewChain[0].Number, - "reorg root block hash": chain2headStats.NewChain[0].Hash, - "details": chain2headStats, + "id": s.node, + "event": chainHeadEvent, } report := map[string][]interface{}{ - "emit": {"Chain2Head", stats}, + "emit": {"headEvent", stats}, } return conn.WriteJSON(report) }