diff --git a/src/app/panels/middle/status/processes.rs b/src/app/panels/middle/status/processes.rs index 28b3350..fe0da3c 100644 --- a/src/app/panels/middle/status/processes.rs +++ b/src/app/panels/middle/status/processes.rs @@ -1,3 +1,4 @@ +use egui::Ui; use std::sync::{Arc, Mutex}; use crate::disk::state::Status; @@ -31,273 +32,317 @@ impl Status { let height = height / 25.0; ui.horizontal(|ui| { // [Gupax] - ui.group(|ui| { - ui.vertical(|ui| { - debug!("Status Tab | Rendering [Gupax]"); - ui.set_min_height(min_height); - ui.add_sized( - [width, height], - Label::new( - RichText::new("[Gupax]") - .color(LIGHT_GRAY) - .text_style(TextStyle::Name("MonospaceLarge".into())), - ), - ) - .on_hover_text("Gupax is online"); - let sys = lock!(sys); - 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(sys.gupax_uptime.to_string())); - 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(sys.gupax_cpu_usage.to_string())); - 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(sys.gupax_memory_used_mb.to_string()), - ); - 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(sys.system_cpu_usage.to_string()), - ); - 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(sys.system_memory.to_string())); - 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(sys.system_cpu_model.to_string()), - ); - drop(sys); - }) - }); + gupax(ui, min_height, width, height, sys); // [P2Pool] - ui.group(|ui| { - ui.vertical(|ui| { - debug!("Status Tab | Rendering [P2Pool]"); - ui.set_enabled(p2pool_alive); - ui.set_min_height(min_height); - ui.add_sized( - [width, height], - 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"); - ui.style_mut().override_text_style = Some(Name("MonospaceSmall".into())); - let height = height / 1.4; - let api = lock!(p2pool_api); - 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!( - "[{:.7}/hour]\n[{:.7}/day]\n[{:.7}/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: {:.13} XMR", api.xmr)), - ); - ui.add_sized( - [width, height], - Label::new(format!( - "[{:.7}/hour]\n[{:.7}/day]\n[{:.7}/month]", - api.xmr_hour, api.xmr_day, api.xmr_month - )), - ); - 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 - )), - ); - let img = lock!(p2pool_img); - ui.add_sized( - [width, height], - Label::new(RichText::new("Monero Node").underline().color(BONE)), - ) - .on_hover_text(STATUS_P2POOL_MONERO_NODE); - ui.add_sized( - [width, height], - Label::new(format!( - "[IP: {}]\n[RPC: {}] [ZMQ: {}]", - &img.host, &img.rpc, &img.zmq - )), - ); - ui.add_sized( - [width, height], - Label::new(RichText::new("Sidechain").underline().color(BONE)), - ) - .on_hover_text(STATUS_P2POOL_POOL); - ui.add_sized([width, height], Label::new(&img.mini)); - ui.add_sized( - [width, height], - Label::new(RichText::new("Address").underline().color(BONE)), - ) - .on_hover_text(STATUS_P2POOL_ADDRESS); - ui.add_sized([width, height], Label::new(&img.address)); - drop(img); - drop(api); - }) - }); + p2pool( + ui, + min_height, + width, + height, + p2pool_alive, + p2pool_api, + p2pool_img, + ); // [XMRig] - ui.group(|ui| { - ui.vertical(|ui| { - debug!("Status Tab | Rendering [XMRig]"); - ui.set_enabled(xmrig_alive); - ui.set_min_height(min_height); - ui.add_sized( - [width, height], - 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"); - let api = lock!(xmrig_api); - 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 (10s/60s/15m)") - .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 (10s/60s/15m)") - .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(&lock!(xmrig_img).url)); - ui.add_sized( - [width, height], - Label::new(RichText::new("Threads").underline().color(BONE)), - ) - .on_hover_text(STATUS_XMRIG_THREADS); - ui.add_sized( - [width, height], - Label::new(format!("{}/{}", &lock!(xmrig_img).threads, max_threads)), - ); - drop(api); - }) - }); + xmrig( + ui, + min_height, + width, + height, + xmrig_alive, + xmrig_api, + xmrig_img, + max_threads, + ); }); } } +fn gupax(ui: &mut Ui, min_height: f32, width: f32, height: f32, sys: &Arc>) { + ui.group(|ui| { + ui.vertical(|ui| { + debug!("Status Tab | Rendering [Gupax]"); + ui.set_min_height(min_height); + ui.add_sized( + [width, height], + Label::new( + RichText::new("[Gupax]") + .color(LIGHT_GRAY) + .text_style(TextStyle::Name("MonospaceLarge".into())), + ), + ) + .on_hover_text("Gupax is online"); + let sys = lock!(sys); + 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(sys.gupax_uptime.to_string())); + 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(sys.gupax_cpu_usage.to_string())); + 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(sys.gupax_memory_used_mb.to_string()), + ); + 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(sys.system_cpu_usage.to_string()), + ); + 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(sys.system_memory.to_string())); + 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(sys.system_cpu_model.to_string()), + ); + drop(sys); + }) + }); +} + +fn p2pool( + ui: &mut Ui, + min_height: f32, + width: f32, + height: f32, + p2pool_alive: bool, + p2pool_api: &Arc>, + p2pool_img: &Arc>, +) { + ui.group(|ui| { + ui.vertical(|ui| { + debug!("Status Tab | Rendering [P2Pool]"); + ui.set_enabled(p2pool_alive); + ui.set_min_height(min_height); + ui.add_sized( + [width, height], + 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"); + ui.style_mut().override_text_style = Some(Name("MonospaceSmall".into())); + let height = height / 1.4; + let api = lock!(p2pool_api); + 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!( + "[{:.7}/hour]\n[{:.7}/day]\n[{:.7}/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: {:.13} XMR", api.xmr)), + ); + ui.add_sized( + [width, height], + Label::new(format!( + "[{:.7}/hour]\n[{:.7}/day]\n[{:.7}/month]", + api.xmr_hour, api.xmr_day, api.xmr_month + )), + ); + 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 + )), + ); + let img = lock!(p2pool_img); + ui.add_sized( + [width, height], + Label::new(RichText::new("Monero Node").underline().color(BONE)), + ) + .on_hover_text(STATUS_P2POOL_MONERO_NODE); + ui.add_sized( + [width, height], + Label::new(format!( + "[IP: {}]\n[RPC: {}] [ZMQ: {}]", + &img.host, &img.rpc, &img.zmq + )), + ); + ui.add_sized( + [width, height], + Label::new(RichText::new("Sidechain").underline().color(BONE)), + ) + .on_hover_text(STATUS_P2POOL_POOL); + ui.add_sized([width, height], Label::new(&img.mini)); + ui.add_sized( + [width, height], + Label::new(RichText::new("Address").underline().color(BONE)), + ) + .on_hover_text(STATUS_P2POOL_ADDRESS); + ui.add_sized([width, height], Label::new(&img.address)); + drop(img); + drop(api); + }) + }); +} +fn xmrig( + ui: &mut Ui, + min_height: f32, + width: f32, + height: f32, + xmrig_alive: bool, + xmrig_api: &Arc>, + xmrig_img: &Arc>, + max_threads: usize, +) { + ui.group(|ui| { + ui.vertical(|ui| { + debug!("Status Tab | Rendering [XMRig]"); + ui.set_enabled(xmrig_alive); + ui.set_min_height(min_height); + ui.add_sized( + [width, height], + 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"); + let api = lock!(xmrig_api); + 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 (10s/60s/15m)") + .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 (10s/60s/15m)") + .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(&lock!(xmrig_img).url)); + ui.add_sized( + [width, height], + Label::new(RichText::new("Threads").underline().color(BONE)), + ) + .on_hover_text(STATUS_XMRIG_THREADS); + ui.add_sized( + [width, height], + Label::new(format!("{}/{}", &lock!(xmrig_img).threads, max_threads)), + ); + drop(api); + }) + }); +}