Skip to content
This repository was archived by the owner on Nov 6, 2020. It is now read-only.

Commit e49f538

Browse files
author
adria0
committed
spawn_blocking metrics collection
1 parent 14598b3 commit e49f538

File tree

4 files changed

+17
-14
lines changed

4 files changed

+17
-14
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ stats = { path = "util/stats" }
8181
term_size = "0.3"
8282
textwrap = "0.11.0"
8383
toml = "0.5.6"
84+
tokio = { version = "0.2", features = ["blocking"] }
8485
verification = { path = "ethcore/verification" }
8586
prometheus = "0.9.0"
8687

parity/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ extern crate openethereum;
2828
extern crate parking_lot;
2929
extern crate parity_daemonize;
3030
extern crate ansi_term;
31+
extern crate tokio;
3132

3233
#[cfg(windows)] extern crate winapi;
3334
extern crate ethcore_logger;

parity/metrics.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,19 @@ struct State {
4545
rpc_apis: Arc<rpc_apis::FullDependencies>,
4646
}
4747

48-
fn handle_request(req: Request<Body>, state: &Arc<Mutex<State>>) -> Response<Body> {
48+
async fn handle_request(req: Request<Body>, state: Arc<Mutex<State>>) -> Response<Body> {
4949
let (parts, _body) = req.into_parts();
5050
match (parts.method, parts.uri.path()) {
5151
(Method::GET, "/metrics") => {
5252
let start = Instant::now();
53-
let mut reg = prometheus::Registry::new();
5453

55-
let state = state.lock();
56-
57-
state.rpc_apis.client.prometheus_metrics(&mut reg);
58-
state.rpc_apis.sync.prometheus_metrics(&mut reg);
59-
60-
drop(state);
54+
let mut reg = tokio::task::spawn_blocking(move || {
55+
let mut reg = prometheus::Registry::new();
56+
let state = state.lock();
57+
state.rpc_apis.client.prometheus_metrics(&mut reg);
58+
state.rpc_apis.sync.prometheus_metrics(&mut reg);
59+
reg
60+
}).await.expect("The prometheus collection has panicked");
6161

6262
let elapsed = start.elapsed();
6363
let ms = (elapsed.as_secs() as i64)*1000 + (elapsed.subsec_millis() as i64);
@@ -98,12 +98,12 @@ pub fn start_prometheus_metrics(conf: &MetricsConfiguration, deps: &rpc::Depende
9898
let state = Arc::new(Mutex::new(state));
9999

100100
deps.executor.spawn_std( async move {
101-
let make_service = make_service_fn(move |_| {
102-
let state = state.clone();
103-
async move {
104-
Ok::<_, hyper::Error>(service_fn(move |req| {
105-
let response = handle_request(req,&state);
106-
async move { Ok::<_, hyper::Error>(response) }
101+
let make_service = make_service_fn(move |_| {
102+
let state = state.clone();
103+
async move {
104+
Ok::<_, hyper::Error>(service_fn(move |req| {
105+
let response = handle_request(req, state.clone());
106+
async move { Ok::<_, hyper::Error>(response.await) }
107107
}))
108108
}
109109
});

0 commit comments

Comments
 (0)