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 }