diff --git a/src/constants.rs b/src/constants.rs index f7ea51b..76504c4 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -15,11 +15,11 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -pub const GUPAX: &str = concat!("Gupax ", env!("CARGO_PKG_VERSION")); pub const GUPAX_VERSION: &str = concat!("v", env!("CARGO_PKG_VERSION")); pub const P2POOL_VERSION: &str = "v2.4"; pub const XMRIG_VERSION: &str = "v6.18.0"; pub const COMMIT: &str = include_str!("../.git/refs/heads/main"); +pub const GUPAX_VERSION_UNDERSCORE: &str = concat!("Gupax_", env!("CARGO_PKG_VERSION")); // App frame resolution, [4:3] aspect ratio, [1.33:1] pub const APP_MIN_WIDTH: f32 = 640.0; @@ -126,6 +126,13 @@ pub const STATUS_P2POOL_HASHRATE: &str = "The total amount of hashrate your P2Po 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"; +//-- +pub const STATUS_XMRIG_UPTIME: &str = "How long XMRig has been online"; +pub const STATUS_XMRIG_CPU: &str = "The average CPU load of XMRig"; +pub const STATUS_XMRIG_HASHRATE: &str = "The average hashrate of XMRig"; +pub const STATUS_XMRIG_DIFFICULTY: &str = "The current difficulty of the job XMRig is working on"; +pub const STATUS_XMRIG_SHARES: &str = "The amount of accepted and rejected shares"; +pub const STATUS_XMRIG_POOL: &str = "The pool XMRig is currently mining to"; // Gupax pub const GUPAX_UPDATE: &str = "Check for updates on Gupax, P2Pool, and XMRig via GitHub's API and upgrade automatically"; diff --git a/src/helper.rs b/src/helper.rs index d273067..c52ee16 100644 --- a/src/helper.rs +++ b/src/helper.rs @@ -665,7 +665,7 @@ impl Helper { // [Simple] if state.simple { // Build the xmrig argument - let rig = if state.simple_rig.is_empty() { GUPAX.to_string() } else { state.simple_rig.clone() }; // Rig name + let rig = if state.simple_rig.is_empty() { GUPAX_VERSION_UNDERSCORE.to_string() } else { state.simple_rig.clone() }; // Rig name args.push("--url".to_string()); args.push("127.0.0.1:3333".to_string()); // Local P2Pool (the default) args.push("--threads".to_string()); args.push(state.current_threads.to_string()); // Threads args.push("--user".to_string()); args.push(rig.clone()); // Rig name @@ -869,7 +869,9 @@ impl Helper { // Send an HTTP API request if let Ok(priv_api) = PrivXmrigApi::request_xmrig_api(client.clone(), &api_ip_port).await { - PubXmrigApi::from_priv(&mut pub_api.lock().unwrap(), priv_api); + PubXmrigApi::update_from_priv(&pub_api, priv_api); + } else { + warn!("XMRig | Could not send HTTP API request to: {}", api_ip_port); } // Check if logs need resetting @@ -1483,9 +1485,9 @@ impl PubXmrigApi { } // Formats raw private data into ready-to-print human readable version. - fn from_priv(public: &mut Self, private: PrivXmrigApi) { + fn update_from_priv(public: &Arc>, private: PrivXmrigApi) { + let mut public = public.lock().unwrap(); *public = Self { - uptime: HumanTime::new(), worker_id: private.worker_id, resources: HumanNumber::from_load(private.resources.load_average), hashrate: HumanNumber::from_hashrate(private.hashrate.total), @@ -1493,7 +1495,7 @@ impl PubXmrigApi { diff: HumanNumber::from_u128(private.connection.diff), accepted: HumanNumber::from_u128(private.connection.accepted), rejected: HumanNumber::from_u128(private.connection.rejected), - ..std::mem::take(public) + ..std::mem::take(&mut *public) } } } diff --git a/src/main.rs b/src/main.rs index 4a934e0..a6e864b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -923,7 +923,7 @@ impl eframe::App for App { match self.error_state.buttons { StayQuit => { let mut text = "".to_string(); - if *self.update.lock().unwrap().updating.lock().unwrap() { text = format!("{}\nUpdate is in progress...!", text); } + if *self.update.lock().unwrap().updating.lock().unwrap() { text = format!("{}\nUpdate is in progress...! Quitting may cause file corruption!", text); } if self.p2pool.lock().unwrap().is_alive() { text = format!("{}\nP2Pool is online...!", text); } if self.xmrig.lock().unwrap().is_alive() { text = format!("{}\nXMRig is online...!", text); } ui.add_sized([width, height], Label::new("--- Are you sure you want to quit? ---")); diff --git a/src/status.rs b/src/status.rs index babcdfe..be2d4fc 100644 --- a/src/status.rs +++ b/src/status.rs @@ -44,7 +44,6 @@ pub fn show(sys: &Arc>, p2pool_api: &Arc>, xmrig_ ui.group(|ui| { ui.vertical(|ui| { 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())))).on_hover_text("Gupax is online"); - // 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(format!("{}", sys.gupax_uptime))); @@ -65,7 +64,6 @@ pub fn show(sys: &Arc>, p2pool_api: &Arc>, xmrig_ ui.set_enabled(p2pool_online); 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())))).on_hover_text("P2Pool is online").on_disabled_hover_text("P2Pool is offline"); - // Uptime let api = p2pool_api.lock().unwrap(); 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))); @@ -77,21 +75,33 @@ pub fn show(sys: &Arc>, p2pool_api: &Arc>, xmrig_ 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(RichText::new("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))); + drop(api); })}); // [XMRig] ui.group(|ui| { ui.vertical(|ui| { ui.set_enabled(xmrig_online); 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())))).on_hover_text("XMRig is online").on_disabled_hover_text("XMRig is offline"); - // Uptime - ui.add_sized([width, height], Label::new(RichText::new("Uptime").underline())); - ui.add_sized([width, height], Label::new(format!("{}", xmrig_api.lock().unwrap().uptime))); + let api = xmrig_api.lock().unwrap(); + ui.add_sized([width, height], Label::new(RichText::new("Uptime").underline().color(BONE))).on_hover_text(STATUS_XMRIG_UPTIME); + ui.add_sized([width, height], Label::new(format!("{}", api.uptime))); + ui.add_sized([width, height], Label::new(RichText::new("CPU Load Averages").underline().color(BONE))).on_hover_text(STATUS_XMRIG_CPU); + ui.add_sized([width, height], Label::new(format!("{}", api.resources))); + ui.add_sized([width, height], Label::new(RichText::new("Hashrate Averages").underline().color(BONE))).on_hover_text(STATUS_XMRIG_HASHRATE); + ui.add_sized([width, height], Label::new(format!("{}", api.hashrate))); + ui.add_sized([width, height], Label::new(RichText::new("Difficulty").underline().color(BONE))).on_hover_text(STATUS_XMRIG_DIFFICULTY); + ui.add_sized([width, height], Label::new(format!("{}", api.diff))); + ui.add_sized([width, height], Label::new(RichText::new("Shares").underline().color(BONE))).on_hover_text(STATUS_XMRIG_SHARES); + ui.add_sized([width, height], Label::new(format!("[Accepted: {}] [Rejected: {}]", api.accepted, api.rejected))); + ui.add_sized([width, height], Label::new(RichText::new("Pool").underline().color(BONE))).on_hover_text(STATUS_XMRIG_POOL); + ui.add_sized([width, height], Label::new(format!("{}", api.pool))); + drop(api); })}); }); }