From 97f2782b264151971f247c90da19d2b41848fb3c Mon Sep 17 00:00:00 2001 From: Charles Franklin Date: Sun, 20 Jan 2019 09:56:51 -0500 Subject: [PATCH] Added a new log line 'totals' --- src/workers/Hashrate.cpp | 60 ++++++++++++++++++++++++++++++++++------ src/workers/Hashrate.h | 5 +++- 2 files changed, 55 insertions(+), 10 deletions(-) diff --git a/src/workers/Hashrate.cpp b/src/workers/Hashrate.cpp index f2b27455..0f5b97fb 100644 --- a/src/workers/Hashrate.cpp +++ b/src/workers/Hashrate.cpp @@ -62,7 +62,8 @@ inline static const char *format(double h, char *buf, size_t size) Hashrate::Hashrate(size_t threads, xmrig::Controller *controller) : m_highest(0.0), m_threads(threads), - m_controller(controller) + m_controller(controller), + m_start_time(time(NULL)) { m_counts = new uint64_t*[threads]; m_timestamps = new uint64_t*[threads]; @@ -174,6 +175,11 @@ uint64_t Hashrate::count(size_t threadId) const return m_totals[threadId]; } +uint64_t Hashrate::elapsed() const +{ + return time(NULL) - m_start_time; +} + void Hashrate::add(size_t threadId, uint64_t count, uint64_t timestamp) { @@ -193,16 +199,25 @@ void Hashrate::print() const char num2[8] = { 0 }; char num3[8] = { 0 }; char num4[8] = { 0 }; - char num5[64] = { 0 }; + char num5[128] = { 0 }; + char num6[128] = { 0 }; + char num7[128] = { 0 }; - LOG_INFO(m_controller->config()->isColors() ? WHITE_BOLD("speed") " 10s/60s/15m " CYAN_BOLD("%s") CYAN(" %s %s ") CYAN_BOLD("H/s") " max " CYAN_BOLD("%s H/s") " total " CYAN_BOLD("%s") - : "speed 10s/60s/15m %s %s %s H/s max %s H/s total %d", + bool color = m_controller->config()->isColors(); + uint64_t e = elapsed(); + uint64_t c = count(); + + LOG_INFO(color ? WHITE_BOLD("speed") " 10s/60s/15m " CYAN_BOLD("%s") CYAN(" %s %s ") CYAN_BOLD("H/s") " max " CYAN_BOLD("%s H/s") : "speed 10s/60s/15m %s %s %s H/s max %s H/s", format(calc(ShortInterval), num1, sizeof(num1)), format(calc(MediumInterval), num2, sizeof(num2)), format(calc(LargeInterval), num3, sizeof(num3)), - format(m_highest, num4, sizeof(num4)), - siFormat(count(), num5, sizeof(num5)) + format(m_highest, num4, sizeof(num4)) ); + LOG_INFO(color ? WHITE_BOLD("totals") " time %s hashes %s rate " CYAN("%s ") CYAN_BOLD("H/s") : "totals: time %s hashes %s rate %s H/s", + timeFormat(e, num5, sizeof(num5), color), + siFormat(c, num6, sizeof(num6), color), + format(c * 1.0 / e, num7, sizeof(num7)) + ); } @@ -226,7 +241,7 @@ const char *Hashrate::format(double h, char *buf, size_t size) return ::format(h, buf, size); } -const char *Hashrate::siFormat(uint64_t h, char *buf, size_t size) +const char *Hashrate::siFormat(uint64_t h, char *buf, size_t size, bool color) { char c[2]; @@ -249,12 +264,39 @@ const char *Hashrate::siFormat(uint64_t h, char *buf, size_t size) h /= pow10(3); } else { - snprintf(buf, size, "%lu", h); + snprintf(buf, size, (color) ? CYAN("%lu") : "%lu", h); return buf; } + snprintf(buf, size, (color) ? CYAN("%lu.%03lu") CYAN_BOLD("%s") : "%lu.%03lu%s", h, d, c); + return buf; +} - snprintf(buf, size, "%lu.%lu%s", h, d, c); +const char *Hashrate::timeFormat(uint64_t s, char *buf, size_t size, bool color) +{ + uint64_t d = 0; + uint64_t h = 0; + uint64_t m = 0; + + if (s > 3600 * 24) { + d = s / (3600*24); + s = s % (3600*24); + } + if (s > 3600) { + h = s / (3600); + s = s % (3600); + } + if (s > 60) { + m = s / (60); + s = s % (60); + } + + if (!color) { + snprintf(buf, size, "%02lud::%02luh::%02lum::%02lus", d, h, m, s); + } + else { + snprintf(buf, size, CYAN("%02lu") CYAN_BOLD("d") CYAN("%02lu") CYAN_BOLD("h") CYAN("%02lu") CYAN_BOLD("m") CYAN("%02lu") CYAN_BOLD("s"), d, h, m, s); + } return buf; } diff --git a/src/workers/Hashrate.h b/src/workers/Hashrate.h index 1201934a..02726ba5 100644 --- a/src/workers/Hashrate.h +++ b/src/workers/Hashrate.h @@ -48,6 +48,7 @@ public: double calc(size_t threadId, size_t ms) const; uint64_t count() const; uint64_t count(size_t threadId) const; + uint64_t elapsed() const; void add(size_t threadId, uint64_t count, uint64_t timestamp); void print() const; void stop(); @@ -57,7 +58,8 @@ public: inline size_t threads() const { return m_threads; } static const char *format(double h, char *buf, size_t size); - static const char *siFormat(uint64_t h, char *buf, size_t size); + static const char *siFormat(uint64_t h, char *buf, size_t size, bool color=false); + static const char *timeFormat(uint64_t t, char *buf, size_t size, bool color=false); private: static void onReport(uv_timer_t *handle); @@ -73,6 +75,7 @@ private: uint64_t** m_timestamps; uv_timer_t m_timer; xmrig::Controller *m_controller; + time_t m_start_time; };