github.com/ethereum/go-ethereum@v1.14.4-0.20240516095835-473ee8fc07a3/core/txpool/blobpool/metrics.go (about)

     1  // Copyright 2023 The go-ethereum Authors
     2  // This file is part of the go-ethereum library.
     3  //
     4  // The go-ethereum library is free software: you can redistribute it and/or modify
     5  // it under the terms of the GNU Lesser General Public License as published by
     6  // the Free Software Foundation, either version 3 of the License, or
     7  // (at your option) any later version.
     8  //
     9  // The go-ethereum library is distributed in the hope that it will be useful,
    10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    12  // GNU Lesser General Public License for more details.
    13  //
    14  // You should have received a copy of the GNU Lesser General Public License
    15  // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
    16  
    17  package blobpool
    18  
    19  import "github.com/ethereum/go-ethereum/metrics"
    20  
    21  var (
    22  	// datacapGauge tracks the user's configured capacity for the blob pool. It
    23  	// is mostly a way to expose/debug issues.
    24  	datacapGauge = metrics.NewRegisteredGauge("blobpool/datacap", nil)
    25  
    26  	// The below metrics track the per-datastore metrics for the primary blob
    27  	// store and the temporary limbo store.
    28  	datausedGauge = metrics.NewRegisteredGauge("blobpool/dataused", nil)
    29  	datarealGauge = metrics.NewRegisteredGauge("blobpool/datareal", nil)
    30  	slotusedGauge = metrics.NewRegisteredGauge("blobpool/slotused", nil)
    31  
    32  	limboDatausedGauge = metrics.NewRegisteredGauge("blobpool/limbo/dataused", nil)
    33  	limboDatarealGauge = metrics.NewRegisteredGauge("blobpool/limbo/datareal", nil)
    34  	limboSlotusedGauge = metrics.NewRegisteredGauge("blobpool/limbo/slotused", nil)
    35  
    36  	// The below metrics track the per-shelf metrics for the primary blob store
    37  	// and the temporary limbo store.
    38  	shelfDatausedGaugeName = "blobpool/shelf_%d/dataused"
    39  	shelfDatagapsGaugeName = "blobpool/shelf_%d/datagaps"
    40  	shelfSlotusedGaugeName = "blobpool/shelf_%d/slotused"
    41  	shelfSlotgapsGaugeName = "blobpool/shelf_%d/slotgaps"
    42  
    43  	limboShelfDatausedGaugeName = "blobpool/limbo/shelf_%d/dataused"
    44  	limboShelfDatagapsGaugeName = "blobpool/limbo/shelf_%d/datagaps"
    45  	limboShelfSlotusedGaugeName = "blobpool/limbo/shelf_%d/slotused"
    46  	limboShelfSlotgapsGaugeName = "blobpool/limbo/shelf_%d/slotgaps"
    47  
    48  	// The oversized metrics aggregate the shelf stats above the max blob count
    49  	// limits to track transactions that are just huge, but don't contain blobs.
    50  	//
    51  	// There are no oversized data in the limbo, it only contains blobs and some
    52  	// constant metadata.
    53  	oversizedDatausedGauge = metrics.NewRegisteredGauge("blobpool/oversized/dataused", nil)
    54  	oversizedDatagapsGauge = metrics.NewRegisteredGauge("blobpool/oversized/datagaps", nil)
    55  	oversizedSlotusedGauge = metrics.NewRegisteredGauge("blobpool/oversized/slotused", nil)
    56  	oversizedSlotgapsGauge = metrics.NewRegisteredGauge("blobpool/oversized/slotgaps", nil)
    57  
    58  	// basefeeGauge and blobfeeGauge track the current network 1559 base fee and
    59  	// 4844 blob fee respectively.
    60  	basefeeGauge = metrics.NewRegisteredGauge("blobpool/basefee", nil)
    61  	blobfeeGauge = metrics.NewRegisteredGauge("blobpool/blobfee", nil)
    62  
    63  	// pooltipGauge is the configurable miner tip to permit a transaction into
    64  	// the pool.
    65  	pooltipGauge = metrics.NewRegisteredGauge("blobpool/pooltip", nil)
    66  
    67  	// addwait/time, resetwait/time and getwait/time track the rough health of
    68  	// the pool and whether it's capable of keeping up with the load from the
    69  	// network.
    70  	addwaitHist   = metrics.NewRegisteredHistogram("blobpool/addwait", nil, metrics.NewExpDecaySample(1028, 0.015))
    71  	addtimeHist   = metrics.NewRegisteredHistogram("blobpool/addtime", nil, metrics.NewExpDecaySample(1028, 0.015))
    72  	getwaitHist   = metrics.NewRegisteredHistogram("blobpool/getwait", nil, metrics.NewExpDecaySample(1028, 0.015))
    73  	gettimeHist   = metrics.NewRegisteredHistogram("blobpool/gettime", nil, metrics.NewExpDecaySample(1028, 0.015))
    74  	pendwaitHist  = metrics.NewRegisteredHistogram("blobpool/pendwait", nil, metrics.NewExpDecaySample(1028, 0.015))
    75  	pendtimeHist  = metrics.NewRegisteredHistogram("blobpool/pendtime", nil, metrics.NewExpDecaySample(1028, 0.015))
    76  	resetwaitHist = metrics.NewRegisteredHistogram("blobpool/resetwait", nil, metrics.NewExpDecaySample(1028, 0.015))
    77  	resettimeHist = metrics.NewRegisteredHistogram("blobpool/resettime", nil, metrics.NewExpDecaySample(1028, 0.015))
    78  
    79  	// The below metrics track various cases where transactions are dropped out
    80  	// of the pool. Most are exceptional, some are chain progression and some
    81  	// threshold cappings.
    82  	dropInvalidMeter     = metrics.NewRegisteredMeter("blobpool/drop/invalid", nil)     // Invalid transaction, consensus change or bugfix, neutral-ish
    83  	dropDanglingMeter    = metrics.NewRegisteredMeter("blobpool/drop/dangling", nil)    // First nonce gapped, bad
    84  	dropFilledMeter      = metrics.NewRegisteredMeter("blobpool/drop/filled", nil)      // State full-overlap, chain progress, ok
    85  	dropOverlappedMeter  = metrics.NewRegisteredMeter("blobpool/drop/overlapped", nil)  // State partial-overlap, chain progress, ok
    86  	dropRepeatedMeter    = metrics.NewRegisteredMeter("blobpool/drop/repeated", nil)    // Repeated nonce, bad
    87  	dropGappedMeter      = metrics.NewRegisteredMeter("blobpool/drop/gapped", nil)      // Non-first nonce gapped, bad
    88  	dropOverdraftedMeter = metrics.NewRegisteredMeter("blobpool/drop/overdrafted", nil) // Balance exceeded, bad
    89  	dropOvercappedMeter  = metrics.NewRegisteredMeter("blobpool/drop/overcapped", nil)  // Per-account cap exceeded, bad
    90  	dropOverflownMeter   = metrics.NewRegisteredMeter("blobpool/drop/overflown", nil)   // Global disk cap exceeded, neutral-ish
    91  	dropUnderpricedMeter = metrics.NewRegisteredMeter("blobpool/drop/underpriced", nil) // Gas tip changed, neutral
    92  	dropReplacedMeter    = metrics.NewRegisteredMeter("blobpool/drop/replaced", nil)    // Transaction replaced, neutral
    93  
    94  	// The below metrics track various outcomes of transactions being added to
    95  	// the pool.
    96  	addInvalidMeter      = metrics.NewRegisteredMeter("blobpool/add/invalid", nil)      // Invalid transaction, reject, neutral
    97  	addUnderpricedMeter  = metrics.NewRegisteredMeter("blobpool/add/underpriced", nil)  // Gas tip too low, neutral
    98  	addStaleMeter        = metrics.NewRegisteredMeter("blobpool/add/stale", nil)        // Nonce already filled, reject, bad-ish
    99  	addGappedMeter       = metrics.NewRegisteredMeter("blobpool/add/gapped", nil)       // Nonce gapped, reject, bad-ish
   100  	addOverdraftedMeter  = metrics.NewRegisteredMeter("blobpool/add/overdrafted", nil)  // Balance exceeded, reject, neutral
   101  	addOvercappedMeter   = metrics.NewRegisteredMeter("blobpool/add/overcapped", nil)   // Per-account cap exceeded, reject, neutral
   102  	addNoreplaceMeter    = metrics.NewRegisteredMeter("blobpool/add/noreplace", nil)    // Replacement fees or tips too low, neutral
   103  	addNonExclusiveMeter = metrics.NewRegisteredMeter("blobpool/add/nonexclusive", nil) // Plain transaction from same account exists, reject, neutral
   104  	addValidMeter        = metrics.NewRegisteredMeter("blobpool/add/valid", nil)        // Valid transaction, add, neutral
   105  )