Change stats reporting to account for state block

pull/69/head
Rongjian Lan 6 years ago
parent ea6b76e1b3
commit 17fe3fd35a
  1. 66
      consensus/consensus_leader.go
  2. 43
      node/node_handler.go

@ -404,39 +404,41 @@ func (consensus *Consensus) verifyResponse(commitments *map[uint16]kyber.Point,
} }
func (consensus *Consensus) reportMetrics(block blockchain.Block) { func (consensus *Consensus) reportMetrics(block blockchain.Block) {
endTime := time.Now() if !block.IsStateBlock() { // Skip state block stats
timeElapsed := endTime.Sub(startTime) endTime := time.Now()
numOfTxs := block.NumTransactions timeElapsed := endTime.Sub(startTime)
tps := float64(numOfTxs) / timeElapsed.Seconds() numOfTxs := block.NumTransactions
consensus.Log.Info("TPS Report", tps := float64(numOfTxs) / timeElapsed.Seconds()
"numOfTXs", numOfTxs, consensus.Log.Info("TPS Report",
"startTime", startTime, "numOfTXs", numOfTxs,
"endTime", endTime, "startTime", startTime,
"timeElapsed", timeElapsed, "endTime", endTime,
"TPS", tps, "timeElapsed", timeElapsed,
"consensus", consensus) "TPS", tps,
"consensus", consensus)
// Post metrics
URL := "http://localhost:3000/report" // Post metrics
txHashes := []string{} URL := "http://localhost:3000/report"
for i := 1; i <= 3; i++ { txHashes := []string{}
if len(block.TransactionIds)-i >= 0 { for i := 1; i <= 3; i++ {
txHashes = append(txHashes, hex.EncodeToString(block.TransactionIds[len(block.TransactionIds)-i][:])) if len(block.TransactionIds)-i >= 0 {
txHashes = append(txHashes, hex.EncodeToString(block.TransactionIds[len(block.TransactionIds)-i][:]))
}
}
form := url.Values{
"key": {consensus.pubKey.String()},
"tps": {strconv.FormatFloat(tps, 'f', 2, 64)},
"txCount": {strconv.Itoa(int(numOfTxs))},
"nodeCount": {strconv.Itoa(len(consensus.validators) + 1)},
"latestBlockHash": {hex.EncodeToString(consensus.blockHash[:])},
"latestTxHashes": txHashes,
"blockLatency": {strconv.Itoa(int(timeElapsed / time.Millisecond))},
} }
}
form := url.Values{
"key": {consensus.pubKey.String()},
"tps": {strconv.FormatFloat(tps, 'f', 2, 64)},
"txCount": {strconv.Itoa(int(numOfTxs))},
"nodeCount": {strconv.Itoa(len(consensus.validators) + 1)},
"latestBlockHash": {hex.EncodeToString(consensus.blockHash[:])},
"latestTxHashes": txHashes,
"blockLatency": {strconv.Itoa(int(timeElapsed / time.Millisecond))},
}
body := bytes.NewBufferString(form.Encode()) body := bytes.NewBufferString(form.Encode())
rsp, err := http.Post(URL, "application/x-www-form-urlencoded", body) rsp, err := http.Post(URL, "application/x-www-form-urlencoded", body)
if err == nil { if err == nil {
defer rsp.Body.Close() defer rsp.Body.Close()
}
} }
} }

@ -21,7 +21,7 @@ const (
// The max number of transaction per a block. // The max number of transaction per a block.
MaxNumberOfTransactionsPerBlock = 3000 MaxNumberOfTransactionsPerBlock = 3000
// The number of blocks allowed before generating state block // The number of blocks allowed before generating state block
NumBlocksBeforeStateBlock = 10 NumBlocksBeforeStateBlock = 100
) )
// NodeHandler handles a new incoming connection. // NodeHandler handles a new incoming connection.
@ -105,25 +105,38 @@ func (node *Node) NodeHandler(conn net.Conn) {
avgBlockSizeInBytes := 0 avgBlockSizeInBytes := 0
txCount := 0 txCount := 0
blockCount := 0
totalTxCount := 0
totalBlockCount := 0
avgTxSize := 0 avgTxSize := 0
for _, block := range node.blockchain.Blocks { for _, block := range node.blockchain.Blocks {
byteBuffer := bytes.NewBuffer([]byte{}) if block.IsStateBlock() {
encoder := gob.NewEncoder(byteBuffer) totalTxCount += int(block.State.NumTransactions)
encoder.Encode(block) totalBlockCount += int(block.State.NumBlocks)
avgBlockSizeInBytes += len(byteBuffer.Bytes()) } else {
byteBuffer := bytes.NewBuffer([]byte{})
txCount += len(block.Transactions) encoder := gob.NewEncoder(byteBuffer)
encoder.Encode(block)
byteBuffer = bytes.NewBuffer([]byte{}) avgBlockSizeInBytes += len(byteBuffer.Bytes())
encoder = gob.NewEncoder(byteBuffer)
encoder.Encode(block.Transactions) txCount += len(block.Transactions)
avgTxSize += len(byteBuffer.Bytes()) blockCount += 1
totalTxCount += len(block.TransactionIds)
totalBlockCount += 1
byteBuffer = bytes.NewBuffer([]byte{})
encoder = gob.NewEncoder(byteBuffer)
encoder.Encode(block.Transactions)
avgTxSize += len(byteBuffer.Bytes())
}
}
if blockCount != 0 {
avgBlockSizeInBytes = avgBlockSizeInBytes / blockCount
avgTxSize = avgTxSize / txCount
} }
avgBlockSizeInBytes = avgBlockSizeInBytes / len(node.blockchain.Blocks)
avgTxSize = avgTxSize / txCount
node.log.Debug("Blockchain Report", "numBlocks", len(node.blockchain.Blocks), "avgBlockSize", avgBlockSizeInBytes, "numTxs", txCount, "avgTxSzie", avgTxSize) node.log.Debug("Blockchain Report", "totalNumBlocks", totalBlockCount, "avgBlockSizeInCurrentEpoch", avgBlockSizeInBytes, "totalNumTxs", totalTxCount, "avgTxSzieInCurrentEpoch", avgTxSize)
os.Exit(0) os.Exit(0)
} }

Loading…
Cancel
Save