Skip to content

Commit

Permalink
Clean ethstats syncer
Browse files Browse the repository at this point in the history
  • Loading branch information
ferranbt committed Dec 22, 2021
1 parent 3a67447 commit 1b9c2ad
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 36 deletions.
26 changes: 13 additions & 13 deletions command/chain_watch.go
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -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
}
51 changes: 28 additions & 23 deletions ethstats/ethstats.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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"`
}

// reportChain2Head checks for reorg and sends current head to stats server.
func (s *Service) reportChain2Head(conn *connWrapper, chain2HeadData *core.Chain2HeadEvent) error {
func createStub(b *types.Block) *blockStub {
s := &blockStub{
Hash: b.Hash().String(),
ParentHash: b.ParentHash().String(),
Number: b.NumberU64(),
}
return s
}

var chain2headStats Chain2HeadStats
type ChainHeadEvent struct {
NewChain []*blockStub `json:"added"`
OldChain []*blockStub `json:"removed"`
Type string `json:"type"`
}

// assemble new chain
// reportChain2Head checks for reorg and sends current head to stats server.
func (s *Service) reportChain2Head(conn *connWrapper, chain2HeadData *core.Chain2HeadEvent) error {
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)
}
Expand Down

0 comments on commit 1b9c2ad

Please sign in to comment.