Move the telemetry information to service (#2846)

* Move the telemetry information to service

* Proper exit
This commit is contained in:
Pierre Krieger
2019-06-12 21:32:52 +02:00
committed by Gavin Wood
parent ce302390dd
commit 68f4d11df3
5 changed files with 63 additions and 53 deletions
+2 -50
View File
@@ -22,10 +22,8 @@ use std::time;
use futures::{Future, Stream};
use service::{Service, Components};
use tokio::runtime::TaskExecutor;
use sysinfo::{get_current_pid, ProcessExt, System, SystemExt};
use network::{SyncState, SyncProvider};
use client::{backend::Backend, BlockchainEvents};
use substrate_telemetry::{telemetry, SUBSTRATE_INFO};
use log::{info, warn};
use runtime_primitives::generic::BlockId;
@@ -44,19 +42,14 @@ pub fn build<C>(service: &Service<C>) -> impl Future<Item = (), Error = ()>
where C: Components {
let network = service.network();
let client = service.client();
let txpool = service.transaction_pool();
let mut last_number = None;
let mut last_update = time::Instant::now();
let mut sys = System::new();
let self_pid = get_current_pid();
let display_notifications = network.status().for_each(move |sync_status| {
let info = client.info();
let best_number = info.chain.best_number.saturated_into::<u64>();
let best_hash = info.chain.best_hash;
let num_peers = sync_status.num_peers;
let speed = move || speed(best_number, last_number, last_update);
last_update = time::Instant::now();
let (status, target) = match (sync_status.sync.state, sync_status.sync.best_seen_block) {
@@ -65,7 +58,6 @@ where C: Components {
(SyncState::Downloading, Some(n)) => (format!("Syncing{}", speed()), format!(", target=#{}", n)),
};
last_number = Some(best_number);
let txpool_status = txpool.status();
let finalized_number: u64 = info.chain.finalized_number.saturated_into::<u64>();
let bandwidth_download = network.average_download_per_sec();
let bandwidth_upload = network.average_upload_per_sec();
@@ -83,39 +75,6 @@ where C: Components {
TransferRateFormat(bandwidth_upload),
);
#[allow(deprecated)]
let backend = (*client).backend();
let used_state_cache_size = match backend.used_state_cache_size(){
Some(size) => size,
None => 0,
};
// get cpu usage and memory usage of this process
let (cpu_usage, memory) = if sys.refresh_process(self_pid) {
let proc = sys.get_process(self_pid).expect("Above refresh_process succeeds, this should be Some(), qed");
(proc.cpu_usage(), proc.memory())
} else { (0.0, 0) };
let network_state = network.network_state();
telemetry!(
SUBSTRATE_INFO;
"system.interval";
"network_state" => network_state,
"status" => format!("{}{}", status, target),
"peers" => num_peers,
"height" => best_number,
"best" => ?best_hash,
"txcount" => txpool_status.ready,
"cpu" => cpu_usage,
"memory" => memory,
"finalized_height" => finalized_number,
"finalized_hash" => ?info.chain.finalized_hash,
"bandwidth_download" => bandwidth_download,
"bandwidth_upload" => bandwidth_upload,
"used_state_cache_size" => used_state_cache_size,
);
Ok(())
});
@@ -155,15 +114,8 @@ where C: Components {
Ok(())
});
let txpool = service.transaction_pool();
let display_txpool_import = txpool.import_notification_stream().for_each(move |_| {
let status = txpool.status();
telemetry!(SUBSTRATE_INFO; "txpool.import"; "ready" => status.ready, "future" => status.future);
Ok(())
});
display_notifications.join3(display_block_import, display_txpool_import)
.map(|((), (), ())| ())
display_notifications.join(display_block_import)
.map(|((), ())| ())
}
fn speed(best_number: u64, last_number: Option<u64>, last_update: time::Instant) -> String {