log: date -> sec.milli since init

This commit is contained in:
hinto-janaiyo 2022-11-20 20:21:47 -05:00
parent 42c89fcdd2
commit 3b37ac7be3
No known key found for this signature in database
GPG key ID: B1C5A64B80691E45
5 changed files with 50 additions and 159 deletions

View file

@ -58,7 +58,7 @@ pub fn get_gupax_data_path() -> Result<PathBuf, TomlError> {
match dirs::data_dir() { match dirs::data_dir() {
Some(mut path) => { Some(mut path) => {
path.push(DIRECTORY); path.push(DIRECTORY);
info!("OS | Data path ... OK ... {}", path.display()); info!("OS | Data path ... {}", path.display());
create_gupax_dir(&path)?; create_gupax_dir(&path)?;
Ok(path) Ok(path)
}, },
@ -217,7 +217,7 @@ impl State {
info!("State | Creating new default..."); info!("State | Creating new default...");
let new = Self::new(); let new = Self::new();
let string = match toml::ser::to_string(&new) { let string = match toml::ser::to_string(&new) {
Ok(o) => { info!("State | Serialization ... OK"); o }, Ok(o) => o,
Err(e) => { error!("State | Couldn't serialize default file: {}", e); return Err(TomlError::Serialize(e)) }, Err(e) => { error!("State | Couldn't serialize default file: {}", e); return Err(TomlError::Serialize(e)) },
}; };
fs::write(&path, &string)?; fs::write(&path, &string)?;
@ -265,14 +265,6 @@ impl State {
//---------------------------------------------------------------------------------------------------- [Node] Impl //---------------------------------------------------------------------------------------------------- [Node] Impl
impl Node { impl Node {
pub fn new() -> Self {
Self {
ip: String::new(),
rpc: "18081".to_string(),
zmq: "18083".to_string(),
}
}
pub fn localhost() -> Self { pub fn localhost() -> Self {
Self { Self {
ip: "localhost".to_string(), ip: "localhost".to_string(),

View file

@ -262,6 +262,24 @@ impl Default for Tab {
} }
//---------------------------------------------------------------------------------------------------- [ErrorState] struct //---------------------------------------------------------------------------------------------------- [ErrorState] struct
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum ErrorButtons {
YesNo,
StayQuit,
ResetState,
ResetNode,
Okay,
Quit,
}
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum ErrorFerris {
Happy,
Oops,
Error,
Panic,
}
pub struct ErrorState { pub struct ErrorState {
error: bool, // Is there an error? error: bool, // Is there an error?
msg: String, // What message to display? msg: String, // What message to display?
@ -300,25 +318,6 @@ impl ErrorState {
} }
} }
//---------------------------------------------------------------------------------------------------- [ErrorButtons] enum
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum ErrorButtons {
YesNo,
StayQuit,
ResetState,
ResetNode,
Okay,
Quit,
}
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum ErrorFerris {
Happy,
Oops,
Error,
Panic,
}
//---------------------------------------------------------------------------------------------------- [Images] struct //---------------------------------------------------------------------------------------------------- [Images] struct
struct Images { struct Images {
banner: RetainedImage, banner: RetainedImage,
@ -394,13 +393,9 @@ fn init_text_styles(ctx: &egui::Context, width: f32) {
// ctx.set_style(style); // ctx.set_style(style);
//} //}
fn init_logger() { fn init_logger(now: Instant) {
// #[cfg(debug_assertions)]
let filter = LevelFilter::Info;
// #[cfg(not(debug_assertions))]
// let filter = LevelFilter::Warn;
use env_logger::fmt::Color; use env_logger::fmt::Color;
Builder::new().format(|buf, record| { Builder::new().format(move |buf, record| {
let level; let level;
let mut style = buf.style(); let mut style = buf.style();
match record.level() { match record.level() {
@ -414,12 +409,12 @@ fn init_logger() {
buf, buf,
"[{}] [{}] [{}:{}] {}", "[{}] [{}] [{}:{}] {}",
style.set_bold(true).value(level), style.set_bold(true).value(level),
buf.style().set_dimmed(true).value(chrono::Local::now().format("%F %T%.3f")), buf.style().set_dimmed(true).value(format!("{:.7}", now.elapsed().as_secs_f32())),
buf.style().set_dimmed(true).value(record.file().unwrap_or("???")), buf.style().set_dimmed(true).value(record.file().unwrap_or("???")),
buf.style().set_dimmed(true).value(record.line().unwrap_or(0)), buf.style().set_dimmed(true).value(record.line().unwrap_or(0)),
record.args(), record.args(),
) )
}).filter_level(filter).write_style(WriteStyle::Always).parse_default_env().format_timestamp_millis().init(); }).filter_level(LevelFilter::Info).write_style(WriteStyle::Always).parse_default_env().format_timestamp_millis().init();
info!("init_logger() ... OK"); info!("init_logger() ... OK");
} }
@ -471,7 +466,6 @@ fn init_auto(app: &App) {
} }
fn reset_state(path: &PathBuf) -> Result<(), TomlError> { fn reset_state(path: &PathBuf) -> Result<(), TomlError> {
info!("Resetting [state.toml]...");
match State::create_new(path) { match State::create_new(path) {
Ok(_) => { info!("Resetting [state.toml] ... OK"); Ok(()) }, Ok(_) => { info!("Resetting [state.toml] ... OK"); Ok(()) },
Err(e) => { error!("Resetting [state.toml] ... FAIL ... {}", e); Err(e) }, Err(e) => { error!("Resetting [state.toml] ... FAIL ... {}", e); Err(e) },
@ -479,7 +473,6 @@ fn reset_state(path: &PathBuf) -> Result<(), TomlError> {
} }
fn reset_nodes(path: &PathBuf) -> Result<(), TomlError> { fn reset_nodes(path: &PathBuf) -> Result<(), TomlError> {
info!("Resetting [node.toml]...");
match Node::create_new(path) { match Node::create_new(path) {
Ok(_) => { info!("Resetting [node.toml] ... OK"); Ok(()) }, Ok(_) => { info!("Resetting [node.toml] ... OK"); Ok(()) },
Err(e) => { error!("Resetting [node.toml] ... FAIL ... {}", e); Err(e) }, Err(e) => { error!("Resetting [node.toml] ... FAIL ... {}", e); Err(e) },
@ -489,11 +482,15 @@ fn reset_nodes(path: &PathBuf) -> Result<(), TomlError> {
fn reset(path: &PathBuf, state: &PathBuf, node: &PathBuf) { fn reset(path: &PathBuf, state: &PathBuf, node: &PathBuf) {
let mut code = 0; let mut code = 0;
// Attempt to remove directory first // Attempt to remove directory first
info!("OS data path ... {}", path.display());
match std::fs::remove_dir_all(path) { match std::fs::remove_dir_all(path) {
Ok(_) => info!("Removing OS data path ... OK"), Ok(_) => info!("Removing OS data path ... OK"),
Err(e) => { error!("Removing OS data path ... FAIL ... {}", e); code = 1; }, Err(e) => { error!("Removing OS data path ... FAIL ... {}", e); code = 1; },
} }
// Recreate
match create_gupax_dir(path) {
Ok(_) => (),
Err(_) => code = 1,
}
match reset_state(state) { match reset_state(state) {
Ok(_) => (), Ok(_) => (),
Err(_) => code = 1, Err(_) => code = 1,
@ -538,8 +535,8 @@ fn parse_args<S: Into<String>>(mut app: App, panic: S) -> App {
match arg.as_str() { match arg.as_str() {
"--state" => { info!("Printing state..."); print_disk_file(&app.state_path); } "--state" => { info!("Printing state..."); print_disk_file(&app.state_path); }
"--nodes" => { info!("Printing node list..."); print_disk_file(&app.node_path); } "--nodes" => { info!("Printing node list..."); print_disk_file(&app.node_path); }
"--reset-state" => if let Ok(()) = reset_state(&app.state_path) { exit(0) } else { exit(1) }, "--reset-state" => if let Ok(()) = reset_state(&app.state_path) { println!("\nState reset ... OK"); exit(0); } else { println!("\nState reset ... FAIL"); exit(1) },
"--reset-nodes" => if let Ok(()) = reset_nodes(&app.node_path) { exit(0) } else { exit(1) }, "--reset-nodes" => if let Ok(()) = reset_nodes(&app.node_path) { println!("\nNode reset ... OK"); exit(0) } else { println!("\nNode reset ... FAIL"); exit(1) },
"--reset-all" => reset(&app.os_data_path, &app.state_path, &app.node_path), "--reset-all" => reset(&app.os_data_path, &app.state_path, &app.node_path),
"--no-startup" => app.no_startup = true, "--no-startup" => app.no_startup = true,
_ => { eprintln!("[Gupax error] Invalid option: [{}]\nFor help, use: [--help]", arg); exit(1); }, _ => { eprintln!("[Gupax error] Invalid option: [{}]\nFor help, use: [--help]", arg); exit(1); },
@ -590,60 +587,10 @@ fn print_disk_file(path: &PathBuf) {
} }
} }
//---------------------------------------------------------------------------------------------------- [App] frame for [Panic] situations
fn panic_main(error: String) {
error!("{}", error);
let options = Panic::options();
let name = format!("Gupax {}", GUPAX_VERSION);
eframe::run_native(&name, options, Box::new(|cc| Box::new(Panic::new(cc, error))),);
exit(1);
}
struct Panic { error_msg: String, }
impl Panic {
fn options() -> NativeOptions {
let mut options = eframe::NativeOptions::default();
let frame = Option::from(Vec2::new(1280.0, 720.0));
options.min_window_size = frame;
options.max_window_size = frame;
options.initial_window_size = frame;
options.follow_system_theme = false;
options.default_theme = eframe::Theme::Dark;
let icon = image::load_from_memory(BYTES_ICON).expect("Failed to read icon bytes").to_rgba8();
let (icon_width, icon_height) = icon.dimensions();
options.icon_data = Some(eframe::IconData {
rgba: icon.into_raw(),
width: icon_width,
height: icon_height,
});
info!("Panic::options() ... OK");
options
}
fn new(cc: &eframe::CreationContext<'_>, error_msg: String) -> Self {
let resolution = cc.integration_info.window_info.size;
init_text_styles(&cc.egui_ctx, resolution[0] as f32);
Self { error_msg }
}
}
impl eframe::App for Panic {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
egui::CentralPanel::default().show(ctx, |ui| {
let width = ui.available_width();
let height = ui.available_height();
init_text_styles(ctx, width);
ui.add_sized([width, height/8.0], Label::new("Gupax has encountered a fatal error:"));
ui.add_sized([width, height/8.0], Label::new(&self.error_msg));
ui.add_sized([width, height/3.0], Label::new("Please report to: https://github.com/hinto-janaiyo/gupax/issues"));
ui.add_sized([width, height/3.0], egui::Button::new("Quit")).clicked() && exit(1)
});
}
}
//---------------------------------------------------------------------------------------------------- Main [App] frame //---------------------------------------------------------------------------------------------------- Main [App] frame
fn main() { fn main() {
let now = Instant::now(); let now = Instant::now();
init_logger(); init_logger(now);
let options = init_options(); let options = init_options();
match clean_dir() { match clean_dir() {
Ok(_) => info!("Temporary folder cleanup ... OK"), Ok(_) => info!("Temporary folder cleanup ... OK"),
@ -652,7 +599,7 @@ fn main() {
let mut app = App::new(); let mut app = App::new();
app.now = now; app.now = now;
init_auto(&app); init_auto(&app);
info!("Init ... DONE ... Took [{}] seconds", now.elapsed().as_secs_f32()); info!("Init ... DONE");
eframe::run_native(&app.name_version.clone(), options, Box::new(|cc| Box::new(App::cc(cc, app))),); eframe::run_native(&app.name_version.clone(), options, Box::new(|cc| Box::new(App::cc(cc, app))),);
} }

View file

@ -18,14 +18,14 @@
use crate::State; use crate::State;
use serde::{Serialize,Deserialize}; use serde::{Serialize,Deserialize};
use std::time::{Instant,Duration}; use std::time::{Instant,Duration};
use std::collections::HashMap;
use std::sync::{Arc,Mutex}; use std::sync::{Arc,Mutex};
use egui::Color32; use egui::Color32;
use log::*; use log::*;
//use hyper::{ use hyper::{
// Client,Body,Request, client::HttpConnector,
// header::{HeaderValue,LOCATION}, Client,Body,Request,
//}; header::{HeaderValue,LOCATION},
};
//---------------------------------------------------------------------------------------------------- Node list //---------------------------------------------------------------------------------------------------- Node list
// Community Monerod nodes. All of these have ZMQ on 18083. // Community Monerod nodes. All of these have ZMQ on 18083.
@ -191,7 +191,7 @@ impl Ping {
} }
//---------------------------------------------------------------------------------------------------- Main Ping function //---------------------------------------------------------------------------------------------------- Main Ping function
// Intermediate thread for spawning thread // Intermediate function for spawning thread
pub fn spawn_thread(ping: &Arc<Mutex<Self>>, og: &Arc<Mutex<State>>) { pub fn spawn_thread(ping: &Arc<Mutex<Self>>, og: &Arc<Mutex<State>>) {
let ping = Arc::clone(&ping); let ping = Arc::clone(&ping);
let og = Arc::clone(og); let og = Arc::clone(og);
@ -239,8 +239,8 @@ impl Ping {
// Create HTTP client // Create HTTP client
let info = format!("{}", "Creating HTTP Client"); let info = format!("{}", "Creating HTTP Client");
ping.lock().unwrap().msg = info; ping.lock().unwrap().msg = info;
let client: hyper::client::Client<hyper::client::HttpConnector> = hyper::Client::builder() let client: Client<HttpConnector> = Client::builder()
.build(hyper::client::HttpConnector::new()); .build(HttpConnector::new());
// Random User Agent // Random User Agent
let rand_user_agent = crate::Pkg::get_user_agent(); let rand_user_agent = crate::Pkg::get_user_agent();
@ -252,7 +252,7 @@ impl Ping {
let client = client.clone(); let client = client.clone();
let ping = Arc::clone(&ping); let ping = Arc::clone(&ping);
let node_vec = Arc::clone(&node_vec); let node_vec = Arc::clone(&node_vec);
let request = hyper::Request::builder() let request = Request::builder()
.method("POST") .method("POST")
.uri("http://".to_string() + ip + "/json_rpc") .uri("http://".to_string() + ip + "/json_rpc")
.header("User-Agent", rand_user_agent) .header("User-Agent", rand_user_agent)
@ -282,7 +282,7 @@ impl Ping {
Ok(()) Ok(())
} }
async fn response(client: hyper::client::Client<hyper::client::HttpConnector>, request: hyper::Request<hyper::Body>, ip: &'static str, ping: Arc<Mutex<Self>>, percent: f32, node_vec: Arc<Mutex<Vec<NodeData>>>) { async fn response(client: Client<HttpConnector>, request: Request<Body>, ip: &'static str, ping: Arc<Mutex<Self>>, percent: f32, node_vec: Arc<Mutex<Vec<NodeData>>>) {
let id = ip_to_enum(ip); let id = ip_to_enum(ip);
let now = Instant::now(); let now = Instant::now();
let ms; let ms;

View file

@ -26,7 +26,6 @@ use egui::{
TextStyle::*, TextStyle::*,
}; };
use std::sync::{Arc,Mutex}; use std::sync::{Arc,Mutex};
use std::thread;
use regex::Regex; use regex::Regex;
use log::*; use log::*;

View file

@ -119,56 +119,12 @@ const XMRIG_BINARY: &'static str = "xmrig";
// Some fake Curl/Wget user-agents because GitHub API requires one and a Tor browser // Some fake Curl/Wget user-agents because GitHub API requires one and a Tor browser
// user-agent might be fingerprintable without all the associated headers. // user-agent might be fingerprintable without all the associated headers.
const FAKE_USER_AGENT: [&'static str; 50] = [ const FAKE_USER_AGENT: [&'static str; 50] = [
"Wget/1.16.3", "Wget/1.16.3","Wget/1.17","Wget/1.17.1","Wget/1.18","Wget/1.18","Wget/1.19","Wget/1.19.1","Wget/1.19.2","Wget/1.19.3","Wget/1.19.4",
"Wget/1.17", "Wget/1.19.5","Wget/1.20","Wget/1.20.1","Wget/1.20.2","Wget/1.20.3","Wget/1.21","Wget/1.21.1","Wget/1.21.2","Wget/1.21.3",
"Wget/1.17.1", "curl/7.64.1","curl/7.65.0","curl/7.65.1","curl/7.65.2","curl/7.65.3","curl/7.66.0","curl/7.67.0","curl/7.68.0","curl/7.69.0",
"Wget/1.18", "curl/7.69.1","curl/7.70.0","curl/7.70.1","curl/7.71.0","curl/7.71.1","curl/7.72.0","curl/7.73.0","curl/7.74.0","curl/7.75.0",
"Wget/1.18", "curl/7.76.0","curl/7.76.1","curl/7.77.0","curl/7.78.0","curl/7.79.0","curl/7.79.1","curl/7.80.0","curl/7.81.0","curl/7.82.0",
"Wget/1.19", "curl/7.83.0","curl/7.83.1","curl/7.84.0","curl/7.85.0",
"Wget/1.19.1",
"Wget/1.19.2",
"Wget/1.19.3",
"Wget/1.19.4",
"Wget/1.19.5",
"Wget/1.20",
"Wget/1.20.1",
"Wget/1.20.2",
"Wget/1.20.3",
"Wget/1.21",
"Wget/1.21.1",
"Wget/1.21.2",
"Wget/1.21.3",
"curl/7.64.1",
"curl/7.65.0",
"curl/7.65.1",
"curl/7.65.2",
"curl/7.65.3",
"curl/7.66.0",
"curl/7.67.0",
"curl/7.68.0",
"curl/7.69.0",
"curl/7.69.1",
"curl/7.70.0",
"curl/7.70.1",
"curl/7.71.0",
"curl/7.71.1",
"curl/7.72.0",
"curl/7.73.0",
"curl/7.74.0",
"curl/7.75.0",
"curl/7.76.0",
"curl/7.76.1",
"curl/7.77.0",
"curl/7.78.0",
"curl/7.79.0",
"curl/7.79.1",
"curl/7.80.0",
"curl/7.81.0",
"curl/7.82.0",
"curl/7.83.0",
"curl/7.83.1",
"curl/7.84.0",
"curl/7.85.0",
]; ];
const MSG_NONE: &'static str = "No update in progress"; const MSG_NONE: &'static str = "No update in progress";
@ -351,8 +307,6 @@ impl Update {
std::fs::create_dir(&tmp_dir)?; std::fs::create_dir(&tmp_dir)?;
// Make Pkg vector // Make Pkg vector
let prog = update.lock().unwrap().prog.clone();
let msg = update.lock().unwrap().msg.clone();
let mut vec = vec![ let mut vec = vec![
Pkg::new(Gupax), Pkg::new(Gupax),
Pkg::new(P2pool), Pkg::new(P2pool),
@ -369,12 +323,11 @@ impl Update {
} else { } else {
*update.lock().unwrap().msg.lock().unwrap() = MSG_HTTPS.to_string() *update.lock().unwrap().msg.lock().unwrap() = MSG_HTTPS.to_string()
} }
let prog = *update.lock().unwrap().prog.lock().unwrap();
info!("Update | {}", update.lock().unwrap().msg.lock().unwrap()); info!("Update | {}", update.lock().unwrap().msg.lock().unwrap());
let tor = update.lock().unwrap().tor; let tor = update.lock().unwrap().tor;
let mut client = Self::get_client(tor)?; let mut client = Self::get_client(tor)?;
*update.lock().unwrap().prog.lock().unwrap() += 5.0; *update.lock().unwrap().prog.lock().unwrap() += 5.0;
info!("Update | Init ... OK ... {}%", prog); info!("Update | Init ... OK ... {}%", update.lock().unwrap().prog.lock().unwrap());
//---------------------------------------------------------------------------------------------------- Metadata //---------------------------------------------------------------------------------------------------- Metadata
*update.lock().unwrap().msg.lock().unwrap() = MSG_METADATA.to_string(); *update.lock().unwrap().msg.lock().unwrap() = MSG_METADATA.to_string();