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.
This commit is contained in:
enWILLYado 2018-02-26 21:04:31 +01:00
parent 668d59705c
commit 2e24f226a2
9 changed files with 64 additions and 35 deletions

View file

@ -168,6 +168,7 @@ static struct option const donate_options[] =
{ "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;
}

View file

@ -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;

View file

@ -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);
}

View file

@ -242,7 +242,9 @@ void ApiState::getMiner(rapidjson::Document & doc) const
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("donate_minutes_per_cicle", Options::i()->donateMinutes(), allocator);
doc.AddMember("minutes_per_cicle", Options::i()->minutesInCicle(), allocator);
}

View file

@ -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,
};

View file

@ -92,6 +92,13 @@ public:
const std::stringstream & stream = static_cast<const std::stringstream &>(i);
return stream.str();
}
template<class T>
static inline std::string ToString(const T & i)
{
std::stringstream stream;
stream << i;
return stream.str();
}
private:
inline Log() {}
~Log();

View file

@ -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);
}

View file

@ -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();

View file

@ -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__ */