github.com/kaituanwang/hyperledger@v2.0.1+incompatible/core/ledger/kvledger/metrics.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 SPDX-License-Identifier: Apache-2.0 4 */ 5 6 package kvledger 7 8 import ( 9 "time" 10 11 "github.com/hyperledger/fabric/common/metrics" 12 "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/txmgr" 13 ) 14 15 type stats struct { 16 blockProcessingTime metrics.Histogram 17 blockAndPvtdataStoreCommitTime metrics.Histogram 18 statedbCommitTime metrics.Histogram 19 transactionsCount metrics.Counter 20 } 21 22 func newStats(metricsProvider metrics.Provider) *stats { 23 stats := &stats{} 24 stats.blockProcessingTime = metricsProvider.NewHistogram(blockProcessingTimeOpts) 25 stats.blockAndPvtdataStoreCommitTime = metricsProvider.NewHistogram(blockAndPvtdataStoreCommitTimeOpts) 26 stats.statedbCommitTime = metricsProvider.NewHistogram(statedbCommitTimeOpts) 27 stats.transactionsCount = metricsProvider.NewCounter(transactionCountOpts) 28 return stats 29 } 30 31 type ledgerStats struct { 32 stats *stats 33 ledgerid string 34 } 35 36 func (s *stats) ledgerStats(ledgerid string) *ledgerStats { 37 return &ledgerStats{ 38 s, ledgerid, 39 } 40 } 41 42 func (s *ledgerStats) updateBlockProcessingTime(timeTaken time.Duration) { 43 s.stats.blockProcessingTime.With("channel", s.ledgerid).Observe(timeTaken.Seconds()) 44 } 45 46 func (s *ledgerStats) updateBlockstorageAndPvtdataCommitTime(timeTaken time.Duration) { 47 s.stats.blockAndPvtdataStoreCommitTime.With("channel", s.ledgerid).Observe(timeTaken.Seconds()) 48 } 49 50 func (s *ledgerStats) updateStatedbCommitTime(timeTaken time.Duration) { 51 s.stats.statedbCommitTime.With("channel", s.ledgerid).Observe(timeTaken.Seconds()) 52 } 53 54 func (s *ledgerStats) updateTransactionsStats( 55 txstatsInfo []*txmgr.TxStatInfo, 56 ) { 57 for _, txstat := range txstatsInfo { 58 transactionTypeStr := "unknown" 59 if txstat.TxType != -1 { 60 transactionTypeStr = txstat.TxType.String() 61 } 62 63 chaincodeName := "unknown" 64 if txstat.ChaincodeID != nil { 65 chaincodeName = txstat.ChaincodeID.Name + ":" + txstat.ChaincodeID.Version 66 } 67 68 s.stats.transactionsCount.With( 69 "channel", s.ledgerid, 70 "transaction_type", transactionTypeStr, 71 "chaincode", chaincodeName, 72 "validation_code", txstat.ValidationCode.String(), 73 ).Add(1) 74 } 75 } 76 77 var ( 78 blockProcessingTimeOpts = metrics.HistogramOpts{ 79 Namespace: "ledger", 80 Subsystem: "", 81 Name: "block_processing_time", 82 Help: "Time taken in seconds for ledger block processing.", 83 LabelNames: []string{"channel"}, 84 StatsdFormat: "%{#fqname}.%{channel}", 85 Buckets: []float64{0.005, 0.01, 0.015, 0.05, 0.1, 1, 10}, 86 } 87 88 blockAndPvtdataStoreCommitTimeOpts = metrics.HistogramOpts{ 89 Namespace: "ledger", 90 Subsystem: "", 91 Name: "blockstorage_and_pvtdata_commit_time", 92 Help: "Time taken in seconds for committing the block and private data to storage.", 93 LabelNames: []string{"channel"}, 94 StatsdFormat: "%{#fqname}.%{channel}", 95 Buckets: []float64{0.005, 0.01, 0.015, 0.05, 0.1, 1, 10}, 96 } 97 98 statedbCommitTimeOpts = metrics.HistogramOpts{ 99 Namespace: "ledger", 100 Subsystem: "", 101 Name: "statedb_commit_time", 102 Help: "Time taken in seconds for committing block changes to state db.", 103 LabelNames: []string{"channel"}, 104 StatsdFormat: "%{#fqname}.%{channel}", 105 Buckets: []float64{0.005, 0.01, 0.015, 0.05, 0.1, 1, 10}, 106 } 107 108 transactionCountOpts = metrics.CounterOpts{ 109 Namespace: "ledger", 110 Subsystem: "", 111 Name: "transaction_count", 112 Help: "Number of transactions processed.", 113 LabelNames: []string{"channel", "transaction_type", "chaincode", "validation_code"}, 114 StatsdFormat: "%{#fqname}.%{channel}.%{transaction_type}.%{chaincode}.%{validation_code}", 115 } 116 )