-
Notifications
You must be signed in to change notification settings - Fork 645
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Iulian Barbu <iulian.barbu@parity.io>
- Loading branch information
1 parent
a0fb74d
commit cf3c960
Showing
3 changed files
with
73 additions
and
312 deletions.
There are no files selected for viewing
289 changes: 19 additions & 270 deletions
289
cumulus/client/relay-chain-rpc-interface/src/metrics.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,284 +1,33 @@ | ||
use std::collections::HashMap; | ||
|
||
use prometheus::{Error as PrometheusError, HistogramTimer, Registry}; | ||
use prometheus_endpoint::{HistogramOpts, HistogramVec, Opts}; | ||
|
||
use crate::constants::{ | ||
AUTHORITY_DISCOVERY_API_AUTHORITIES, BABE_API_CURRENT_EPOCH, CHAIN_GET_BLOCKHASH, | ||
CHAIN_GET_FINALIZED_HEAD, CHAIN_GET_HEAD, CHAIN_GET_HEADER, | ||
PARACHAIN_HOST_ASYNC_BACKING_PARAMS, PARACHAIN_HOST_AVAILABILITY_CORES, | ||
PARACHAIN_HOST_CANDIDATES_PENDING_AVAILABILITY, PARACHAIN_HOST_CANDIDATE_EVENTS, | ||
PARACHAIN_HOST_CANDIDATE_PENDING_AVAILABILITY, PARACHAIN_HOST_CHECK_VALIDATION_OUTPUTS, | ||
PARACHAIN_HOST_CLAIM_QUEUE, PARACHAIN_HOST_DISABLED_VALIDATORS, PARACHAIN_HOST_DISPUTES, | ||
PARACHAIN_HOST_DMQ_CONTENTS, PARACHAIN_HOST_INBOUND_HRMP_CHANNELS_CONTENTS, | ||
PARACHAIN_HOST_KEY_OWNERSHIP_PROOF, PARACHAIN_HOST_MINIMUM_BACKING_VOTES, | ||
PARACHAIN_HOST_NODE_FEATURES, PARACHAIN_HOST_ON_CHAIN_VOTES, PARACHAIN_HOST_PARA_BACKING_STATE, | ||
PARACHAIN_HOST_PERSISTED_ASSUMED_VALIDATION_DATA, PARACHAIN_HOST_PERSISTED_VALIDATION_DATA, | ||
PARACHAIN_HOST_PVFS_REQUIRE_PRECHECK, PARACHAIN_HOST_SESSION_EXECUTOR_PARAMS, | ||
PARACHAIN_HOST_SESSION_INDEX_FOR_CHILD, PARACHAIN_HOST_SESSION_INFO, | ||
PARACHAIN_HOST_STAGING_APPROVAL_VOTING_PARAMS, PARACHAIN_HOST_SUBMIT_PVF_CHECK_STATEMENT, | ||
PARACHAIN_HOST_SUBMIT_REPORT_DISPUTE_LOST, PARACHAIN_HOST_UNAPPLIED_SLASHES, | ||
PARACHAIN_HOST_VALIATOR_GROUPS, PARACHAIN_HOST_VALIDATION_CODE, | ||
PARACHAIN_HOST_VALIDATION_CODE_BY_HASH, PARACHAIN_HOST_VALIDATION_CODE_HASH, | ||
PARACHAIN_HOST_VALIDATORS, STATE_GET_RUNTIME_VERSION, | ||
}; | ||
|
||
pub(crate) const DURATION_LABEL_NAME: &str = "duration"; | ||
|
||
// Gathers metrics about the blockchain RPC client. | ||
#[derive(Clone)] | ||
pub(crate) struct BlockchainRpcMetrics { | ||
inner: HashMap<String, HistogramVec>, | ||
rpc_request: HistogramVec, | ||
} | ||
|
||
impl BlockchainRpcMetrics { | ||
fn create_histogram_vec( | ||
registry: &Registry, | ||
method: &str, | ||
) -> Result<HistogramVec, PrometheusError> { | ||
Ok(prometheus_endpoint::register( | ||
HistogramVec::new( | ||
HistogramOpts { | ||
common_opts: Opts::new( | ||
format!("cumulus_rpc_{}", method), | ||
format!("Tracks stats about {} rpc call", method), | ||
), | ||
buckets: prometheus::exponential_buckets(0.5, 2.0, 10) | ||
.expect("parameters are always valid values; qed"), | ||
}, | ||
&[DURATION_LABEL_NAME, method], | ||
)?, | ||
registry, | ||
)?) | ||
} | ||
|
||
pub(crate) fn register(registry: &Registry) -> Result<Self, PrometheusError> { | ||
let mut metrics = HashMap::new(); | ||
metrics.insert( | ||
CHAIN_GET_HEAD.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec(registry, CHAIN_GET_HEAD)?, | ||
); | ||
metrics.insert( | ||
CHAIN_GET_HEADER.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec(registry, CHAIN_GET_HEADER)?, | ||
); | ||
metrics.insert( | ||
CHAIN_GET_BLOCKHASH.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec(registry, CHAIN_GET_BLOCKHASH)?, | ||
); | ||
metrics.insert( | ||
CHAIN_GET_FINALIZED_HEAD.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec(registry, CHAIN_GET_FINALIZED_HEAD)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_VALIDATORS.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec(registry, PARACHAIN_HOST_VALIDATORS)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_VALIATOR_GROUPS.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec(registry, PARACHAIN_HOST_VALIATOR_GROUPS)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_AVAILABILITY_CORES.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec( | ||
registry, | ||
PARACHAIN_HOST_AVAILABILITY_CORES, | ||
)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_PERSISTED_VALIDATION_DATA.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec( | ||
registry, | ||
PARACHAIN_HOST_PERSISTED_VALIDATION_DATA, | ||
)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_PERSISTED_ASSUMED_VALIDATION_DATA.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec( | ||
registry, | ||
PARACHAIN_HOST_PERSISTED_ASSUMED_VALIDATION_DATA, | ||
)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_CHECK_VALIDATION_OUTPUTS.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec( | ||
registry, | ||
PARACHAIN_HOST_CHECK_VALIDATION_OUTPUTS, | ||
)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_SESSION_INDEX_FOR_CHILD.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec( | ||
registry, | ||
PARACHAIN_HOST_SESSION_INDEX_FOR_CHILD, | ||
)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_VALIDATION_CODE.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec(registry, PARACHAIN_HOST_VALIDATION_CODE)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_CANDIDATE_PENDING_AVAILABILITY.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec( | ||
registry, | ||
PARACHAIN_HOST_CANDIDATE_PENDING_AVAILABILITY, | ||
)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_CANDIDATE_EVENTS.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec(registry, PARACHAIN_HOST_CANDIDATE_EVENTS)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_DMQ_CONTENTS.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec(registry, PARACHAIN_HOST_DMQ_CONTENTS)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_INBOUND_HRMP_CHANNELS_CONTENTS.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec( | ||
registry, | ||
PARACHAIN_HOST_INBOUND_HRMP_CHANNELS_CONTENTS, | ||
)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_VALIDATION_CODE_BY_HASH.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec( | ||
registry, | ||
PARACHAIN_HOST_VALIDATION_CODE_BY_HASH, | ||
)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_SESSION_INFO.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec(registry, PARACHAIN_HOST_SESSION_INFO)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_SESSION_EXECUTOR_PARAMS.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec( | ||
registry, | ||
PARACHAIN_HOST_SESSION_EXECUTOR_PARAMS, | ||
)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_SUBMIT_PVF_CHECK_STATEMENT.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec( | ||
registry, | ||
PARACHAIN_HOST_SUBMIT_PVF_CHECK_STATEMENT, | ||
)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_PVFS_REQUIRE_PRECHECK.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec( | ||
registry, | ||
PARACHAIN_HOST_PVFS_REQUIRE_PRECHECK, | ||
)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_VALIDATION_CODE_HASH.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec( | ||
registry, | ||
PARACHAIN_HOST_VALIDATION_CODE_HASH, | ||
)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_DISPUTES.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec(registry, PARACHAIN_HOST_DISPUTES)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_UNAPPLIED_SLASHES.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec(registry, PARACHAIN_HOST_UNAPPLIED_SLASHES)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_KEY_OWNERSHIP_PROOF.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec( | ||
registry, | ||
PARACHAIN_HOST_KEY_OWNERSHIP_PROOF, | ||
)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_SUBMIT_REPORT_DISPUTE_LOST.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec( | ||
registry, | ||
PARACHAIN_HOST_SUBMIT_REPORT_DISPUTE_LOST, | ||
)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_MINIMUM_BACKING_VOTES.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec( | ||
registry, | ||
PARACHAIN_HOST_MINIMUM_BACKING_VOTES, | ||
)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_DISABLED_VALIDATORS.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec( | ||
registry, | ||
PARACHAIN_HOST_DISABLED_VALIDATORS, | ||
)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_ASYNC_BACKING_PARAMS.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec( | ||
registry, | ||
PARACHAIN_HOST_ASYNC_BACKING_PARAMS, | ||
)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_CLAIM_QUEUE.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec(registry, PARACHAIN_HOST_CLAIM_QUEUE)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_NODE_FEATURES.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec(registry, PARACHAIN_HOST_NODE_FEATURES)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_STAGING_APPROVAL_VOTING_PARAMS.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec( | ||
registry, | ||
PARACHAIN_HOST_STAGING_APPROVAL_VOTING_PARAMS, | ||
)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_PARA_BACKING_STATE.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec( | ||
registry, | ||
PARACHAIN_HOST_PARA_BACKING_STATE, | ||
)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_CANDIDATES_PENDING_AVAILABILITY.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec( | ||
registry, | ||
PARACHAIN_HOST_CANDIDATES_PENDING_AVAILABILITY, | ||
)?, | ||
); | ||
metrics.insert( | ||
BABE_API_CURRENT_EPOCH.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec(registry, BABE_API_CURRENT_EPOCH)?, | ||
); | ||
metrics.insert( | ||
AUTHORITY_DISCOVERY_API_AUTHORITIES.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec( | ||
registry, | ||
AUTHORITY_DISCOVERY_API_AUTHORITIES, | ||
)?, | ||
); | ||
metrics.insert( | ||
PARACHAIN_HOST_ON_CHAIN_VOTES.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec(registry, PARACHAIN_HOST_ON_CHAIN_VOTES)?, | ||
); | ||
metrics.insert( | ||
STATE_GET_RUNTIME_VERSION.to_string(), | ||
BlockchainRpcMetrics::create_histogram_vec(registry, STATE_GET_RUNTIME_VERSION)?, | ||
); | ||
Ok(Self { inner: metrics }) | ||
Ok(Self { | ||
rpc_request: prometheus_endpoint::register( | ||
HistogramVec::new( | ||
HistogramOpts { | ||
common_opts: Opts::new( | ||
"cumulus_relay_chain_rpc_request", | ||
"Tracks stats about cumulus relay chain RPC interface", | ||
), | ||
buckets: prometheus::exponential_buckets(0.001, 4.0, 9) | ||
.expect("function parameters are constant and always valid; qed"), | ||
}, | ||
&["method"], | ||
)?, | ||
registry, | ||
)?, | ||
}) | ||
} | ||
|
||
pub(crate) fn start_request_timer<'a>( | ||
&self, | ||
method: &str, | ||
labels: &[&'a str], | ||
) -> Option<HistogramTimer> { | ||
self.inner | ||
.get(method) | ||
.map(|inner| inner.with_label_values(labels).start_timer()) | ||
pub(crate) fn start_request_timer(&self, method: &str) -> HistogramTimer { | ||
self.rpc_request.with_label_values(&[method]).start_timer() | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.