From 2e24f226a23466d6e81f3807db6f4947af3bf723 Mon Sep 17 00:00:00 2001 From: enWILLYado Date: Mon, 26 Feb 2018 21:04:31 +0100 Subject: [PATCH] Improve donate load Include the way to set how (total) minutes are in a donate cicle; by default is 60... 1 hour. Set donate default settings. --- src/Options.cpp | 36 +++++++++++++++++---------- src/Options.h | 12 ++++++--- src/Summary.cpp | 6 ++++- src/api/ApiState.cpp | 16 ++++++------ src/donate.h | 5 ++-- src/log/Log.h | 7 ++++++ src/net/Network.cpp | 2 +- src/net/strategies/DonateStrategy.cpp | 14 +++++------ src/net/strategies/DonateStrategy.h | 1 + 9 files changed, 64 insertions(+), 35 deletions(-) diff --git a/src/Options.cpp b/src/Options.cpp index 5e887d01..03a63342 100644 --- a/src/Options.cpp +++ b/src/Options.cpp @@ -160,14 +160,15 @@ static struct option const config_options[] = static struct option const donate_options[] = { - { "donate-url", required_argument, nullptr, 1391 }, - { "donate-url-little", required_argument, nullptr, 1392 }, - { "donate-user", required_argument, nullptr, 1393 }, - { "donate-pass", required_argument, nullptr, 1394 }, - { "donate-userpass", required_argument, nullptr, 1395 }, - { "donate-keepalive", no_argument, nullptr, 1396 }, - { "donate-nicehash", no_argument, nullptr, 1397 }, - { "donate-minutes", no_argument, nullptr, 1398 }, + { "donate-url", required_argument, nullptr, 1391 }, + { "donate-url-little", required_argument, nullptr, 1392 }, + { "donate-user", required_argument, nullptr, 1393 }, + { "donate-pass", required_argument, nullptr, 1394 }, + { "donate-userpass", required_argument, nullptr, 1395 }, + { "donate-keepalive", no_argument, nullptr, 1396 }, + { "donate-nicehash", no_argument, nullptr, 1397 }, + { "donate-minutes", no_argument, nullptr, 1398 }, + { "minutes-in-cicle", no_argument, nullptr, 1399 }, { 0, 0, 0, 0 } }; @@ -237,7 +238,6 @@ Options::Options(int argc, char** argv) : m_algo(0), m_algoVariant(0), m_apiPort(0), - m_donateLevel(kDonateLevel), m_maxCpuUsage(75), m_printTime(60), m_priority(-1), @@ -252,7 +252,8 @@ Options::Options(int argc, char** argv) : m_donateOpt.m_pass = kDonatePass; m_donateOpt.m_keepAlive = kDonateKeepAlive; m_donateOpt.m_niceHash = kDonateNiceHash; - m_donateOpt.m_minutesPh = kDonateLevel; + m_donateOpt.m_donateMinutes = kDonateMinutes; + m_donateOpt.m_minutesInCicle = kMinutesInCicle; m_pools.push_back(Url()); @@ -437,7 +438,7 @@ bool Options::parseArg(int key, const std::string & arg) case 1003: /* --donate-level */ if(arg == "") { - m_donateOpt.m_minutesPh = 0; + m_donateOpt.m_donateMinutes = 0; } else { @@ -476,6 +477,9 @@ bool Options::parseArg(int key, const std::string & arg) case 1398: //donate-minutes parseArg(key, strtol(arg.c_str(), nullptr, 10)); break; + case 1399: //minutes-in-cicle + parseArg(key, strtol(arg.c_str(), nullptr, 10)); + break; case 't': /* --threads */ if(arg == "all") @@ -565,7 +569,8 @@ bool Options::parseArg(int key, uint64_t arg) case 1003: /* --donate-level */ if(arg >= 0 || arg <= 60) { - m_donateOpt.m_minutesPh = (unsigned short) arg; + m_donateOpt.m_donateMinutes = (unsigned short) arg; + m_donateOpt.m_minutesInCicle = (unsigned short) kMinutesInCicle; } break; @@ -578,7 +583,11 @@ bool Options::parseArg(int key, uint64_t arg) break; case 1398: //donate-minutes - m_donateOpt.m_minutesPh = (unsigned short)arg; + m_donateOpt.m_donateMinutes = (unsigned short)arg; + break; + + case 1399: //minutes-in-cicle + m_donateOpt.m_minutesInCicle = (unsigned short)arg; break; case 1004: /* --max-cpu-usage */ @@ -686,6 +695,7 @@ bool Options::parseBoolean(int key, bool enable) case 1394: //donate-pass case 1395: //donate-userpass case 1398: //donate-minutes + case 1399: //minutes-in-cicle default: break; } diff --git a/src/Options.h b/src/Options.h index 3107d029..86676861 100644 --- a/src/Options.h +++ b/src/Options.h @@ -64,7 +64,8 @@ public: std::string m_pass; bool m_keepAlive; bool m_niceHash; - unsigned short m_minutesPh; + unsigned short m_donateMinutes; + unsigned short m_minutesInCicle; }; static inline Options* i() @@ -129,9 +130,13 @@ public: { return m_apiPort; } - inline unsigned short donateLevel() const + inline unsigned short donateMinutes() const { - return m_donateOpt.m_minutesPh; + return m_donateOpt.m_donateMinutes; + } + inline unsigned short minutesInCicle() const + { + return m_donateOpt.m_minutesInCicle; } inline const Donate & donate() const { @@ -216,7 +221,6 @@ private: int m_algo; int m_algoVariant; int m_apiPort; - int m_donateLevel; int m_maxCpuUsage; int m_printTime; int m_priority; diff --git a/src/Summary.cpp b/src/Summary.cpp index a549e3c0..200f069f 100644 --- a/src/Summary.cpp +++ b/src/Summary.cpp @@ -113,7 +113,11 @@ static void print_threads() } PRINT_MSG(" * THREADS: " << Options::i()->threads() << ", " << Options::i()->algoName() << ", av=" << - Options::i()->algoVariant() << ", donate=" << Options::i()->donateLevel() << " " << buf); + Options::i()->algoVariant() << ", donate-minutes=" << Options::i()->donateMinutes() << + ((Options::i()->donateMinutes() > 0) ? ("/" + + Log::ToString(Options::i()->minutesInCicle()) + " (" + Log::ToString((100 * + Options::i()->donateMinutes()) / + Options::i()->minutesInCicle()) + "%)") : "") << buf); } diff --git a/src/api/ApiState.cpp b/src/api/ApiState.cpp index 1e021e4b..e36e2b43 100644 --- a/src/api/ApiState.cpp +++ b/src/api/ApiState.cpp @@ -236,13 +236,15 @@ void ApiState::getMiner(rapidjson::Document & doc) const cpu.AddMember("x64", Cpu::isX64(), allocator); cpu.AddMember("sockets", Cpu::sockets(), allocator); - doc.AddMember("version", APP_VERSION, allocator); - doc.AddMember("kind", APP_KIND, allocator); - doc.AddMember("ua", rapidjson::StringRef(Platform::userAgent().c_str()), allocator); - doc.AddMember("cpu", cpu, allocator); - doc.AddMember("algo", rapidjson::StringRef(Options::i()->algoName()), allocator); - doc.AddMember("hugepages", Mem::isHugepagesEnabled(), allocator); - doc.AddMember("donate_level", Options::i()->donateLevel(), allocator); + doc.AddMember("version", APP_VERSION, allocator); + doc.AddMember("kind", APP_KIND, allocator); + doc.AddMember("ua", rapidjson::StringRef(Platform::userAgent().c_str()), allocator); + doc.AddMember("cpu", cpu, allocator); + doc.AddMember("algo", rapidjson::StringRef(Options::i()->algoName()), allocator); + doc.AddMember("hugepages", Mem::isHugepagesEnabled(), allocator); + + doc.AddMember("donate_minutes_per_cicle", Options::i()->donateMinutes(), allocator); + doc.AddMember("minutes_per_cicle", Options::i()->minutesInCicle(), allocator); } diff --git a/src/donate.h b/src/donate.h index e2715f3e..9af6b8e6 100644 --- a/src/donate.h +++ b/src/donate.h @@ -36,12 +36,13 @@ * * How it works: * Other connections switch to donation pool until the first 60 minutes, kDonateLevel minutes each hour - * with overime compensation. In proxy no way to use precise donation time! + * with overime compensation; but the period can be customizable. In proxy no way to use precise donation time! * You can check actual donation via API. */ enum { - kDonateLevel = 4, + kDonateMinutes = 3, + kMinutesInCicle = 60, kDonateKeepAlive = false, kDonateNiceHash = true, }; diff --git a/src/log/Log.h b/src/log/Log.h index 41b0fdef..0c920243 100644 --- a/src/log/Log.h +++ b/src/log/Log.h @@ -92,6 +92,13 @@ public: const std::stringstream & stream = static_cast(i); return stream.str(); } + template + static inline std::string ToString(const T & i) + { + std::stringstream stream; + stream << i; + return stream.str(); + } private: inline Log() {} ~Log(); diff --git a/src/net/Network.cpp b/src/net/Network.cpp index fe823333..ab33e4c9 100644 --- a/src/net/Network.cpp +++ b/src/net/Network.cpp @@ -63,7 +63,7 @@ Network::Network(const Options* options) : m_strategy = new SinglePoolStrategy(pools.front(), Platform::userAgent(), this); } - if(m_options->donateLevel() > 0) + if(m_options->donateMinutes() > 0) { m_donate = new DonateStrategy(Platform::userAgent(), this); } diff --git a/src/net/strategies/DonateStrategy.cpp b/src/net/strategies/DonateStrategy.cpp index 879389c1..c92752fd 100644 --- a/src/net/strategies/DonateStrategy.cpp +++ b/src/net/strategies/DonateStrategy.cpp @@ -41,8 +41,7 @@ extern "C" enum { C_ONE_TICK = 1, - C_ONE_MINUTE_IN_TICKS = 60, - C_ONE_HOUR_IN_TICKS = 60 * C_ONE_MINUTE_IN_TICKS, + C_TICKS_PER_MINUTE = 60, }; DonateStrategy::DonateStrategy(const std::string & agent, IStrategyListener* listener) : @@ -51,7 +50,8 @@ DonateStrategy::DonateStrategy(const std::string & agent, IStrategyListener* lis m_listener(listener), m_donateTicks(0), m_target(0), - m_ticks(0) + m_ticks(0), + C_ONE_CICLE_IN_TICKS(Options::i()->donate().m_minutesInCicle * C_TICKS_PER_MINUTE) { Url url(Options::i()->donate().m_url_little.empty() || Options::i()->algo() == Options::ALGO_CRYPTONIGHT ? Options::i()->donate().m_url : @@ -86,19 +86,19 @@ DonateStrategy::DonateStrategy(const std::string & agent, IStrategyListener* lis m_client->setUrl(url); m_client->setRetryPause(Options::i()->retryPause() * 1000); - m_target = C_ONE_HOUR_IN_TICKS; + m_target = C_ONE_CICLE_IN_TICKS; } bool DonateStrategy::reschedule() { - const uint64_t level = Options::i()->donateLevel() * C_ONE_MINUTE_IN_TICKS; - if(m_donateTicks < level) + const uint64_t donateTicks = Options::i()->donateMinutes() * C_TICKS_PER_MINUTE; + if(m_donateTicks < donateTicks) { return false; } - m_target = std::max(int(C_ONE_HOUR_IN_TICKS - m_donateTicks), int(C_ONE_TICK)) + m_ticks; + m_target = std::max(int(C_ONE_CICLE_IN_TICKS - m_donateTicks), int(C_ONE_TICK)) + m_ticks; m_active = false; stop(); diff --git a/src/net/strategies/DonateStrategy.h b/src/net/strategies/DonateStrategy.h index ba5f47b9..0e199908 100644 --- a/src/net/strategies/DonateStrategy.h +++ b/src/net/strategies/DonateStrategy.h @@ -65,6 +65,7 @@ private: uint64_t m_donateTicks; uint64_t m_target; uint64_t m_ticks; + const unsigned short C_ONE_CICLE_IN_TICKS; }; #endif /* __SINGLEPOOLSTRATEGY_H__ */