* A new sync status enum encapsulated in a state struct allows tracking of where sync is at. Leveraging it in the TUI to provide more helpful messages. * Percentage progression for most sync steps
This commit is contained in:
+57
-7
@@ -23,6 +23,7 @@ use cursive::views::{BoxView, LinearLayout, TextView};
|
||||
use tui::constants::VIEW_BASIC_STATUS;
|
||||
use tui::types::TUIStatusListener;
|
||||
|
||||
use servers::common::types::SyncStatus;
|
||||
use servers::ServerStats;
|
||||
|
||||
pub struct TUIStatusView;
|
||||
@@ -76,14 +77,63 @@ impl TUIStatusListener for TUIStatusView {
|
||||
fn update(c: &mut Cursive, stats: &ServerStats) {
|
||||
//find and update here as needed
|
||||
let basic_status = {
|
||||
if stats.is_syncing {
|
||||
if stats.awaiting_peers {
|
||||
"Waiting for peers".to_string()
|
||||
} else {
|
||||
format!("Syncing - Latest header: {}", stats.header_head.height).to_string()
|
||||
}
|
||||
if stats.awaiting_peers {
|
||||
"Waiting for peers".to_string()
|
||||
} else {
|
||||
"Running".to_string()
|
||||
match stats.sync_status {
|
||||
SyncStatus::NoSync => "Running".to_string(),
|
||||
SyncStatus::HeaderSync {
|
||||
current_height,
|
||||
highest_height,
|
||||
} => {
|
||||
let percent = if highest_height == 0 {
|
||||
0
|
||||
} else {
|
||||
current_height * 100 / highest_height
|
||||
};
|
||||
format!("Downloading headers: {}%, step 1/4", percent)
|
||||
}
|
||||
SyncStatus::TxHashsetDownload => {
|
||||
"Downloading chain state for fast sync, step 2/4".to_string()
|
||||
}
|
||||
SyncStatus::TxHashsetSetup => {
|
||||
"Preparing chain state for validation, step 3/4".to_string()
|
||||
}
|
||||
SyncStatus::TxHashsetValidation {
|
||||
kernels,
|
||||
kernel_total,
|
||||
rproofs,
|
||||
rproof_total,
|
||||
} => {
|
||||
// 10% of overall progress is attributed to kernel validation
|
||||
// 90% to range proofs (which are much longer)
|
||||
let mut percent = if kernel_total > 0 {
|
||||
kernels * 10 / kernel_total
|
||||
} else {
|
||||
0
|
||||
};
|
||||
percent += if rproof_total > 0 {
|
||||
rproofs * 90 / rproof_total
|
||||
} else {
|
||||
0
|
||||
};
|
||||
format!("Validating chain state: {}%, step 3/4", percent)
|
||||
}
|
||||
SyncStatus::TxHashsetSave => {
|
||||
"Finalizing chain state for fast sync, step 3/4".to_string()
|
||||
}
|
||||
SyncStatus::BodySync {
|
||||
current_height,
|
||||
highest_height,
|
||||
} => {
|
||||
let percent = if highest_height == 0 {
|
||||
0
|
||||
} else {
|
||||
current_height * 100 / highest_height
|
||||
};
|
||||
format!("Downloading blocks: {}%, step 4/4", percent)
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
/*let basic_mining_config_status = {
|
||||
|
||||
Reference in New Issue
Block a user