Merge pull request #13856 from karalabe/ethstats-sanity-checks

ethstats: sanity check ethstats history queries
This commit is contained in:
Péter Szilágyi 2017-04-04 13:03:34 +03:00 committed by GitHub
commit e50a5b7771

View File

@ -537,15 +537,29 @@ func (s *Service) reportHistory(conn *websocket.Conn, list []uint64) error {
// Gather the batch of blocks to report
history := make([]*blockStats, len(indexes))
for i, number := range indexes {
// Retrieve the next block if it's known to us
var block *types.Block
if s.eth != nil {
history[len(history)-1-i] = s.assembleBlockStats(s.eth.BlockChain().GetBlockByNumber(number))
block = s.eth.BlockChain().GetBlockByNumber(number)
} else {
history[len(history)-1-i] = s.assembleBlockStats(types.NewBlockWithHeader(s.les.BlockChain().GetHeaderByNumber(number)))
if header := s.les.BlockChain().GetHeaderByNumber(number); header != nil {
block = types.NewBlockWithHeader(header)
}
}
// If we do have the block, add to the history and continue
if block != nil {
history[len(history)-1-i] = s.assembleBlockStats(block)
continue
}
// Ran out of blocks, cut the report short and send
history = history[len(history)-i:]
}
// Assemble the history report and send it to the server
if len(history) > 0 {
log.Trace("Sending historical blocks to ethstats", "first", history[0].Number, "last", history[len(history)-1].Number)
} else {
log.Trace("No history to send to stats server")
}
stats := map[string]interface{}{
"id": s.node,
"history": history,