Merge pull request #17718 from karalabe/chain-age-logs
common, core, light: add block age into info logs
This commit is contained in:
		@@ -38,3 +38,45 @@ func (d PrettyDuration) String() string {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	return label
 | 
						return label
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// PrettyAge is a pretty printed version of a time.Duration value that rounds
 | 
				
			||||||
 | 
					// the values up to a single most significant unit, days/weeks/years included.
 | 
				
			||||||
 | 
					type PrettyAge time.Time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ageUnits is a list of units the age pretty printing uses.
 | 
				
			||||||
 | 
					var ageUnits = []struct {
 | 
				
			||||||
 | 
						Size   time.Duration
 | 
				
			||||||
 | 
						Symbol string
 | 
				
			||||||
 | 
					}{
 | 
				
			||||||
 | 
						{12 * 30 * 24 * time.Hour, "y"},
 | 
				
			||||||
 | 
						{30 * 24 * time.Hour, "mo"},
 | 
				
			||||||
 | 
						{7 * 24 * time.Hour, "w"},
 | 
				
			||||||
 | 
						{24 * time.Hour, "d"},
 | 
				
			||||||
 | 
						{time.Hour, "h"},
 | 
				
			||||||
 | 
						{time.Minute, "m"},
 | 
				
			||||||
 | 
						{time.Second, "s"},
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// String implements the Stringer interface, allowing pretty printing of duration
 | 
				
			||||||
 | 
					// values rounded to the most significant time unit.
 | 
				
			||||||
 | 
					func (t PrettyAge) String() string {
 | 
				
			||||||
 | 
						// Calculate the time difference and handle the 0 cornercase
 | 
				
			||||||
 | 
						diff := time.Since(time.Time(t))
 | 
				
			||||||
 | 
						if diff < time.Second {
 | 
				
			||||||
 | 
							return "0"
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// Accumulate a precision of 3 components before returning
 | 
				
			||||||
 | 
						result, prec := "", 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for _, unit := range ageUnits {
 | 
				
			||||||
 | 
							if diff > unit.Size {
 | 
				
			||||||
 | 
								result = fmt.Sprintf("%s%d%s", result, diff/unit.Size, unit.Symbol)
 | 
				
			||||||
 | 
								diff %= unit.Size
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if prec += 1; prec >= 3 {
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return result
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -251,9 +251,9 @@ func (bc *BlockChain) loadLastState() error {
 | 
				
			|||||||
	blockTd := bc.GetTd(currentBlock.Hash(), currentBlock.NumberU64())
 | 
						blockTd := bc.GetTd(currentBlock.Hash(), currentBlock.NumberU64())
 | 
				
			||||||
	fastTd := bc.GetTd(currentFastBlock.Hash(), currentFastBlock.NumberU64())
 | 
						fastTd := bc.GetTd(currentFastBlock.Hash(), currentFastBlock.NumberU64())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	log.Info("Loaded most recent local header", "number", currentHeader.Number, "hash", currentHeader.Hash(), "td", headerTd)
 | 
						log.Info("Loaded most recent local header", "number", currentHeader.Number, "hash", currentHeader.Hash(), "td", headerTd, "age", common.PrettyAge(time.Unix(currentHeader.Time.Int64(), 0)))
 | 
				
			||||||
	log.Info("Loaded most recent local full block", "number", currentBlock.Number(), "hash", currentBlock.Hash(), "td", blockTd)
 | 
						log.Info("Loaded most recent local full block", "number", currentBlock.Number(), "hash", currentBlock.Hash(), "td", blockTd, "age", common.PrettyAge(time.Unix(currentBlock.Time().Int64(), 0)))
 | 
				
			||||||
	log.Info("Loaded most recent local fast block", "number", currentFastBlock.Number(), "hash", currentFastBlock.Hash(), "td", fastTd)
 | 
						log.Info("Loaded most recent local fast block", "number", currentFastBlock.Number(), "hash", currentFastBlock.Hash(), "td", fastTd, "age", common.PrettyAge(time.Unix(currentFastBlock.Time().Int64(), 0)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -850,13 +850,16 @@ func (bc *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain [
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	bc.mu.Unlock()
 | 
						bc.mu.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	log.Info("Imported new block receipts",
 | 
						context := []interface{}{
 | 
				
			||||||
		"count", stats.processed,
 | 
							"count", stats.processed, "elapsed", common.PrettyDuration(time.Since(start)),
 | 
				
			||||||
		"elapsed", common.PrettyDuration(time.Since(start)),
 | 
							"number", head.Number(), "hash", head.Hash(), "age", common.PrettyAge(time.Unix(head.Time().Int64(), 0)),
 | 
				
			||||||
		"number", head.Number(),
 | 
					 | 
				
			||||||
		"hash", head.Hash(),
 | 
					 | 
				
			||||||
		"size", common.StorageSize(bytes),
 | 
							"size", common.StorageSize(bytes),
 | 
				
			||||||
		"ignored", stats.ignored)
 | 
						}
 | 
				
			||||||
 | 
						if stats.ignored > 0 {
 | 
				
			||||||
 | 
							context = append(context, []interface{}{"ignored", stats.ignored}...)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						log.Info("Imported new block receipts", context...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0, nil
 | 
						return 0, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1229,8 +1232,13 @@ func (st *insertStats) report(chain []*types.Block, index int, cache common.Stor
 | 
				
			|||||||
		context := []interface{}{
 | 
							context := []interface{}{
 | 
				
			||||||
			"blocks", st.processed, "txs", txs, "mgas", float64(st.usedGas) / 1000000,
 | 
								"blocks", st.processed, "txs", txs, "mgas", float64(st.usedGas) / 1000000,
 | 
				
			||||||
			"elapsed", common.PrettyDuration(elapsed), "mgasps", float64(st.usedGas) * 1000 / float64(elapsed),
 | 
								"elapsed", common.PrettyDuration(elapsed), "mgasps", float64(st.usedGas) * 1000 / float64(elapsed),
 | 
				
			||||||
			"number", end.Number(), "hash", end.Hash(), "cache", cache,
 | 
								"number", end.Number(), "hash", end.Hash(),
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							if timestamp := time.Unix(end.Time().Int64(), 0); time.Since(timestamp) > time.Minute {
 | 
				
			||||||
 | 
								context = append(context, []interface{}{"age", common.PrettyAge(timestamp)}...)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							context = append(context, []interface{}{"cache", cache}...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if st.queued > 0 {
 | 
							if st.queued > 0 {
 | 
				
			||||||
			context = append(context, []interface{}{"queued", st.queued}...)
 | 
								context = append(context, []interface{}{"queued", st.queued}...)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -281,8 +281,18 @@ func (hc *HeaderChain) InsertHeaderChain(chain []*types.Header, writeHeader WhCa
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	// Report some public statistics so the user has a clue what's going on
 | 
						// Report some public statistics so the user has a clue what's going on
 | 
				
			||||||
	last := chain[len(chain)-1]
 | 
						last := chain[len(chain)-1]
 | 
				
			||||||
	log.Info("Imported new block headers", "count", stats.processed, "elapsed", common.PrettyDuration(time.Since(start)),
 | 
					
 | 
				
			||||||
		"number", last.Number, "hash", last.Hash(), "ignored", stats.ignored)
 | 
						context := []interface{}{
 | 
				
			||||||
 | 
							"count", stats.processed, "elapsed", common.PrettyDuration(time.Since(start)),
 | 
				
			||||||
 | 
							"number", last.Number, "hash", last.Hash(),
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if timestamp := time.Unix(last.Time.Int64(), 0); time.Since(timestamp) > time.Minute {
 | 
				
			||||||
 | 
							context = append(context, []interface{}{"age", common.PrettyAge(timestamp)}...)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if stats.ignored > 0 {
 | 
				
			||||||
 | 
							context = append(context, []interface{}{"ignored", stats.ignored}...)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						log.Info("Imported new block headers", context...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0, nil
 | 
						return 0, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -157,7 +157,7 @@ func (self *LightChain) loadLastState() error {
 | 
				
			|||||||
	// Issue a status log and return
 | 
						// Issue a status log and return
 | 
				
			||||||
	header := self.hc.CurrentHeader()
 | 
						header := self.hc.CurrentHeader()
 | 
				
			||||||
	headerTd := self.GetTd(header.Hash(), header.Number.Uint64())
 | 
						headerTd := self.GetTd(header.Hash(), header.Number.Uint64())
 | 
				
			||||||
	log.Info("Loaded most recent local header", "number", header.Number, "hash", header.Hash(), "td", headerTd)
 | 
						log.Info("Loaded most recent local header", "number", header.Number, "hash", header.Hash(), "td", headerTd, "age", common.PrettyAge(time.Unix(header.Time.Int64(), 0)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -488,7 +488,7 @@ func (self *LightChain) SyncCht(ctx context.Context) bool {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		// Ensure the chain didn't move past the latest block while retrieving it
 | 
							// Ensure the chain didn't move past the latest block while retrieving it
 | 
				
			||||||
		if self.hc.CurrentHeader().Number.Uint64() < header.Number.Uint64() {
 | 
							if self.hc.CurrentHeader().Number.Uint64() < header.Number.Uint64() {
 | 
				
			||||||
			log.Info("Updated latest header based on CHT", "number", header.Number, "hash", header.Hash())
 | 
								log.Info("Updated latest header based on CHT", "number", header.Number, "hash", header.Hash(), "age", common.PrettyAge(time.Unix(header.Time.Int64(), 0)))
 | 
				
			||||||
			self.hc.SetCurrentHeader(header)
 | 
								self.hc.SetCurrentHeader(header)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return true
 | 
							return true
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user