code: func (st *insertStats) report(chain []*types.Block, index int, dirty common.StorageSize) {
  	// Fetch the timings for the batch
  	var (
  		now     = mclock.Now()
  		elapsed = time.Duration(now) - time.Duration(st.startTime)
  	)
  	// If we're at the last block of the batch or report period reached, log
  	if index == len(chain)-1 || elapsed >= statsReportLimit {
  		// Count the number of transactions in this segment
  		var txs int
  		for _, block := range chain[st.lastIndex : index+1] {
  			txs += len(block.Transactions())
  		}
  		end := chain[index]
  
  		// Assemble the log context and send it to the logger
  		context := []interface{}{
  			"blocks", st.processed, "txs", txs, "mgas", float64(st.usedGas) / 1000000,
  			"elapsed", common.PrettyDuration(elapsed), "mgasps", float64(st.usedGas) * 1000 / float64(elapsed),
  			"number", end.Number(), "hash", end.Hash(),
  		}
  		if timestamp := time.Unix(int64(end.Time()), 0); time.Since(timestamp) > time.Minute {
  			context = append(context, []interface{}{"age", common.PrettyAge(timestamp)}...)
  		}
  		context = append(context, []interface{}{"dirty", dirty}...)
  
  		if st.queued > 0 {
  			context = append(context, []interface{}{"queued", st.queued}...)
  		}
  		if st.ignored > 0 {
  			context = append(context, []interface{}{"ignored", st.ignored}...)
  		}
  		log.Info("Imported new chain segment", context...)
  
  		// Bump the stats reported to the next section
  		*st = insertStats{startTime: now, lastIndex: index + 1}
  	}
  }
docs: // report prints statistics if some number of blocks have been processed
  // or more than a few seconds have passed since the last message.