helper/sudo: small p2pool api fixes, don't allow ESC when [testing]

This commit is contained in:
hinto-janaiyo 2022-12-11 20:43:34 -05:00
parent ede7bcb0a8
commit e2f6d90476
No known key found for this signature in database
GPG key ID: B1C5A64B80691E45
5 changed files with 66 additions and 22 deletions

View file

@ -16,10 +16,10 @@ Gupax (*guh-picks*) is a (Windows|macOS|Linux) GUI for mining [**Monero**](https
- [Advanced](#Advanced) - [Advanced](#Advanced)
- [Verifying](#Verifying) - [Verifying](#Verifying)
- [Command Line](#Command-Line) - [Command Line](#Command-Line)
- [Tor/Arti](#Tor-Arti) - [Tor/Arti](#TorArti)
- [Logs](#Logs) - [Logs](#Logs)
- [Disk](#Disk) - [Disk](#Disk)
- [Swapping P2Pool/XMRig](#Swapping-P2Pool-XMRig) - [Swapping P2Pool/XMRig](#Swapping-P2PoolXMRig)
- [Gupax](#Gupax) - [Gupax](#Gupax)
- [P2Pool](#P2Pool) - [P2Pool](#P2Pool)
- [XMRig](#XMRig) - [XMRig](#XMRig)
@ -109,6 +109,10 @@ With Monero GUI managing the Monero node on one side and Gupax managing P2Pool/X
--- ---
### Swapping P2Pool/XMRig
---
### Gupax ### Gupax
--- ---

View file

@ -118,6 +118,14 @@ pub const STATUS_GUPAX_MEMORY_USAGE: &str = "How much memory Gupax is currently
pub const STATUS_GUPAX_SYSTEM_CPU_USAGE: &str = "How much CPU your entire system is currently using. This accounts for all your threads (it is out of 100%)"; pub const STATUS_GUPAX_SYSTEM_CPU_USAGE: &str = "How much CPU your entire system is currently using. This accounts for all your threads (it is out of 100%)";
pub const STATUS_GUPAX_SYSTEM_MEMORY: &str = "How much memory your entire system has (including swap) and is currently using in Gigabytes"; pub const STATUS_GUPAX_SYSTEM_MEMORY: &str = "How much memory your entire system has (including swap) and is currently using in Gigabytes";
pub const STATUS_GUPAX_SYSTEM_CPU_MODEL: &str = "The detected model of your system's CPU and its current frequency"; pub const STATUS_GUPAX_SYSTEM_CPU_MODEL: &str = "The detected model of your system's CPU and its current frequency";
//--
pub const STATUS_P2POOL_UPTIME: &str = "How long P2Pool has been online";
pub const STATUS_P2POOL_PAYOUTS: &str = "The total amount of payouts received and an extrapolated estimate of how many you will receive. Warning: these stats will be quite inaccurate if your P2Pool hasn't been running for a long time!";
pub const STATUS_P2POOL_XMR: &str = "The total amount of XMR mined via P2Pool and an extrapolated estimate of how many you will mine in the future. Warning: these stats will be quite inaccurate if your P2Pool hasn't been running for a long time!";
pub const STATUS_P2POOL_HASHRATE: &str = "The total amount of hashrate your P2Pool has pointed at it in 15 minute, 1 hour, and 24 hour averages";
pub const STATUS_P2POOL_SHARES: &str = "The total amount of shares found on P2Pool";
pub const STATUS_P2POOL_EFFORT: &str = "The average amount of effort needed to find a share, and the current effort";
pub const STATUS_P2POOL_CONNECTIONS: &str = "The total amount of miner connections on this P2Pool";
// Gupax // Gupax
pub const GUPAX_UPDATE: &str = "Check for updates on Gupax, P2Pool, and XMRig via GitHub's API and upgrade automatically"; pub const GUPAX_UPDATE: &str = "Check for updates on Gupax, P2Pool, and XMRig via GitHub's API and upgrade automatically";

View file

@ -453,6 +453,20 @@ impl Helper {
path.pop(); path.pop();
path.push(P2POOL_API_PATH); path.push(P2POOL_API_PATH);
// Attempt to remove stale API file
match std::fs::remove_file(&path) {
Ok(_) => info!("P2Pool | Attempting to remove stale API file ... OK"),
Err(e) => warn!("P2Pool | Attempting to remove stale API file ... FAIL ... {}", e),
}
// Attempt to create a default empty one.
use std::io::Write;
if let Ok(_) = std::fs::File::create(&path) {
let text = r#"{"hashrate_15m":0,"hashrate_1h":0,"hashrate_24h":0,"shares_found":0,"average_effort":0.0,"current_effort":0.0,"connections":0}"#;
match std::fs::write(&path, text) {
Ok(_) => info!("P2Pool | Creating default empty API file ... OK"),
Err(e) => warn!("P2Pool | Creating default empty API file ... FAIL ... {}", e),
}
}
let regex = P2poolRegex::new(); let regex = P2poolRegex::new();
let start = process.lock().unwrap().start; let start = process.lock().unwrap().start;
@ -528,7 +542,7 @@ impl Helper {
// Deserialize // Deserialize
if let Ok(s) = PrivP2poolApi::str_to_priv_p2pool_api(&string) { if let Ok(s) = PrivP2poolApi::str_to_priv_p2pool_api(&string) {
// Update the structs. // Update the structs.
PubP2poolApi::update_from_priv(&pub_api, &priv_api); PubP2poolApi::update_from_priv(&pub_api, s);
} }
} }
@ -1319,9 +1333,8 @@ impl PubP2poolApi {
} }
// Mutate [PubP2poolApi] with data from a [PrivP2poolApi] and the process output. // Mutate [PubP2poolApi] with data from a [PrivP2poolApi] and the process output.
fn update_from_priv(public: &Arc<Mutex<Self>>, private: &Arc<Mutex<PrivP2poolApi>>) { fn update_from_priv(public: &Arc<Mutex<Self>>, private: PrivP2poolApi) {
// priv -> pub conversion // priv -> pub conversion
let private = private.lock().unwrap();
let mut public = public.lock().unwrap(); let mut public = public.lock().unwrap();
*public = Self { *public = Self {
hashrate_15m: HumanNumber::from_u128(private.hashrate_15m), hashrate_15m: HumanNumber::from_u128(private.hashrate_15m),
@ -1331,8 +1344,8 @@ impl PubP2poolApi {
average_effort: HumanNumber::to_percent(private.average_effort), average_effort: HumanNumber::to_percent(private.average_effort),
current_effort: HumanNumber::to_percent(private.current_effort), current_effort: HumanNumber::to_percent(private.current_effort),
connections: HumanNumber::from_u16(private.connections), connections: HumanNumber::from_u16(private.connections),
..public.clone() ..std::mem::take(&mut *public)
} };
} }
// Essentially greps the output for [x.xxxxxxxxxxxx XMR] where x = a number. // Essentially greps the output for [x.xxxxxxxxxxxx XMR] where x = a number.

View file

@ -1041,7 +1041,7 @@ impl eframe::App for App {
let color = if hide { BLACK } else { BRIGHT_YELLOW }; let color = if hide { BLACK } else { BRIGHT_YELLOW };
if ui.add_sized([box_width, height], Button::new(RichText::new("👁").color(color))).on_hover_text(PASSWORD_HIDE).clicked() { sudo.hide = !sudo.hide; } if ui.add_sized([box_width, height], Button::new(RichText::new("👁").color(color))).on_hover_text(PASSWORD_HIDE).clicked() { sudo.hide = !sudo.hide; }
}); });
if esc || ui.add_sized([width, height*4.0], Button::new("Leave")).clicked() { self.error_state.reset(); }; if (esc && !sudo.testing) || ui.add_sized([width, height*4.0], Button::new("Leave")).clicked() { self.error_state.reset(); };
// If [test_sudo()] finished, reset error state. // If [test_sudo()] finished, reset error state.
if sudo.success { if sudo.success {
self.error_state.reset(); self.error_state.reset();
@ -1336,7 +1336,7 @@ impl eframe::App for App {
}); });
} }
Tab::Status => { Tab::Status => {
Status::show(&self.pub_sys, &self.p2pool_api, &self.xmrig_api, &self.p2pool_img, &self.xmrig_img, self.width, self.height, ctx, ui); Status::show(&self.pub_sys, &self.p2pool_api, &self.xmrig_api, &self.p2pool_img, &self.xmrig_img, self.p2pool.lock().unwrap().is_alive(), self.xmrig.lock().unwrap().is_alive(), self.width, self.height, ctx, ui);
} }
Tab::Gupax => { Tab::Gupax => {
Gupax::show(&mut self.state.gupax, &self.og, &self.state_path, &self.update, &self.file_window, &mut self.error_state, &self.restart, self.width, self.height, frame, ctx, ui); Gupax::show(&mut self.state.gupax, &self.og, &self.state_path, &self.update, &self.file_window, &mut self.error_state, &self.restart, self.width, self.height, frame, ctx, ui);

View file

@ -35,41 +35,60 @@ use egui::{
pub struct Status {} pub struct Status {}
impl Status { impl Status {
pub fn show(sys: &Arc<Mutex<Sys>>, p2pool_api: &Arc<Mutex<PubP2poolApi>>, xmrig_api: &Arc<Mutex<PubXmrigApi>>, p2pool_img: &Arc<Mutex<ImgP2pool>>, xmrig_img: &Arc<Mutex<ImgXmrig>>, width: f32, height: f32, ctx: &egui::Context, ui: &mut egui::Ui) { pub fn show(sys: &Arc<Mutex<Sys>>, p2pool_api: &Arc<Mutex<PubP2poolApi>>, xmrig_api: &Arc<Mutex<PubXmrigApi>>, p2pool_img: &Arc<Mutex<ImgP2pool>>, xmrig_img: &Arc<Mutex<ImgXmrig>>, p2pool_online: bool, xmrig_online: bool, width: f32, height: f32, ctx: &egui::Context, ui: &mut egui::Ui) {
let width = (width/3.0)-(SPACE*1.666); let width = (width/3.0)-(SPACE*1.666);
let min_height = height/1.14; let min_height = height/1.14;
let height = height/20.0; let height = height/25.0;
ui.horizontal(|ui| { ui.horizontal(|ui| {
// [Gupax] // [Gupax]
ui.group(|ui| { ui.vertical(|ui| { ui.group(|ui| { ui.vertical(|ui| {
ui.set_min_height(min_height); ui.set_min_height(min_height);
ui.add_sized([width, height*2.0], Label::new(RichText::new("[Gupax]").color(LIGHT_GRAY).text_style(TextStyle::Name("MonospaceLarge".into())))); ui.add_sized([width, height*2.0], Label::new(RichText::new("[Gupax]").color(LIGHT_GRAY).text_style(TextStyle::Name("MonospaceLarge".into())))).on_hover_text("Gupax is online");
// Uptime // Uptime
let sys = sys.lock().unwrap();
ui.add_sized([width, height], Label::new(RichText::new("Uptime").underline().color(BONE))).on_hover_text(STATUS_GUPAX_UPTIME); ui.add_sized([width, height], Label::new(RichText::new("Uptime").underline().color(BONE))).on_hover_text(STATUS_GUPAX_UPTIME);
ui.add_sized([width, height], Label::new(format!("{}", sys.lock().unwrap().gupax_uptime))); ui.add_sized([width, height], Label::new(format!("{}", sys.gupax_uptime)));
ui.add_sized([width, height], Label::new(RichText::new("Gupax CPU").underline().color(BONE))).on_hover_text(STATUS_GUPAX_CPU_USAGE); ui.add_sized([width, height], Label::new(RichText::new("Gupax CPU").underline().color(BONE))).on_hover_text(STATUS_GUPAX_CPU_USAGE);
ui.add_sized([width, height], Label::new(format!("{}", sys.lock().unwrap().gupax_cpu_usage))); ui.add_sized([width, height], Label::new(format!("{}", sys.gupax_cpu_usage)));
ui.add_sized([width, height], Label::new(RichText::new("Gupax Memory").underline().color(BONE))).on_hover_text(STATUS_GUPAX_MEMORY_USAGE); ui.add_sized([width, height], Label::new(RichText::new("Gupax Memory").underline().color(BONE))).on_hover_text(STATUS_GUPAX_MEMORY_USAGE);
ui.add_sized([width, height], Label::new(format!("{}", sys.lock().unwrap().gupax_memory_used_mb))); ui.add_sized([width, height], Label::new(format!("{}", sys.gupax_memory_used_mb)));
ui.add_sized([width, height], Label::new(RichText::new("System CPU").underline().color(BONE))).on_hover_text(STATUS_GUPAX_SYSTEM_CPU_USAGE); ui.add_sized([width, height], Label::new(RichText::new("System CPU").underline().color(BONE))).on_hover_text(STATUS_GUPAX_SYSTEM_CPU_USAGE);
ui.add_sized([width, height], Label::new(format!("{}", sys.lock().unwrap().system_cpu_usage))); ui.add_sized([width, height], Label::new(format!("{}", sys.system_cpu_usage)));
ui.add_sized([width, height], Label::new(RichText::new("System Memory").underline().color(BONE))).on_hover_text(STATUS_GUPAX_SYSTEM_MEMORY); ui.add_sized([width, height], Label::new(RichText::new("System Memory").underline().color(BONE))).on_hover_text(STATUS_GUPAX_SYSTEM_MEMORY);
ui.add_sized([width, height], Label::new(format!("{}", sys.lock().unwrap().system_memory))); ui.add_sized([width, height], Label::new(format!("{}", sys.system_memory)));
ui.add_sized([width, height], Label::new(RichText::new("System CPU Model").underline().color(BONE))).on_hover_text(STATUS_GUPAX_SYSTEM_CPU_MODEL); ui.add_sized([width, height], Label::new(RichText::new("System CPU Model").underline().color(BONE))).on_hover_text(STATUS_GUPAX_SYSTEM_CPU_MODEL);
ui.add_sized([width, height], Label::new(format!("{}", sys.lock().unwrap().system_cpu_model))); ui.add_sized([width, height], Label::new(format!("{}", sys.system_cpu_model)));
drop(sys);
})}); })});
// [P2Pool] // [P2Pool]
ui.group(|ui| { ui.vertical(|ui| { ui.group(|ui| { ui.vertical(|ui| {
ui.set_enabled(p2pool_online);
ui.set_min_height(min_height); ui.set_min_height(min_height);
ui.add_sized([width, height*2.0], Label::new(RichText::new("[P2Pool]").color(LIGHT_GRAY).text_style(TextStyle::Name("MonospaceLarge".into())))); ui.add_sized([width, height*2.0], Label::new(RichText::new("[P2Pool]").color(LIGHT_GRAY).text_style(TextStyle::Name("MonospaceLarge".into())))).on_hover_text("P2Pool is online").on_disabled_hover_text("P2Pool is offline");
// Uptime // Uptime
ui.add_sized([width, height], Label::new(RichText::new("Uptime").underline())); let api = p2pool_api.lock().unwrap();
ui.add_sized([width, height], Label::new(format!("{}", p2pool_api.lock().unwrap().uptime))); ui.add_sized([width, height], Label::new(RichText::new("Uptime").underline().color(BONE))).on_hover_text(STATUS_P2POOL_UPTIME);
ui.add_sized([width, height], Label::new(format!("{}", api.uptime)));
ui.add_sized([width, height], Label::new(RichText::new("Shares Found").underline().color(BONE))).on_hover_text(STATUS_P2POOL_SHARES);
ui.add_sized([width, height], Label::new(format!("{}", api.shares_found)));
ui.add_sized([width, height], Label::new(RichText::new("Payouts").underline().color(BONE))).on_hover_text(STATUS_P2POOL_PAYOUTS);
ui.add_sized([width, height], Label::new(format!("Total: {}", api.payouts)));
ui.add_sized([width, height], Label::new(format!("[{}/hour] [{}/day] [{}/month]", api.payouts_hour, api.payouts_day, api.payouts_month)));
ui.add_sized([width, height], Label::new(RichText::new("XMR Mined").underline().color(BONE))).on_hover_text(STATUS_P2POOL_XMR);
ui.add_sized([width, height], Label::new(format!("Total: {} XMR", api.xmr)));
ui.add_sized([width, height], Label::new(format!("[{}/hour] [{}/day] [{}/month]", api.xmr_hour, api.xmr_day, api.xmr_month)));
ui.add_sized([width, height], Label::new(RichText::new("P2Pool Hashrate [15m/1h/24h]").underline().color(BONE))).on_hover_text(STATUS_P2POOL_HASHRATE);
ui.add_sized([width, height], Label::new(format!("[{} H/s] [{} H/s] [{} H/s]", api.hashrate_15m, api.hashrate_1h, api.hashrate_24h)));
ui.add_sized([width, height], Label::new(RichText::new("Miners Connected").underline().color(BONE))).on_hover_text(STATUS_P2POOL_CONNECTIONS);
ui.add_sized([width, height], Label::new(format!("{}", api.connections)));
ui.add_sized([width, height], Label::new(RichText::new("Effort").underline().color(BONE))).on_hover_text(STATUS_P2POOL_EFFORT);
ui.add_sized([width, height], Label::new(format!("[Average: {}] [Current: {}]", api.average_effort, api.current_effort)));
})}); })});
// [XMRig] // [XMRig]
ui.group(|ui| { ui.vertical(|ui| { ui.group(|ui| { ui.vertical(|ui| {
ui.set_enabled(xmrig_online);
ui.set_min_height(min_height); ui.set_min_height(min_height);
ui.add_sized([width, height*2.0], Label::new(RichText::new("[XMRig]").color(LIGHT_GRAY).text_style(TextStyle::Name("MonospaceLarge".into())))); ui.add_sized([width, height*2.0], Label::new(RichText::new("[XMRig]").color(LIGHT_GRAY).text_style(TextStyle::Name("MonospaceLarge".into())))).on_hover_text("XMRig is online").on_disabled_hover_text("XMRig is offline");
// Uptime // Uptime
ui.add_sized([width, height], Label::new(RichText::new("Uptime").underline())); ui.add_sized([width, height], Label::new(RichText::new("Uptime").underline()));
ui.add_sized([width, height], Label::new(format!("{}", xmrig_api.lock().unwrap().uptime))); ui.add_sized([width, height], Label::new(format!("{}", xmrig_api.lock().unwrap().uptime)));