Added an option to save current node status to file.

This commit is contained in:
Revertron
2021-09-21 15:25:42 +02:00
parent c56fd4962b
commit 522a75d511
2 changed files with 26 additions and 8 deletions
+22 -2
View File
@@ -16,8 +16,8 @@ use simplelog::*;
use winapi::um::wincon::{AttachConsole, FreeConsole, ATTACH_PARENT_PROCESS}; use winapi::um::wincon::{AttachConsole, FreeConsole, ATTACH_PARENT_PROCESS};
extern crate lazy_static; extern crate lazy_static;
use std::fs::OpenOptions; use std::fs::{File, OpenOptions};
use std::io::{Seek, SeekFrom}; use std::io::{Seek, SeekFrom, Write};
use std::process::exit; use std::process::exit;
use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::atomic::{AtomicBool, Ordering};
@@ -56,6 +56,7 @@ fn main() {
opts.optflag("g", "generate", "Generate new config file. Generated config will be printed to console."); opts.optflag("g", "generate", "Generate new config file. Generated config will be printed to console.");
opts.optopt("k", "gen-key", "Generate new keys and save them to file.", "FILE"); opts.optopt("k", "gen-key", "Generate new keys and save them to file.", "FILE");
opts.optopt("l", "log", "Write log to file", "FILE"); opts.optopt("l", "log", "Write log to file", "FILE");
opts.optopt("s", "status", "Write status to file", "FILE");
opts.optopt("c", "config", "Path to config file", "FILE"); opts.optopt("c", "config", "Path to config file", "FILE");
opts.optopt("w", "work-dir", "Path to working directory", "DIRECTORY"); opts.optopt("w", "work-dir", "Path to working directory", "DIRECTORY");
opts.optopt("u", "upgrade", "Path to config file that you want to upgrade. Upgraded config will be printed to console.", "FILE"); opts.optopt("u", "upgrade", "Path to config file that you want to upgrade. Upgraded config will be printed to console.", "FILE");
@@ -108,6 +109,25 @@ fn main() {
}; };
setup_logger(&opt_matches); setup_logger(&opt_matches);
if let Some(status) = opt_matches.opt_str("s") {
register(move |_, event| {
match event {
Event::NetworkStatus { blocks, domains, keys, nodes } => {
match File::create(Path::new(&status)) {
Ok(mut f) => {
let data = format!("{{ \"blocks\":{}, \"domains\":{}, \"keys\":{}, \"nodes\":{} }}", blocks, domains, keys, nodes);
f.write_all(data.as_bytes()).expect("Error writing status file!");
let _ = f.flush();
}
Err(_) => { error!("Error writing status file!"); }
}
}
_ => {}
}
true
});
}
info!(target: LOG_TARGET_MAIN, "Starting ALFIS {}", env!("CARGO_PKG_VERSION")); info!(target: LOG_TARGET_MAIN, "Starting ALFIS {}", env!("CARGO_PKG_VERSION"));
let settings = Settings::load(&config_name).expect(&format!("Cannot load settings from {}!", &config_name)); let settings = Settings::load(&config_name).expect(&format!("Cannot load settings from {}!", &config_name));
+4 -6
View File
@@ -206,7 +206,7 @@ fn action_loaded(context: &Arc<Mutex<Context>>, web_view: &mut WebView<()>) {
0 => num_cpus::get(), 0 => num_cpus::get(),
_ => threads _ => threads
}; };
let status = Arc::new(Mutex::new(Status::new(threads))); let status = Arc::new(Mutex::new(UiStatus::new(threads)));
let context_copy = Arc::clone(&context); let context_copy = Arc::clone(&context);
let c = context.lock().unwrap(); let c = context.lock().unwrap();
@@ -600,22 +600,20 @@ pub enum Cmd {
Open { link: String } Open { link: String }
} }
struct Status { struct UiStatus {
pub mining: bool, pub mining: bool,
pub syncing: bool, pub syncing: bool,
pub synced_blocks: u64, pub synced_blocks: u64,
pub sync_height: u64, pub sync_height: u64,
pub nodes_connected: usize,
pub chain_height: u64,
pub max_diff: u32, pub max_diff: u32,
pub speed: Vec<u64> pub speed: Vec<u64>
} }
impl Status { impl UiStatus {
fn new(threads: usize) -> Self { fn new(threads: usize) -> Self {
let mut speed = Vec::with_capacity(threads); let mut speed = Vec::with_capacity(threads);
speed.resize(threads, 0u64); speed.resize(threads, 0u64);
Status { mining: false, syncing: false, synced_blocks: 0, sync_height: 0, nodes_connected: 0, chain_height: 0, max_diff: 0, speed } UiStatus { mining: false, syncing: false, synced_blocks: 0, sync_height: 0, max_diff: 0, speed }
} }
fn set_thread_speed(&mut self, thread: u32, speed: u64) { fn set_thread_speed(&mut self, thread: u32, speed: u64) {