Skip to content

Commit fa1f8b2

Browse files
bkchrdarkfriend77
authored andcommitted
Remove RpcMetrics weirdness (paritytech#7608)
* Remove `RpcMetrics` weirdness The metrics was returning an error when prometheus was not given. This was a really weird setup, especially when compared to all other metrics that just do nothing if there is no registry. * Fix browser build
1 parent f506b51 commit fa1f8b2

File tree

3 files changed

+31
-26
lines changed

3 files changed

+31
-26
lines changed

client/rpc-servers/src/middleware.rs

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -32,36 +32,41 @@ use futures::{future::Either, Future};
3232
/// Metrics for RPC middleware
3333
#[derive(Debug, Clone)]
3434
pub struct RpcMetrics {
35-
rpc_calls: CounterVec<U64>,
35+
rpc_calls: Option<CounterVec<U64>>,
3636
}
3737

3838
impl RpcMetrics {
3939
/// Create an instance of metrics
4040
pub fn new(metrics_registry: Option<&Registry>) -> Result<Self, PrometheusError> {
41-
metrics_registry.and_then(|r| {
42-
Some(RpcMetrics {
43-
rpc_calls: register(CounterVec::new(
44-
Opts::new(
45-
"rpc_calls_total",
46-
"Number of rpc calls received",
47-
),
48-
&["protocol"]
49-
).ok()?, r).ok()?,
50-
})
51-
}).ok_or(PrometheusError::Msg("Cannot register metric".to_string()))
41+
Ok(Self {
42+
rpc_calls: metrics_registry.map(|r|
43+
register(
44+
CounterVec::new(
45+
Opts::new(
46+
"rpc_calls_total",
47+
"Number of rpc calls received",
48+
),
49+
&["protocol"]
50+
)?,
51+
r,
52+
)
53+
).transpose()?,
54+
})
5255
}
5356
}
5457

5558
/// Middleware for RPC calls
5659
pub struct RpcMiddleware {
57-
metrics: Option<RpcMetrics>,
60+
metrics: RpcMetrics,
5861
transport_label: String,
5962
}
6063

6164
impl RpcMiddleware {
62-
/// Create an instance of middleware with provided metrics
63-
/// transport_label is used as a label for Prometheus collector
64-
pub fn new(metrics: Option<RpcMetrics>, transport_label: &str) -> Self {
65+
/// Create an instance of middleware.
66+
///
67+
/// - `metrics`: Will be used to report statistics.
68+
/// - `transport_label`: The label that is used when reporting the statistics.
69+
pub fn new(metrics: RpcMetrics, transport_label: &str) -> Self {
6570
RpcMiddleware {
6671
metrics,
6772
transport_label: String::from(transport_label),
@@ -78,8 +83,8 @@ impl<M: Metadata> RequestMiddleware<M> for RpcMiddleware {
7883
F: Fn(Request, M) -> X + Send + Sync,
7984
X: Future<Item = Option<Response>, Error = ()> + Send + 'static,
8085
{
81-
if let Some(ref metrics) = self.metrics {
82-
metrics.rpc_calls.with_label_values(&[self.transport_label.as_str()]).inc();
86+
if let Some(ref rpc_calls) = self.metrics.rpc_calls {
87+
rpc_calls.with_label_values(&[self.transport_label.as_str()]).inc();
8388
}
8489

8590
Either::B(next(request, meta))

client/service/src/builder.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -603,12 +603,12 @@ pub fn spawn_tasks<TBl, TBackend, TExPool, TRpc, TCl>(
603603
on_demand.clone(), remote_blockchain.clone(), &*rpc_extensions_builder,
604604
backend.offchain_storage(), system_rpc_tx.clone()
605605
);
606-
let rpc_metrics = sc_rpc_server::RpcMetrics::new(config.prometheus_registry()).ok();
607-
let rpc = start_rpc_servers(&config, gen_handler, rpc_metrics.as_ref())?;
606+
let rpc_metrics = sc_rpc_server::RpcMetrics::new(config.prometheus_registry())?;
607+
let rpc = start_rpc_servers(&config, gen_handler, rpc_metrics.clone())?;
608608
// This is used internally, so don't restrict access to unsafe RPC
609609
let rpc_handlers = RpcHandlers(Arc::new(gen_handler(
610610
sc_rpc::DenyUnsafe::No,
611-
sc_rpc_server::RpcMiddleware::new(rpc_metrics.as_ref().cloned(), "inbrowser")
611+
sc_rpc_server::RpcMiddleware::new(rpc_metrics, "inbrowser")
612612
).into()));
613613

614614
// Telemetry

client/service/src/lib.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ fn start_rpc_servers<
401401
>(
402402
config: &Configuration,
403403
mut gen_handler: H,
404-
rpc_metrics: Option<&sc_rpc_server::RpcMetrics>
404+
rpc_metrics: sc_rpc_server::RpcMetrics,
405405
) -> Result<Box<dyn std::any::Any + Send + Sync>, error::Error> {
406406
fn maybe_start_server<T, F>(address: Option<SocketAddr>, mut start: F) -> Result<Option<T>, io::Error>
407407
where F: FnMut(&SocketAddr) -> Result<T, io::Error>,
@@ -434,7 +434,7 @@ fn start_rpc_servers<
434434
config.rpc_ipc.as_ref().map(|path| sc_rpc_server::start_ipc(
435435
&*path, gen_handler(
436436
sc_rpc::DenyUnsafe::No,
437-
sc_rpc_server::RpcMiddleware::new(rpc_metrics.cloned(), "ipc")
437+
sc_rpc_server::RpcMiddleware::new(rpc_metrics.clone(), "ipc")
438438
)
439439
)),
440440
maybe_start_server(
@@ -444,7 +444,7 @@ fn start_rpc_servers<
444444
config.rpc_cors.as_ref(),
445445
gen_handler(
446446
deny_unsafe(&address, &config.rpc_methods),
447-
sc_rpc_server::RpcMiddleware::new(rpc_metrics.cloned(), "http")
447+
sc_rpc_server::RpcMiddleware::new(rpc_metrics.clone(), "http")
448448
),
449449
),
450450
)?.map(|s| waiting::HttpServer(Some(s))),
@@ -456,7 +456,7 @@ fn start_rpc_servers<
456456
config.rpc_cors.as_ref(),
457457
gen_handler(
458458
deny_unsafe(&address, &config.rpc_methods),
459-
sc_rpc_server::RpcMiddleware::new(rpc_metrics.cloned(), "ws")
459+
sc_rpc_server::RpcMiddleware::new(rpc_metrics.clone(), "ws")
460460
),
461461
),
462462
)?.map(|s| waiting::WsServer(Some(s))),
@@ -471,7 +471,7 @@ fn start_rpc_servers<
471471
>(
472472
_: &Configuration,
473473
_: H,
474-
_: Option<&sc_rpc_server::RpcMetrics>
474+
_: sc_rpc_server::RpcMetrics,
475475
) -> Result<Box<dyn std::any::Any + Send + Sync>, error::Error> {
476476
Ok(Box::new(()))
477477
}

0 commit comments

Comments
 (0)