summaryrefslogtreecommitdiffstats
path: root/xmrstak/misc/executor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xmrstak/misc/executor.cpp')
-rw-r--r--xmrstak/misc/executor.cpp107
1 files changed, 68 insertions, 39 deletions
diff --git a/xmrstak/misc/executor.cpp b/xmrstak/misc/executor.cpp
index 6f48edd..4a3a77b 100644
--- a/xmrstak/misc/executor.cpp
+++ b/xmrstak/misc/executor.cpp
@@ -29,10 +29,12 @@
#include "xmrstak/backend/miner_work.hpp"
#include "xmrstak/backend/globalStates.hpp"
#include "xmrstak/backend/backendConnector.hpp"
+#include "xmrstak/backend/iBackend.hpp"
#include "xmrstak/jconf.hpp"
#include "xmrstak/misc/console.hpp"
#include "xmrstak/donate-level.hpp"
+#include "xmrstak/version.hpp"
#include "xmrstak/http/webdesign.hpp"
#include <thread>
@@ -43,6 +45,7 @@
#include <assert.h>
#include <time.h>
+
#ifdef _WIN32
#define strncasecmp _strnicmp
#endif // _WIN32
@@ -491,6 +494,13 @@ void executor::ex_main()
{
jconf::pool_cfg cfg;
jconf::inst()->GetPoolConfig(i, cfg);
+#ifdef CONF_NO_TLS
+ if(cfg.tls)
+ {
+ printer::inst()->print_msg(L1, "ERROR: No miner was compiled without TLS support.");
+ win_exit();
+ }
+#endif
if(!cfg.tls) tls = false;
pools.emplace_back(i+1, cfg.sPoolAddr, cfg.sWalletAddr, cfg.sPasswd, cfg.weight, false, cfg.tls, cfg.tls_fingerprint, cfg.nicehash);
}
@@ -549,6 +559,10 @@ void executor::ex_main()
eval_pool_choice();
break;
+ case EV_GPU_RES_ERROR:
+ log_result_error(ev.oGpuError.error_str);
+ break;
+
case EV_PERF_TICK:
for (i = 0; i < pvThreads->size(); i++)
telem->push_perf_value(i, pvThreads->at(i)->iHashCount.load(std::memory_order_relaxed),
@@ -619,49 +633,64 @@ inline const char* hps_format(double h, char* buf, size_t l)
void executor::hashrate_report(std::string& out)
{
char num[32];
- size_t nthd = pvThreads->size();
-
- out.reserve(256 + nthd * 64);
-
double fTotal[3] = { 0.0, 0.0, 0.0};
- size_t i;
-
- out.append("HASHRATE REPORT\n");
- out.append("| ID | 10s | 60s | 15m |");
- if(nthd != 1)
- out.append(" ID | 10s | 60s | 15m |\n");
- else
- out.append(1, '\n');
- for (i = 0; i < nthd; i++)
+ for( uint32_t b = 0; b < 4u; ++b)
{
- double fHps[3];
+ std::vector<xmrstak::iBackend*> backEnds;
+ std::copy_if(pvThreads->begin(), pvThreads->end(), std::back_inserter(backEnds),
+ [&](xmrstak::iBackend* backend)
+ {
+ return backend->backendType == b;
+ }
+ );
- fHps[0] = telem->calc_telemetry_data(10000, i);
- fHps[1] = telem->calc_telemetry_data(60000, i);
- fHps[2] = telem->calc_telemetry_data(900000, i);
+ size_t nthd = backEnds.size();
+ if(nthd != 0)
+ {
+ out.reserve(256 + nthd * 64);
+
+ size_t i;
+ auto bType = static_cast<xmrstak::iBackend::BackendType>(b);
+ out.append("HASHRATE REPORT - ").append(xmrstak::iBackend::getName(bType)).append("\n");
+ out.append("| ID | 10s | 60s | 15m |");
+ if(nthd != 1)
+ out.append(" ID | 10s | 60s | 15m |\n");
+ else
+ out.append(1, '\n');
- snprintf(num, sizeof(num), "| %2u |", (unsigned int)i);
- out.append(num);
- out.append(hps_format(fHps[0], num, sizeof(num))).append(" |");
- out.append(hps_format(fHps[1], num, sizeof(num))).append(" |");
- out.append(hps_format(fHps[2], num, sizeof(num))).append(1, ' ');
+ for (i = 0; i < nthd; i++)
+ {
+ double fHps[3];
- fTotal[0] += fHps[0];
- fTotal[1] += fHps[1];
- fTotal[2] += fHps[2];
+ uint32_t tid = backEnds[i]->iThreadNo;
+ fHps[0] = telem->calc_telemetry_data(10000, tid);
+ fHps[1] = telem->calc_telemetry_data(60000, tid);
+ fHps[2] = telem->calc_telemetry_data(900000, tid);
- if((i & 0x1) == 1) //Odd i's
- out.append("|\n");
- }
+ snprintf(num, sizeof(num), "| %2u |", (unsigned int)i);
+ out.append(num);
+ out.append(hps_format(fHps[0], num, sizeof(num))).append(" |");
+ out.append(hps_format(fHps[1], num, sizeof(num))).append(" |");
+ out.append(hps_format(fHps[2], num, sizeof(num))).append(1, ' ');
- if((i & 0x1) == 1) //We had odd number of threads
- out.append("|\n");
+ fTotal[0] += fHps[0];
+ fTotal[1] += fHps[1];
+ fTotal[2] += fHps[2];
- if(nthd != 1)
- out.append("-----------------------------------------------------\n");
- else
- out.append("---------------------------\n");
+ if((i & 0x1) == 1) //Odd i's
+ out.append("|\n");
+ }
+
+ if((i & 0x1) == 1) //We had odd number of threads
+ out.append("|\n");
+
+ if(nthd != 1)
+ out.append("-----------------------------------------------------\n");
+ else
+ out.append("---------------------------\n");
+ }
+ }
out.append("Totals: ");
out.append(hps_format(fTotal[0], num, sizeof(num)));
@@ -832,7 +861,7 @@ void executor::http_hashrate_report(std::string& out)
out.reserve(4096);
- snprintf(buffer, sizeof(buffer), sHtmlCommonHeader, "Hashrate Report", "Hashrate Report");
+ snprintf(buffer, sizeof(buffer), sHtmlCommonHeader, "Hashrate Report", ver_html, "Hashrate Report");
out.append(buffer);
snprintf(buffer, sizeof(buffer), sHtmlHashrateBodyHigh, (unsigned int)nthd + 3);
@@ -877,7 +906,7 @@ void executor::http_result_report(std::string& out)
out.reserve(4096);
- snprintf(buffer, sizeof(buffer), sHtmlCommonHeader, "Result Report", "Result Report");
+ snprintf(buffer, sizeof(buffer), sHtmlCommonHeader, "Result Report", ver_html, "Result Report");
out.append(buffer);
size_t iGoodRes = vMineResults[0].count, iTotalRes = iGoodRes;
@@ -923,7 +952,7 @@ void executor::http_connection_report(std::string& out)
out.reserve(4096);
- snprintf(buffer, sizeof(buffer), sHtmlCommonHeader, "Connection Report", "Connection Report");
+ snprintf(buffer, sizeof(buffer), sHtmlCommonHeader, "Connection Report", ver_html, "Connection Report");
out.append(buffer);
jpsock* pool = pick_pool_by_id(current_pool_id);
@@ -1063,11 +1092,11 @@ void executor::http_json_report(std::string& out)
cn_error.append(buffer);
}
- size_t bb_size = 1024 + hr_thds.size() + res_error.size() + cn_error.size();
+ size_t bb_size = 2048 + hr_thds.size() + res_error.size() + cn_error.size();
std::unique_ptr<char[]> bigbuf( new char[ bb_size ] );
int bb_len = snprintf(bigbuf.get(), bb_size, sJsonApiFormat,
- hr_thds.c_str(), hr_buffer, a,
+ get_version_str().c_str(), hr_thds.c_str(), hr_buffer, a,
int_port(iPoolDiff), int_port(iGoodRes), int_port(iTotalRes), fAvgResTime, int_port(iPoolHashes),
int_port(iTopDiff[0]), int_port(iTopDiff[1]), int_port(iTopDiff[2]), int_port(iTopDiff[3]), int_port(iTopDiff[4]),
int_port(iTopDiff[5]), int_port(iTopDiff[6]), int_port(iTopDiff[7]), int_port(iTopDiff[8]), int_port(iTopDiff[9]),
OpenPOWER on IntegriCloud