github.com/MetalBlockchain/metalgo@v1.11.9/vms/platformvm/metrics/block_metrics.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package metrics
     5  
     6  import (
     7  	"github.com/prometheus/client_golang/prometheus"
     8  
     9  	"github.com/MetalBlockchain/metalgo/vms/platformvm/block"
    10  )
    11  
    12  const blkLabel = "blk"
    13  
    14  var (
    15  	_ block.Visitor = (*blockMetrics)(nil)
    16  
    17  	blkLabels = []string{blkLabel}
    18  )
    19  
    20  type blockMetrics struct {
    21  	txMetrics *txMetrics
    22  	numBlocks *prometheus.CounterVec
    23  }
    24  
    25  func newBlockMetrics(registerer prometheus.Registerer) (*blockMetrics, error) {
    26  	txMetrics, err := newTxMetrics(registerer)
    27  	if err != nil {
    28  		return nil, err
    29  	}
    30  
    31  	m := &blockMetrics{
    32  		txMetrics: txMetrics,
    33  		numBlocks: prometheus.NewCounterVec(
    34  			prometheus.CounterOpts{
    35  				Name: "blks_accepted",
    36  				Help: "number of blocks accepted",
    37  			},
    38  			blkLabels,
    39  		),
    40  	}
    41  	return m, registerer.Register(m.numBlocks)
    42  }
    43  
    44  func (m *blockMetrics) BanffAbortBlock(*block.BanffAbortBlock) error {
    45  	m.numBlocks.With(prometheus.Labels{
    46  		blkLabel: "abort",
    47  	}).Inc()
    48  	return nil
    49  }
    50  
    51  func (m *blockMetrics) BanffCommitBlock(*block.BanffCommitBlock) error {
    52  	m.numBlocks.With(prometheus.Labels{
    53  		blkLabel: "commit",
    54  	}).Inc()
    55  	return nil
    56  }
    57  
    58  func (m *blockMetrics) BanffProposalBlock(b *block.BanffProposalBlock) error {
    59  	m.numBlocks.With(prometheus.Labels{
    60  		blkLabel: "proposal",
    61  	}).Inc()
    62  	for _, tx := range b.Transactions {
    63  		if err := tx.Unsigned.Visit(m.txMetrics); err != nil {
    64  			return err
    65  		}
    66  	}
    67  	return b.Tx.Unsigned.Visit(m.txMetrics)
    68  }
    69  
    70  func (m *blockMetrics) BanffStandardBlock(b *block.BanffStandardBlock) error {
    71  	m.numBlocks.With(prometheus.Labels{
    72  		blkLabel: "standard",
    73  	}).Inc()
    74  	for _, tx := range b.Transactions {
    75  		if err := tx.Unsigned.Visit(m.txMetrics); err != nil {
    76  			return err
    77  		}
    78  	}
    79  	return nil
    80  }
    81  
    82  func (m *blockMetrics) ApricotAbortBlock(*block.ApricotAbortBlock) error {
    83  	m.numBlocks.With(prometheus.Labels{
    84  		blkLabel: "abort",
    85  	}).Inc()
    86  	return nil
    87  }
    88  
    89  func (m *blockMetrics) ApricotCommitBlock(*block.ApricotCommitBlock) error {
    90  	m.numBlocks.With(prometheus.Labels{
    91  		blkLabel: "commit",
    92  	}).Inc()
    93  	return nil
    94  }
    95  
    96  func (m *blockMetrics) ApricotProposalBlock(b *block.ApricotProposalBlock) error {
    97  	m.numBlocks.With(prometheus.Labels{
    98  		blkLabel: "proposal",
    99  	}).Inc()
   100  	return b.Tx.Unsigned.Visit(m.txMetrics)
   101  }
   102  
   103  func (m *blockMetrics) ApricotStandardBlock(b *block.ApricotStandardBlock) error {
   104  	m.numBlocks.With(prometheus.Labels{
   105  		blkLabel: "standard",
   106  	}).Inc()
   107  	for _, tx := range b.Transactions {
   108  		if err := tx.Unsigned.Visit(m.txMetrics); err != nil {
   109  			return err
   110  		}
   111  	}
   112  	return nil
   113  }
   114  
   115  func (m *blockMetrics) ApricotAtomicBlock(b *block.ApricotAtomicBlock) error {
   116  	m.numBlocks.With(prometheus.Labels{
   117  		blkLabel: "atomic",
   118  	}).Inc()
   119  	return b.Tx.Unsigned.Visit(m.txMetrics)
   120  }