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  )