metrics separation (#5391)

* split metrics from collation generation

* move metrics to separate file out of backing

* split bitfield signing metrics

* split candidate validation metrics

* split chain api metrics

* split metrics from runtime API

* util is not used in backed metrics mod

* fmt

* missing types

* sure
This commit is contained in:
Bernhard Schuster
2022-04-25 19:17:29 +02:00
committed by GitHub
parent c01a9ea524
commit 033950ca36
12 changed files with 616 additions and 501 deletions
+3 -61
View File
@@ -22,7 +22,6 @@
#![deny(unused_crate_dependencies)]
#![warn(missing_docs)]
use polkadot_node_subsystem_util::metrics::{self, prometheus};
use polkadot_primitives::{
runtime_api::ParachainHost,
v2::{Block, BlockId, Hash},
@@ -45,6 +44,9 @@ use std::{collections::VecDeque, pin::Pin, sync::Arc};
mod cache;
mod metrics;
use self::metrics::Metrics;
#[cfg(test)]
mod tests;
@@ -526,63 +528,3 @@ where
query!(ValidationCodeHash, validation_code_hash(para, assumption), ver = 2, sender),
}
}
#[derive(Clone)]
struct MetricsInner {
chain_api_requests: prometheus::CounterVec<prometheus::U64>,
make_runtime_api_request: prometheus::Histogram,
}
/// Runtime API metrics.
#[derive(Default, Clone)]
pub struct Metrics(Option<MetricsInner>);
impl Metrics {
fn on_request(&self, succeeded: bool) {
if let Some(metrics) = &self.0 {
if succeeded {
metrics.chain_api_requests.with_label_values(&["succeeded"]).inc();
} else {
metrics.chain_api_requests.with_label_values(&["failed"]).inc();
}
}
}
fn on_cached_request(&self) {
self.0
.as_ref()
.map(|metrics| metrics.chain_api_requests.with_label_values(&["cached"]).inc());
}
/// Provide a timer for `make_runtime_api_request` which observes on drop.
fn time_make_runtime_api_request(
&self,
) -> Option<metrics::prometheus::prometheus::HistogramTimer> {
self.0.as_ref().map(|metrics| metrics.make_runtime_api_request.start_timer())
}
}
impl metrics::Metrics for Metrics {
fn try_register(registry: &prometheus::Registry) -> Result<Self, prometheus::PrometheusError> {
let metrics = MetricsInner {
chain_api_requests: prometheus::register(
prometheus::CounterVec::new(
prometheus::Opts::new(
"polkadot_parachain_runtime_api_requests_total",
"Number of Runtime API requests served.",
),
&["success"],
)?,
registry,
)?,
make_runtime_api_request: prometheus::register(
prometheus::Histogram::with_opts(prometheus::HistogramOpts::new(
"polkadot_parachain_runtime_api_make_runtime_api_request",
"Time spent within `runtime_api::make_runtime_api_request`",
))?,
registry,
)?,
};
Ok(Metrics(Some(metrics)))
}
}