github.com/MetalBlockchain/metalgo@v1.11.9/vms/metervm/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 metervm
     5  
     6  import (
     7  	"github.com/prometheus/client_golang/prometheus"
     8  
     9  	"github.com/MetalBlockchain/metalgo/utils/metric"
    10  	"github.com/MetalBlockchain/metalgo/utils/wrappers"
    11  )
    12  
    13  type blockMetrics struct {
    14  	buildBlock,
    15  	buildBlockErr,
    16  	parseBlock,
    17  	parseBlockErr,
    18  	getBlock,
    19  	getBlockErr,
    20  	setPreference,
    21  	lastAccepted,
    22  	verify,
    23  	verifyErr,
    24  	accept,
    25  	reject,
    26  	// Height metrics
    27  	getBlockIDAtHeight,
    28  	// Block verification with context metrics
    29  	shouldVerifyWithContext,
    30  	verifyWithContext,
    31  	verifyWithContextErr,
    32  	// Block building with context metrics
    33  	buildBlockWithContext,
    34  	buildBlockWithContextErr,
    35  	// Batched metrics
    36  	getAncestors,
    37  	batchedParseBlock,
    38  	// State sync metrics
    39  	stateSyncEnabled,
    40  	getOngoingSyncStateSummary,
    41  	getLastStateSummary,
    42  	parseStateSummary,
    43  	parseStateSummaryErr,
    44  	getStateSummary,
    45  	getStateSummaryErr metric.Averager
    46  }
    47  
    48  func (m *blockMetrics) Initialize(
    49  	supportsBlockBuildingWithContext bool,
    50  	supportsBatchedFetching bool,
    51  	supportsStateSync bool,
    52  	reg prometheus.Registerer,
    53  ) error {
    54  	errs := wrappers.Errs{}
    55  	m.buildBlock = newAverager("build_block", reg, &errs)
    56  	m.buildBlockErr = newAverager("build_block_err", reg, &errs)
    57  	m.parseBlock = newAverager("parse_block", reg, &errs)
    58  	m.parseBlockErr = newAverager("parse_block_err", reg, &errs)
    59  	m.getBlock = newAverager("get_block", reg, &errs)
    60  	m.getBlockErr = newAverager("get_block_err", reg, &errs)
    61  	m.setPreference = newAverager("set_preference", reg, &errs)
    62  	m.lastAccepted = newAverager("last_accepted", reg, &errs)
    63  	m.verify = newAverager("verify", reg, &errs)
    64  	m.verifyErr = newAverager("verify_err", reg, &errs)
    65  	m.accept = newAverager("accept", reg, &errs)
    66  	m.reject = newAverager("reject", reg, &errs)
    67  	m.shouldVerifyWithContext = newAverager("should_verify_with_context", reg, &errs)
    68  	m.verifyWithContext = newAverager("verify_with_context", reg, &errs)
    69  	m.verifyWithContextErr = newAverager("verify_with_context_err", reg, &errs)
    70  	m.getBlockIDAtHeight = newAverager("get_block_id_at_height", reg, &errs)
    71  
    72  	if supportsBlockBuildingWithContext {
    73  		m.buildBlockWithContext = newAverager("build_block_with_context", reg, &errs)
    74  		m.buildBlockWithContextErr = newAverager("build_block_with_context_err", reg, &errs)
    75  	}
    76  	if supportsBatchedFetching {
    77  		m.getAncestors = newAverager("get_ancestors", reg, &errs)
    78  		m.batchedParseBlock = newAverager("batched_parse_block", reg, &errs)
    79  	}
    80  	if supportsStateSync {
    81  		m.stateSyncEnabled = newAverager("state_sync_enabled", reg, &errs)
    82  		m.getOngoingSyncStateSummary = newAverager("get_ongoing_state_sync_summary", reg, &errs)
    83  		m.getLastStateSummary = newAverager("get_last_state_summary", reg, &errs)
    84  		m.parseStateSummary = newAverager("parse_state_summary", reg, &errs)
    85  		m.parseStateSummaryErr = newAverager("parse_state_summary_err", reg, &errs)
    86  		m.getStateSummary = newAverager("get_state_summary", reg, &errs)
    87  		m.getStateSummaryErr = newAverager("get_state_summary_err", reg, &errs)
    88  	}
    89  	return errs.Err
    90  }