mirror of
https://github.com/Cyrix126/gupaxx.git
synced 2024-12-22 22:59:27 +00:00
feat: beta release 0.1.4
feat: new logo feat: algorithm now takes Xmrig HR timeframe depending on what's average available fix: detection of p2pool eHR fix: private round type stats fix: name gupax tab to gupaxx
This commit is contained in:
parent
e9e630ae09
commit
4c9425f986
9 changed files with 88 additions and 39 deletions
17
CHANGELOG.md
17
CHANGELOG.md
|
@ -1,3 +1,20 @@
|
||||||
|
# v0.1.4
|
||||||
|
Fix release for beta version.
|
||||||
|
This version is only made for testing purposes and have feedbacks.
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
new logo
|
||||||
|
algorithm wait for xmrig first value, takes 10s value at first start, 1m value at second start, 15m value at third start.
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
fix detection of p2pool eHR
|
||||||
|
fix private round type stats
|
||||||
|
fix name gupax tab to gupaxx
|
||||||
|
|
||||||
|
## Bundled Versions
|
||||||
|
* [`P2Pool v3.10`](https://github.com/SChernykh/p2pool/releases/tag/v3.10)
|
||||||
|
* [`XMRig v6.21.1`](https://github.com/xmrig/xmrig/releases/tag/v6.21.1)
|
||||||
|
|
||||||
# v0.1.3
|
# v0.1.3
|
||||||
Fix release for beta version.
|
Fix release for beta version.
|
||||||
This version is only made for testing purposes and have feedbacks.
|
This version is only made for testing purposes and have feedbacks.
|
||||||
|
|
8
Cargo.lock
generated
8
Cargo.lock
generated
|
@ -2064,7 +2064,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gupaxx"
|
name = "gupaxx"
|
||||||
version = "0.1.3"
|
version = "0.1.4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"benri",
|
"benri",
|
||||||
|
@ -2549,7 +2549,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19"
|
checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"windows-targets 0.52.4",
|
"windows-targets 0.48.5",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -2649,9 +2649,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memchr"
|
name = "memchr"
|
||||||
version = "2.7.1"
|
version = "2.7.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
|
checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memmap2"
|
name = "memmap2"
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
cargo-features = ["profile-rustflags"]
|
cargo-features = ["profile-rustflags"]
|
||||||
[package]
|
[package]
|
||||||
name = "gupaxx"
|
name = "gupaxx"
|
||||||
version = "0.1.3"
|
version = "0.1.4"
|
||||||
authors = ["cyrix126 <gupaxx@baermail.fr>"]
|
authors = ["cyrix126 <gupaxx@baermail.fr>"]
|
||||||
description = "Fork of Gupax integrating the XMRvsBeast Raffle "
|
description = "Fork of Gupax integrating the XMRvsBeast Raffle "
|
||||||
documentation = "https://github.com/cyrix126/gupaxx"
|
documentation = "https://github.com/cyrix126/gupaxx"
|
||||||
|
@ -68,7 +68,7 @@ rand = "0.8.5"
|
||||||
regex = { version = "1.10.4", default-features = false, features = ["perf"] }
|
regex = { version = "1.10.4", default-features = false, features = ["perf"] }
|
||||||
rfd = "0.14.1"
|
rfd = "0.14.1"
|
||||||
serde = { version = "1.0.197", features = ["rc", "derive"] }
|
serde = { version = "1.0.197", features = ["rc", "derive"] }
|
||||||
serde_json = "1.0.114"
|
serde_json = "1.0.115"
|
||||||
sysinfo = { version = "0.30.7", default-features = false }
|
sysinfo = { version = "0.30.7", default-features = false }
|
||||||
# tls-api = "0.9.0"
|
# tls-api = "0.9.0"
|
||||||
tokio = { version = "1.36.0", features = ["rt", "time", "macros", "process", "rt-multi-thread"] }
|
tokio = { version = "1.36.0", features = ["rt", "time", "macros", "process", "rt-multi-thread"] }
|
||||||
|
@ -80,7 +80,7 @@ strip-ansi-escapes = "0.2.0"
|
||||||
derive_more = {version="0.99.17", default-features=false, features=["display"]}
|
derive_more = {version="0.99.17", default-features=false, features=["display"]}
|
||||||
serde-this-or-that = "0.4.2"
|
serde-this-or-that = "0.4.2"
|
||||||
readable = "0.16"
|
readable = "0.16"
|
||||||
chrono = {version="0.4.35", default-features=false, features=["clock", "std"]}
|
chrono = {version="0.4.37", default-features=false, features=["clock", "std"]}
|
||||||
# Unix dependencies
|
# Unix dependencies
|
||||||
[target.'cfg(unix)'.dependencies]
|
[target.'cfg(unix)'.dependencies]
|
||||||
eframe = { version = "0.26.2", features = ["wgpu"] }
|
eframe = { version = "0.26.2", features = ["wgpu"] }
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 65 KiB |
|
@ -36,7 +36,7 @@ impl crate::app::App {
|
||||||
if ui
|
if ui
|
||||||
.add_sized(
|
.add_sized(
|
||||||
[width, height],
|
[width, height],
|
||||||
SelectableLabel::new(self.tab == Tab::Gupax, "Gupax"),
|
SelectableLabel::new(self.tab == Tab::Gupax, "Gupaxx"),
|
||||||
)
|
)
|
||||||
.clicked()
|
.clicked()
|
||||||
{
|
{
|
||||||
|
|
|
@ -72,10 +72,10 @@ impl Helper {
|
||||||
if contains_yourhashrate(&line) {
|
if contains_yourhashrate(&line) {
|
||||||
if let Some(ehr) = estimated_hr(&line) {
|
if let Some(ehr) = estimated_hr(&line) {
|
||||||
debug!(
|
debug!(
|
||||||
"P2pool | PTY getting current estimated HR data from status: {} share",
|
"P2pool | PTY getting current estimated HR data from status: {} KH/s",
|
||||||
ehr
|
ehr
|
||||||
);
|
);
|
||||||
lock!(gui_api).sidechain_ehr = ehr;
|
lock!(gui_api).sidechain_ehr = ehr * 1000.0;
|
||||||
} else {
|
} else {
|
||||||
error!("P2pool | PTY Getting data from status: Lines contains Your shares but no value found: {}", line);
|
error!("P2pool | PTY Getting data from status: Lines contains Your shares but no value found: {}", line);
|
||||||
}
|
}
|
||||||
|
@ -895,6 +895,7 @@ impl PubP2poolApi {
|
||||||
tick: std::mem::take(&mut gui_api.tick),
|
tick: std::mem::take(&mut gui_api.tick),
|
||||||
tick_status: std::mem::take(&mut gui_api.tick_status),
|
tick_status: std::mem::take(&mut gui_api.tick_status),
|
||||||
sidechain_shares: std::mem::take(&mut gui_api.sidechain_shares),
|
sidechain_shares: std::mem::take(&mut gui_api.sidechain_shares),
|
||||||
|
sidechain_ehr: std::mem::take(&mut gui_api.sidechain_ehr),
|
||||||
..pub_api.clone()
|
..pub_api.clone()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -683,6 +683,7 @@ pub struct PubXmrigApi {
|
||||||
pub accepted: String,
|
pub accepted: String,
|
||||||
pub rejected: String,
|
pub rejected: String,
|
||||||
pub hashrate_raw: f32,
|
pub hashrate_raw: f32,
|
||||||
|
pub hashrate_raw_1m: f32,
|
||||||
pub hashrate_raw_15m: f32,
|
pub hashrate_raw_15m: f32,
|
||||||
pub node: String,
|
pub node: String,
|
||||||
}
|
}
|
||||||
|
@ -705,6 +706,7 @@ impl PubXmrigApi {
|
||||||
accepted: UNKNOWN_DATA.to_string(),
|
accepted: UNKNOWN_DATA.to_string(),
|
||||||
rejected: UNKNOWN_DATA.to_string(),
|
rejected: UNKNOWN_DATA.to_string(),
|
||||||
hashrate_raw: 0.0,
|
hashrate_raw: 0.0,
|
||||||
|
hashrate_raw_1m: 0.0,
|
||||||
hashrate_raw_15m: 0.0,
|
hashrate_raw_15m: 0.0,
|
||||||
node: UNKNOWN_DATA.to_string(),
|
node: UNKNOWN_DATA.to_string(),
|
||||||
}
|
}
|
||||||
|
@ -766,6 +768,10 @@ impl PubXmrigApi {
|
||||||
Some(Some(h)) => *h,
|
Some(Some(h)) => *h,
|
||||||
_ => 0.0,
|
_ => 0.0,
|
||||||
};
|
};
|
||||||
|
let hashrate_raw_1m = match private.hashrate.total.iter().nth(1) {
|
||||||
|
Some(Some(h)) => *h,
|
||||||
|
_ => 0.0,
|
||||||
|
};
|
||||||
let hashrate_raw_15m = match private.hashrate.total.last() {
|
let hashrate_raw_15m = match private.hashrate.total.last() {
|
||||||
Some(Some(h)) => *h,
|
Some(Some(h)) => *h,
|
||||||
_ => 0.0,
|
_ => 0.0,
|
||||||
|
@ -779,6 +785,7 @@ impl PubXmrigApi {
|
||||||
accepted: Unsigned::from(private.connection.accepted as usize).to_string(),
|
accepted: Unsigned::from(private.connection.accepted as usize).to_string(),
|
||||||
rejected: Unsigned::from(private.connection.rejected as usize).to_string(),
|
rejected: Unsigned::from(private.connection.rejected as usize).to_string(),
|
||||||
hashrate_raw,
|
hashrate_raw,
|
||||||
|
hashrate_raw_1m,
|
||||||
hashrate_raw_15m,
|
hashrate_raw_15m,
|
||||||
..std::mem::take(&mut *public)
|
..std::mem::take(&mut *public)
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ use hyper::client::HttpConnector;
|
||||||
use hyper::{Client, Request, StatusCode};
|
use hyper::{Client, Request, StatusCode};
|
||||||
use hyper_tls::HttpsConnector;
|
use hyper_tls::HttpsConnector;
|
||||||
use log::{debug, error, info, warn};
|
use log::{debug, error, info, warn};
|
||||||
|
use readable::num::Float;
|
||||||
use readable::up::Uptime;
|
use readable::up::Uptime;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use std::collections::VecDeque;
|
use std::collections::VecDeque;
|
||||||
|
@ -196,6 +197,7 @@ impl Helper {
|
||||||
let mut last_algorithm = tokio::time::Instant::now();
|
let mut last_algorithm = tokio::time::Instant::now();
|
||||||
let mut last_request = tokio::time::Instant::now();
|
let mut last_request = tokio::time::Instant::now();
|
||||||
let mut first_loop = true;
|
let mut first_loop = true;
|
||||||
|
let mut second_loop = false;
|
||||||
info!("XvB | Entering watchdog mode... woof!");
|
info!("XvB | Entering watchdog mode... woof!");
|
||||||
loop {
|
loop {
|
||||||
debug!("XvB Watchdog | ----------- Start of loop -----------");
|
debug!("XvB Watchdog | ----------- Start of loop -----------");
|
||||||
|
@ -326,11 +328,13 @@ impl Helper {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
let share = lock!(gui_api_p2pool).sidechain_shares;
|
let share = lock!(gui_api_p2pool).sidechain_shares;
|
||||||
|
debug!("XvB | Number of current shares: {}", share);
|
||||||
|
|
||||||
// // verify in which round type we are
|
// // verify in which round type we are
|
||||||
let round = XvbPrivStats::round_type(share, &pub_api);
|
let round = XvbPrivStats::round_type(share, &pub_api);
|
||||||
// refresh the round we participate
|
// refresh the round we participate
|
||||||
lock!(&pub_api).stats_priv.round_participate = round;
|
debug!("XvB | Round type: {:#?}", round);
|
||||||
|
lock!(&gui_api).stats_priv.round_participate = round;
|
||||||
|
|
||||||
// verify if we are the winner of the current round
|
// verify if we are the winner of the current round
|
||||||
if lock!(pub_api).stats_pub.winner
|
if lock!(pub_api).stats_pub.winner
|
||||||
|
@ -341,8 +345,10 @@ impl Helper {
|
||||||
|
|
||||||
// if 10 minutes passed since last check
|
// if 10 minutes passed since last check
|
||||||
// the first 15 minutes, the HR of xmrig will be 0.0, so xmrig will always mine on p2pool for 15m.
|
// the first 15 minutes, the HR of xmrig will be 0.0, so xmrig will always mine on p2pool for 15m.
|
||||||
if last_algorithm.elapsed() >= Duration::from_secs(XVB_TIME_ALGO.into())
|
// check local HR, skip this time if xmrig is not yet started
|
||||||
|| first_loop
|
if (last_algorithm.elapsed() >= Duration::from_secs(XVB_TIME_ALGO.into())
|
||||||
|
|| first_loop)
|
||||||
|
&& lock!(gui_api_xmrig).hashrate_raw > 0.0
|
||||||
{
|
{
|
||||||
debug!("Xvb Process | Algorithm is started");
|
debug!("Xvb Process | Algorithm is started");
|
||||||
output_console(
|
output_console(
|
||||||
|
@ -391,8 +397,16 @@ impl Helper {
|
||||||
&gui_api,
|
&gui_api,
|
||||||
"At least one share is in current PPLNS window.",
|
"At least one share is in current PPLNS window.",
|
||||||
);
|
);
|
||||||
|
let hashrate_xmrig = if first_loop {
|
||||||
|
// check rapidly average HR for first time
|
||||||
|
lock!(gui_api_xmrig).hashrate_raw
|
||||||
|
} else if second_loop {
|
||||||
|
lock!(gui_api_xmrig).hashrate_raw_1m
|
||||||
|
} else {
|
||||||
|
lock!(gui_api_xmrig).hashrate_raw_15m
|
||||||
|
};
|
||||||
let time_donated = XvbPrivStats::calcul_donated_time(
|
let time_donated = XvbPrivStats::calcul_donated_time(
|
||||||
&gui_api_xmrig,
|
hashrate_xmrig,
|
||||||
&gui_api_p2pool,
|
&gui_api_p2pool,
|
||||||
&gui_api,
|
&gui_api,
|
||||||
&state_p2pool,
|
&state_p2pool,
|
||||||
|
@ -406,7 +420,7 @@ impl Helper {
|
||||||
XVB_TIME_ALGO - time_donated, time_donated
|
XVB_TIME_ALGO - time_donated, time_donated
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
let hashrate_xmrig = lock!(gui_api_xmrig).hashrate_raw_15m;
|
|
||||||
debug!("Xvb Process | Local HR is {}H/s ", hashrate_xmrig);
|
debug!("Xvb Process | Local HR is {}H/s ", hashrate_xmrig);
|
||||||
lock!(gui_api).p2pool_sent_last_hour_samples.pop_back();
|
lock!(gui_api).p2pool_sent_last_hour_samples.pop_back();
|
||||||
lock!(gui_api).p2pool_sent_last_hour_samples.push_front(
|
lock!(gui_api).p2pool_sent_last_hour_samples.push_front(
|
||||||
|
@ -454,6 +468,17 @@ impl Helper {
|
||||||
lock!(gui_api).p2pool_sent_last_hour_samples.push_front(0.0);
|
lock!(gui_api).p2pool_sent_last_hour_samples.push_front(0.0);
|
||||||
lock!(gui_api).p2pool_sent_last_hour_samples.pop_back();
|
lock!(gui_api).p2pool_sent_last_hour_samples.pop_back();
|
||||||
}
|
}
|
||||||
|
if second_loop {
|
||||||
|
second_loop = false;
|
||||||
|
}
|
||||||
|
if first_loop {
|
||||||
|
first_loop = false;
|
||||||
|
second_loop = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// if xmrig is still at 0 HR but is alive and algorithm is skipped, recheck first 10s of xmrig inside algorithm next time
|
||||||
|
first_loop = true;
|
||||||
|
second_loop = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -461,9 +486,6 @@ impl Helper {
|
||||||
// Reset stats before loop
|
// Reset stats before loop
|
||||||
|
|
||||||
// Sleep (only if 900ms hasn't passed)
|
// Sleep (only if 900ms hasn't passed)
|
||||||
if first_loop {
|
|
||||||
first_loop = false;
|
|
||||||
}
|
|
||||||
let elapsed = start_loop.elapsed().as_millis();
|
let elapsed = start_loop.elapsed().as_millis();
|
||||||
// Since logic goes off if less than 1000, casting should be safe
|
// Since logic goes off if less than 1000, casting should be safe
|
||||||
if elapsed < 900 {
|
if elapsed < 900 {
|
||||||
|
@ -676,13 +698,12 @@ impl XvbPrivStats {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn calcul_donated_time(
|
fn calcul_donated_time(
|
||||||
gui_api_xmrig: &Arc<Mutex<PubXmrigApi>>,
|
lhr: f32,
|
||||||
gui_api_p2pool: &Arc<Mutex<PubP2poolApi>>,
|
gui_api_p2pool: &Arc<Mutex<PubP2poolApi>>,
|
||||||
gui_api_xvb: &Arc<Mutex<PubXvbApi>>,
|
gui_api_xvb: &Arc<Mutex<PubXvbApi>>,
|
||||||
state_p2pool: &crate::disk::state::P2pool,
|
state_p2pool: &crate::disk::state::P2pool,
|
||||||
state_xvb: &crate::disk::state::Xvb,
|
state_xvb: &crate::disk::state::Xvb,
|
||||||
) -> u32 {
|
) -> u32 {
|
||||||
let lhr = lock!(gui_api_xmrig).hashrate_raw_15m;
|
|
||||||
let p2pool_ehr = lock!(gui_api_p2pool).sidechain_ehr;
|
let p2pool_ehr = lock!(gui_api_p2pool).sidechain_ehr;
|
||||||
// what if ehr stay still for the next ten minutes ? mHR will augment every ten minutes because it thinks that oHR is decreasing.
|
// what if ehr stay still for the next ten minutes ? mHR will augment every ten minutes because it thinks that oHR is decreasing.
|
||||||
//
|
//
|
||||||
|
@ -699,17 +720,15 @@ impl XvbPrivStats {
|
||||||
min_hr = 0.0;
|
min_hr = 0.0;
|
||||||
}
|
}
|
||||||
debug!("Xvb Process | hr {}, min_hr: {} ", lhr, min_hr);
|
debug!("Xvb Process | hr {}, min_hr: {} ", lhr, min_hr);
|
||||||
output_console(
|
let msg = format!("local HR from Xmrig is {} kH/s, minimum required HR to keep a share in PPLNS window is {} k/s, there was {} kH/s estimated sent for your address on p2pool", Float::from_3(lhr.into()), Float::from_3(min_hr.into()), Float::from_3(p2pool_ehr.into()));
|
||||||
&gui_api_xvb,
|
output_console(&gui_api_xvb, &msg);
|
||||||
&format!("The average 15 minutes HR from Xmrig is {:.0} H/s, minimum required HR to keep a share in PPLNS window is {:.0} H/s, there was {} H/s estimated sent for your address on p2pool", lhr, min_hr, p2pool_ohr),
|
|
||||||
);
|
|
||||||
// calculate how much time can be spared
|
// calculate how much time can be spared
|
||||||
let mut spared_time = Helper::time_that_could_be_spared(lhr, min_hr);
|
let mut spared_time = Helper::time_that_could_be_spared(lhr, min_hr);
|
||||||
|
|
||||||
if spared_time > 0 {
|
if spared_time > 0 {
|
||||||
// if not hero option
|
// if not hero option
|
||||||
if !state_xvb.hero {
|
if !state_xvb.hero {
|
||||||
let xvb_chr = lock!(gui_api_xvb).stats_priv.donor_1hr_avg;
|
let xvb_chr = lock!(gui_api_xvb).stats_priv.donor_1hr_avg * 1000.0;
|
||||||
let shr = Helper::calc_last_hour_avg_hash_rate(
|
let shr = Helper::calc_last_hour_avg_hash_rate(
|
||||||
&lock!(gui_api_xvb).xvb_sent_last_hour_samples,
|
&lock!(gui_api_xvb).xvb_sent_last_hour_samples,
|
||||||
);
|
);
|
||||||
|
@ -923,8 +942,13 @@ impl PubXvbApi {
|
||||||
if !buf.is_empty() {
|
if !buf.is_empty() {
|
||||||
output.push_str(&buf);
|
output.push_str(&buf);
|
||||||
}
|
}
|
||||||
|
let round_participate = std::mem::take(&mut gui_api.stats_priv.round_participate);
|
||||||
*gui_api = Self {
|
*gui_api = Self {
|
||||||
output,
|
output,
|
||||||
|
stats_priv: XvbPrivStats {
|
||||||
|
round_participate,
|
||||||
|
..pub_api.stats_priv.clone()
|
||||||
|
},
|
||||||
..pub_api.clone()
|
..pub_api.clone()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1085,7 +1109,7 @@ mod test {
|
||||||
lock!(gui_api_xmrig).hashrate_raw_15m = 5500.0;
|
lock!(gui_api_xmrig).hashrate_raw_15m = 5500.0;
|
||||||
state_xvb.hero = false;
|
state_xvb.hero = false;
|
||||||
let given_time = XvbPrivStats::calcul_donated_time(
|
let given_time = XvbPrivStats::calcul_donated_time(
|
||||||
&gui_api_xmrig,
|
lock!(gui_api_xmrig).hashrate_raw_15m,
|
||||||
&gui_api_p2pool,
|
&gui_api_p2pool,
|
||||||
&gui_api_xvb,
|
&gui_api_xvb,
|
||||||
&state_p2pool,
|
&state_p2pool,
|
||||||
|
@ -1107,7 +1131,7 @@ mod test {
|
||||||
// verify that hero mode will give x seconds
|
// verify that hero mode will give x seconds
|
||||||
state_xvb.hero = true;
|
state_xvb.hero = true;
|
||||||
let given_time = XvbPrivStats::calcul_donated_time(
|
let given_time = XvbPrivStats::calcul_donated_time(
|
||||||
&gui_api_xmrig,
|
lock!(gui_api_xmrig).hashrate_raw_15m,
|
||||||
&gui_api_p2pool,
|
&gui_api_p2pool,
|
||||||
&gui_api_xvb,
|
&gui_api_xvb,
|
||||||
&state_p2pool,
|
&state_p2pool,
|
||||||
|
@ -1128,7 +1152,7 @@ mod test {
|
||||||
lock!(gui_api_xmrig).hashrate_raw_15m = 7000.0;
|
lock!(gui_api_xmrig).hashrate_raw_15m = 7000.0;
|
||||||
state_xvb.hero = false;
|
state_xvb.hero = false;
|
||||||
let given_time = XvbPrivStats::calcul_donated_time(
|
let given_time = XvbPrivStats::calcul_donated_time(
|
||||||
&gui_api_xmrig,
|
lock!(gui_api_xmrig).hashrate_raw_15m,
|
||||||
&gui_api_p2pool,
|
&gui_api_p2pool,
|
||||||
&gui_api_xvb,
|
&gui_api_xvb,
|
||||||
&state_p2pool,
|
&state_p2pool,
|
||||||
|
@ -1150,7 +1174,7 @@ mod test {
|
||||||
// verify that hero mode will give x seconds
|
// verify that hero mode will give x seconds
|
||||||
state_xvb.hero = true;
|
state_xvb.hero = true;
|
||||||
let given_time = XvbPrivStats::calcul_donated_time(
|
let given_time = XvbPrivStats::calcul_donated_time(
|
||||||
&gui_api_xmrig,
|
lock!(gui_api_xmrig).hashrate_raw_15m,
|
||||||
&gui_api_p2pool,
|
&gui_api_p2pool,
|
||||||
&gui_api_xvb,
|
&gui_api_xvb,
|
||||||
&state_p2pool,
|
&state_p2pool,
|
||||||
|
@ -1171,7 +1195,7 @@ mod test {
|
||||||
lock!(gui_api_xmrig).hashrate_raw_15m = 18000.0;
|
lock!(gui_api_xmrig).hashrate_raw_15m = 18000.0;
|
||||||
state_xvb.hero = false;
|
state_xvb.hero = false;
|
||||||
let given_time = XvbPrivStats::calcul_donated_time(
|
let given_time = XvbPrivStats::calcul_donated_time(
|
||||||
&gui_api_xmrig,
|
lock!(gui_api_xmrig).hashrate_raw_15m,
|
||||||
&gui_api_p2pool,
|
&gui_api_p2pool,
|
||||||
&gui_api_xvb,
|
&gui_api_xvb,
|
||||||
&state_p2pool,
|
&state_p2pool,
|
||||||
|
@ -1193,7 +1217,7 @@ mod test {
|
||||||
// verify that hero mode will give x seconds
|
// verify that hero mode will give x seconds
|
||||||
state_xvb.hero = true;
|
state_xvb.hero = true;
|
||||||
let given_time = XvbPrivStats::calcul_donated_time(
|
let given_time = XvbPrivStats::calcul_donated_time(
|
||||||
&gui_api_xmrig,
|
lock!(gui_api_xmrig).hashrate_raw_15m,
|
||||||
&gui_api_p2pool,
|
&gui_api_p2pool,
|
||||||
&gui_api_xvb,
|
&gui_api_xvb,
|
||||||
&state_p2pool,
|
&state_p2pool,
|
||||||
|
@ -1214,7 +1238,7 @@ mod test {
|
||||||
lock!(gui_api_xmrig).hashrate_raw_15m = 105000.0;
|
lock!(gui_api_xmrig).hashrate_raw_15m = 105000.0;
|
||||||
state_xvb.hero = false;
|
state_xvb.hero = false;
|
||||||
let given_time = XvbPrivStats::calcul_donated_time(
|
let given_time = XvbPrivStats::calcul_donated_time(
|
||||||
&gui_api_xmrig,
|
lock!(gui_api_xmrig).hashrate_raw_15m,
|
||||||
&gui_api_p2pool,
|
&gui_api_p2pool,
|
||||||
&gui_api_xvb,
|
&gui_api_xvb,
|
||||||
&state_p2pool,
|
&state_p2pool,
|
||||||
|
@ -1236,7 +1260,7 @@ mod test {
|
||||||
// verify that hero mode will give x seconds
|
// verify that hero mode will give x seconds
|
||||||
state_xvb.hero = true;
|
state_xvb.hero = true;
|
||||||
let given_time = XvbPrivStats::calcul_donated_time(
|
let given_time = XvbPrivStats::calcul_donated_time(
|
||||||
&gui_api_xmrig,
|
lock!(gui_api_xmrig).hashrate_raw_15m,
|
||||||
&gui_api_p2pool,
|
&gui_api_p2pool,
|
||||||
&gui_api_xvb,
|
&gui_api_xvb,
|
||||||
&state_p2pool,
|
&state_p2pool,
|
||||||
|
@ -1257,7 +1281,7 @@ mod test {
|
||||||
lock!(gui_api_xmrig).hashrate_raw_15m = 1205000.0;
|
lock!(gui_api_xmrig).hashrate_raw_15m = 1205000.0;
|
||||||
state_xvb.hero = false;
|
state_xvb.hero = false;
|
||||||
let given_time = XvbPrivStats::calcul_donated_time(
|
let given_time = XvbPrivStats::calcul_donated_time(
|
||||||
&gui_api_xmrig,
|
lock!(gui_api_xmrig).hashrate_raw_15m,
|
||||||
&gui_api_p2pool,
|
&gui_api_p2pool,
|
||||||
&gui_api_xvb,
|
&gui_api_xvb,
|
||||||
&state_p2pool,
|
&state_p2pool,
|
||||||
|
@ -1279,7 +1303,7 @@ mod test {
|
||||||
// verify that hero mode will give x seconds
|
// verify that hero mode will give x seconds
|
||||||
state_xvb.hero = true;
|
state_xvb.hero = true;
|
||||||
let given_time = XvbPrivStats::calcul_donated_time(
|
let given_time = XvbPrivStats::calcul_donated_time(
|
||||||
&gui_api_xmrig,
|
lock!(gui_api_xmrig).hashrate_raw_15m,
|
||||||
&gui_api_p2pool,
|
&gui_api_p2pool,
|
||||||
&gui_api_xvb,
|
&gui_api_xvb,
|
||||||
&state_p2pool,
|
&state_p2pool,
|
||||||
|
@ -1301,7 +1325,7 @@ mod test {
|
||||||
lock!(gui_api_xvb).stats_priv.donor_1hr_avg = 5000.0;
|
lock!(gui_api_xvb).stats_priv.donor_1hr_avg = 5000.0;
|
||||||
state_xvb.hero = false;
|
state_xvb.hero = false;
|
||||||
let given_time = XvbPrivStats::calcul_donated_time(
|
let given_time = XvbPrivStats::calcul_donated_time(
|
||||||
&gui_api_xmrig,
|
lock!(gui_api_xmrig).hashrate_raw_15m,
|
||||||
&gui_api_p2pool,
|
&gui_api_p2pool,
|
||||||
&gui_api_xvb,
|
&gui_api_xvb,
|
||||||
&state_p2pool,
|
&state_p2pool,
|
||||||
|
@ -1326,7 +1350,7 @@ mod test {
|
||||||
lock!(gui_api_xvb).stats_priv.donor_1hr_avg = 5000.0;
|
lock!(gui_api_xvb).stats_priv.donor_1hr_avg = 5000.0;
|
||||||
state_xvb.hero = true;
|
state_xvb.hero = true;
|
||||||
let given_time = XvbPrivStats::calcul_donated_time(
|
let given_time = XvbPrivStats::calcul_donated_time(
|
||||||
&gui_api_xmrig,
|
lock!(gui_api_xmrig).hashrate_raw_15m,
|
||||||
&gui_api_p2pool,
|
&gui_api_p2pool,
|
||||||
&gui_api_xvb,
|
&gui_api_xvb,
|
||||||
&state_p2pool,
|
&state_p2pool,
|
||||||
|
|
|
@ -150,7 +150,7 @@ pub fn nb_current_shares(s: &str) -> Option<u32> {
|
||||||
}
|
}
|
||||||
pub fn estimated_hr(s: &str) -> Option<f32> {
|
pub fn estimated_hr(s: &str) -> Option<f32> {
|
||||||
static CURRENT_SHARE: Lazy<Regex> =
|
static CURRENT_SHARE: Lazy<Regex> =
|
||||||
Lazy::new(|| Regex::new(r"Your hashrate (pool-side) = (?P<nb>.*) KH/s").unwrap());
|
Lazy::new(|| Regex::new(r"(?P<nb>[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)").unwrap());
|
||||||
if let Some(c) = CURRENT_SHARE.captures(s) {
|
if let Some(c) = CURRENT_SHARE.captures(s) {
|
||||||
if let Some(m) = c.name("nb") {
|
if let Some(m) = c.name("nb") {
|
||||||
return Some(
|
return Some(
|
||||||
|
@ -177,7 +177,7 @@ pub fn contains_yourshare(l: &str) -> bool {
|
||||||
}
|
}
|
||||||
pub fn contains_yourhashrate(l: &str) -> bool {
|
pub fn contains_yourhashrate(l: &str) -> bool {
|
||||||
static LINE_SHARE: Lazy<Regex> =
|
static LINE_SHARE: Lazy<Regex> =
|
||||||
Lazy::new(|| Regex::new(r"^Your hashrate (pool-side)").unwrap());
|
Lazy::new(|| Regex::new(r"^Your hashrate \(pool-side\) = ").unwrap());
|
||||||
LINE_SHARE.is_match(l)
|
LINE_SHARE.is_match(l)
|
||||||
}
|
}
|
||||||
pub fn contains_end_status(l: &str) -> bool {
|
pub fn contains_end_status(l: &str) -> bool {
|
||||||
|
|
Loading…
Reference in a new issue