optimize [.lock()], add index counter to p2pool manual nodes

This commit is contained in:
hinto-janaiyo 2022-11-15 21:19:30 -05:00
parent d06cb08940
commit a13e6d689b
No known key found for this signature in database
GPG key ID: B1C5A64B80691E45
5 changed files with 61 additions and 39 deletions

28
Cargo.lock generated
View file

@ -536,9 +536,9 @@ dependencies = [
[[package]] [[package]]
name = "chrono" name = "chrono"
version = "0.4.22" version = "0.4.23"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1" checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f"
dependencies = [ dependencies = [
"iana-time-zone", "iana-time-zone",
"js-sys", "js-sys",
@ -2060,9 +2060,9 @@ dependencies = [
[[package]] [[package]]
name = "image" name = "image"
version = "0.24.4" version = "0.24.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd8e4fb07cf672b1642304e731ef8a6a4c7891d67bb4fd4f5ce58cd6ed86803c" checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945"
dependencies = [ dependencies = [
"bytemuck", "bytemuck",
"byteorder", "byteorder",
@ -2160,9 +2160,9 @@ dependencies = [
[[package]] [[package]]
name = "jpeg-decoder" name = "jpeg-decoder"
version = "0.2.6" version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9478aa10f73e7528198d75109c8be5cd7d15fb530238040148d5f9a22d4c5b3b" checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e"
dependencies = [ dependencies = [
"rayon", "rayon",
] ]
@ -2178,9 +2178,12 @@ dependencies = [
[[package]] [[package]]
name = "keccak" name = "keccak"
version = "0.1.2" version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f9b7d56ba4a8344d6be9729995e6b06f928af29998cdf79fe390cbf6b1fee838" checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768"
dependencies = [
"cpufeatures",
]
[[package]] [[package]]
name = "khronos_api" name = "khronos_api"
@ -2758,9 +2761,9 @@ dependencies = [
[[package]] [[package]]
name = "owned_ttf_parser" name = "owned_ttf_parser"
version = "0.17.0" version = "0.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4665508572151759e8d60404e20dc096ef93a99801a05ac2ac6e43bf5b4ca187" checksum = "18904d3c65493a9f0d7542293d1a7f69bfdc309a6b9ef4f46dc3e58b0577edc5"
dependencies = [ dependencies = [
"ttf-parser", "ttf-parser",
] ]
@ -3880,9 +3883,9 @@ dependencies = [
[[package]] [[package]]
name = "tiff" name = "tiff"
version = "0.7.4" version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f71e422515e83e3ab8a03d4781d05ebf864fc61f4546e6ecffa58cbd34181a0" checksum = "f17def29300a156c19ae30814710d9c63cd50288a49c6fd3a10ccfbe4cf886fd"
dependencies = [ dependencies = [
"flate2", "flate2",
"jpeg-decoder", "jpeg-decoder",
@ -4094,6 +4097,7 @@ version = "0.5.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
dependencies = [ dependencies = [
"indexmap",
"serde", "serde",
] ]

View file

@ -47,7 +47,8 @@ sha2 = "0.10.6"
tls-api = "0.9.0" tls-api = "0.9.0"
tls-api-native-tls = "0.9.0" tls-api-native-tls = "0.9.0"
tokio = { version = "1.21.2", features = ["full"] } tokio = { version = "1.21.2", features = ["full"] }
toml = "0.5.9" #toml = "0.5.9"
toml = { version = "0.5.9", features = ["preserve_order"] }
tor-rtcompat = "0.7.0" tor-rtcompat = "0.7.0"
walkdir = "2.3.2" walkdir = "2.3.2"

View file

@ -35,7 +35,7 @@ use std::fmt::Display;
use std::path::{Path,PathBuf}; use std::path::{Path,PathBuf};
use std::result::Result; use std::result::Result;
use std::sync::{Arc,Mutex}; use std::sync::{Arc,Mutex};
use std::collections::HashMap; use std::collections::{HashMap,BTreeMap};
use std::fmt::Write; use std::fmt::Write;
use serde::{Serialize,Deserialize}; use serde::{Serialize,Deserialize};
use figment::Figment; use figment::Figment;
@ -68,7 +68,7 @@ pub fn get_file_path(file: File) -> Result<PathBuf, TomlError> {
// Create directory // Create directory
fs::create_dir_all(&path)?; fs::create_dir_all(&path)?;
path.push(name); path.push(name);
info!("{:?} path ... {}", file, path.display()); info!("{:?} | Path ... {}", file, path.display());
Ok(path) Ok(path)
} }
@ -139,6 +139,7 @@ impl State {
ip: "localhost".to_string(), ip: "localhost".to_string(),
rpc: "18081".to_string(), rpc: "18081".to_string(),
zmq: "18083".to_string(), zmq: "18083".to_string(),
selected_index: 1,
selected_name: "Local Monero Node".to_string(), selected_name: "Local Monero Node".to_string(),
selected_ip: "localhost".to_string(), selected_ip: "localhost".to_string(),
selected_rpc: "18081".to_string(), selected_rpc: "18081".to_string(),
@ -167,7 +168,7 @@ impl State {
pub fn from_string(string: String) -> Result<Self, TomlError> { pub fn from_string(string: String) -> Result<Self, TomlError> {
match toml::de::from_str(&string) { match toml::de::from_str(&string) {
Ok(state) => { Ok(state) => {
info!("State parse ... OK"); info!("State | Parse ... OK");
print_toml(&string); print_toml(&string);
Ok(state) Ok(state)
} }
@ -284,10 +285,9 @@ impl Node {
// Convert [String] to [Node] Vec // Convert [String] to [Node] Vec
pub fn from_string(string: String) -> Result<Vec<(String, Self)>, TomlError> { pub fn from_string(string: String) -> Result<Vec<(String, Self)>, TomlError> {
let nodes: HashMap<String, Node> = match toml::de::from_str(&string) { let nodes: toml::map::Map<String, toml::Value> = match toml::de::from_str(&string) {
Ok(map) => { Ok(map) => {
info!("Node | Parse ... OK"); info!("Node | Parse ... OK");
print_toml(&string);
map map
} }
Err(err) => { Err(err) => {
@ -298,7 +298,13 @@ impl Node {
let size = nodes.keys().len(); let size = nodes.keys().len();
let mut vec = Vec::with_capacity(size); let mut vec = Vec::with_capacity(size);
for (key, values) in nodes.iter() { for (key, values) in nodes.iter() {
vec.push((key.clone(), values.clone())); // println!("{:#?}", values.get("ip")); std::process::exit(0);
let node = Node {
ip: values.get("ip").unwrap().as_str().unwrap().to_string(),
rpc: values.get("rpc").unwrap().as_str().unwrap().to_string(),
zmq: values.get("zmq").unwrap().as_str().unwrap().to_string(),
};
vec.push((key.clone(), node));
} }
Ok(vec) Ok(vec)
} }
@ -509,6 +515,7 @@ pub struct P2pool {
pub ip: String, pub ip: String,
pub rpc: String, pub rpc: String,
pub zmq: String, pub zmq: String,
pub selected_index: u16,
pub selected_name: String, pub selected_name: String,
pub selected_ip: String, pub selected_ip: String,
pub selected_rpc: String, pub selected_rpc: String,

View file

@ -159,21 +159,23 @@ impl App {
Err(err) => { panic_main(err.to_string()); exit(1); }, Err(err) => { panic_main(err.to_string()); exit(1); },
}; };
} }
app.state = app.og.lock().unwrap().clone(); let mut og = app.og.lock().unwrap(); // Lock [og]
app.state = og.clone();
// Get node list // Get node list
app.node_vec = Node::get().unwrap(); app.node_vec = Node::get().unwrap();
// Handle max threads // Handle max threads
app.og.lock().unwrap().xmrig.max_threads = num_cpus::get(); og.xmrig.max_threads = num_cpus::get();
let current = app.og.lock().unwrap().xmrig.current_threads; let current = og.xmrig.current_threads;
let max = app.og.lock().unwrap().xmrig.max_threads; let max = og.xmrig.max_threads;
if current > max { if current > max {
app.og.lock().unwrap().xmrig.current_threads = max; og.xmrig.current_threads = max;
} }
// Apply TOML values to [Update] // Apply TOML values to [Update]
let p2pool_path = app.og.lock().unwrap().gupax.absolute_p2pool_path.clone(); let p2pool_path = og.gupax.absolute_p2pool_path.clone();
let xmrig_path = app.og.lock().unwrap().gupax.absolute_xmrig_path.clone(); let xmrig_path = og.gupax.absolute_xmrig_path.clone();
let tor = app.og.lock().unwrap().gupax.update_via_tor; let tor = og.gupax.update_via_tor;
app.update = Arc::new(Mutex::new(Update::new(app.exe.clone(), p2pool_path, xmrig_path, tor))); app.update = Arc::new(Mutex::new(Update::new(app.exe.clone(), p2pool_path, xmrig_path, tor)));
drop(og); // Unlock [og]
app app
} }
} }
@ -554,16 +556,18 @@ impl eframe::App for Panic {
//---------------------------------------------------------------------------------------------------- Main [App] frame //---------------------------------------------------------------------------------------------------- Main [App] frame
fn main() { fn main() {
let now = Instant::now();
init_logger(); init_logger();
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"),
Err(e) => warn!("Could not cleanup [gupax_tmp] folders: {}", e), Err(e) => warn!("Could not cleanup [gupax_tmp] folders: {}", e),
} }
let app = App::new(); let mut app = App::new();
let name = app.name_version.clone(); app.now = now;
init_auto(&app); init_auto(&app);
eframe::run_native(&name, options, Box::new(|cc| Box::new(App::cc(cc, app))),); info!("Initialization DONE ... {} seconds", now.elapsed().as_secs_f32());
eframe::run_native(&app.name_version.clone(), options, Box::new(|cc| Box::new(App::cc(cc, app))),);
} }
impl eframe::App for App { impl eframe::App for App {

View file

@ -269,12 +269,17 @@ impl P2pool {
ui.spacing_mut().slider_width = width - 8.0; ui.spacing_mut().slider_width = width - 8.0;
ui.spacing_mut().icon_width = width / 25.0; ui.spacing_mut().icon_width = width / 25.0;
// [Ping List] // [Ping List]
let text = RichText::new(format!("{} | {}", self.selected_name, self.selected_ip)); let text = RichText::new(format!("{}. {} | {}", self.selected_index, self.selected_name, self.selected_ip));
ComboBox::from_id_source("nodes").selected_text(RichText::text_style(text, Monospace)).show_ui(ui, |ui| { ComboBox::from_id_source("nodes").selected_text(RichText::text_style(text, Monospace)).show_ui(ui, |ui| {
let mut n = 1;
for (name, node) in node_vec.iter() { for (name, node) in node_vec.iter() {
let text = RichText::text_style(RichText::new(format!("{}\n IP: {}\n RPC: {}\n ZMQ: {}", name, node.ip, node.rpc, node.zmq)), Monospace); let text = RichText::text_style(RichText::new(format!("{}. {}\n IP: {}\n RPC: {}\n ZMQ: {}", n, name, node.ip, node.rpc, node.zmq)), Monospace);
ui.selectable_value(&mut self.selected_name, name.clone(), text); if ui.add(SelectableLabel::new(self.selected_name == *name, text)).clicked() {
// println!("{}", value.ip); self.selected_index = n;
self.selected_name = name.clone();
}
// ui.selectable_value(&mut self.selected_name, name.clone(), text);
n += 1;
} }
}); });
// [Add] + [Delete] // [Add] + [Delete]
@ -284,8 +289,8 @@ impl P2pool {
for (name, _) in node_vec.iter() { for (name, _) in node_vec.iter() {
if *name == self.name { exists = true; } if *name == self.name { exists = true; }
} }
ui.set_enabled(!incorrect_input && !exists && node_vec_len < 100); ui.set_enabled(!incorrect_input && !exists && node_vec_len < 1000);
let text = format!("{}\n Max amount of nodes: 100\n Current amount: [{}/100]", P2POOL_ADD, node_vec_len); let text = format!("{}\n Currently selected node: {}. {}\n Current amount of nodes: {}/1000", P2POOL_ADD, self.selected_index, self.selected_name, node_vec_len);
if ui.add_sized([width, text_edit], Button::new("Add")).on_hover_text(text).clicked() { if ui.add_sized([width, text_edit], Button::new("Add")).on_hover_text(text).clicked() {
let node = Node { let node = Node {
ip: self.ip.clone(), ip: self.ip.clone(),
@ -297,7 +302,7 @@ impl P2pool {
}); });
ui.horizontal(|ui| { ui.horizontal(|ui| {
ui.set_enabled(node_vec_len > 1); ui.set_enabled(node_vec_len > 1);
let text = format!("{}\n Max amount of nodes: 100\n Current amount: [{}/100]", P2POOL_DELETE, node_vec_len); let text = format!("{}\n Currently selected node: {}. {}\n Current amount of nodes: {}/1000", P2POOL_ADD, self.selected_index, self.selected_name, node_vec_len);
if ui.add_sized([width, text_edit], Button::new("Delete")).on_hover_text(text).clicked() { if ui.add_sized([width, text_edit], Button::new("Delete")).on_hover_text(text).clicked() {
let mut n = 0; let mut n = 0;
for (name, _) in node_vec.iter() { for (name, _) in node_vec.iter() {
@ -305,10 +310,11 @@ impl P2pool {
// If deleting [0], make selected = [1] // If deleting [0], make selected = [1]
// instead of attempting to [0-1] (panic!) // instead of attempting to [0-1] (panic!)
match n { match n {
0 => self.selected_name = node_vec[1].0.clone(), 0 => { self.selected_name = node_vec[1].0.clone(); self.selected_index = 1; },
_ => self.selected_name = node_vec[n-1].0.clone(), _ => { self.selected_name = node_vec[n-1].0.clone(); self.selected_index = n as u16; },
}; };
node_vec.remove(n); node_vec.remove(n);
info!("Node | Removed index [{}. {}]", n+1, self.selected_name);
break break
} }
n += 1; n += 1;