github.com/sykesm/fabric@v1.1.0-preview.0.20200129034918-2aa12b1a0181/core/ledger/kvledger/metrics.go (about)

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