mirror of
https://github.com/SChernykh/p2pool.git
synced 2025-01-31 06:25:51 +00:00
Added miner statistics to data api
This commit is contained in:
parent
a640e41d74
commit
1e4e4bd08e
4 changed files with 38 additions and 5 deletions
|
@ -36,7 +36,8 @@ static void usage()
|
||||||
"--loglevel Verbosity of the log, integer number between 0 and %d\n"
|
"--loglevel Verbosity of the log, integer number between 0 and %d\n"
|
||||||
"--config Name of the p2pool config file\n"
|
"--config Name of the p2pool config file\n"
|
||||||
"--data-api Path to the p2pool JSON data (use it in tandem with an external web-server)\n"
|
"--data-api Path to the p2pool JSON data (use it in tandem with an external web-server)\n"
|
||||||
"--stratum-api Enable /local/ path in api path for Stratum Server statistics\n"
|
"--local-api Enable /local/ path in api path for Stratum Server and built-in miner statistics\n"
|
||||||
|
"--stratum-api An alias for --local-api\n"
|
||||||
"--no-cache Disable p2pool.cache\n"
|
"--no-cache Disable p2pool.cache\n"
|
||||||
"--no-color Disable colors in console output\n"
|
"--no-color Disable colors in console output\n"
|
||||||
"--no-randomx Disable internal RandomX hasher: p2pool will use RPC calls to monerod to check PoW hashes\n"
|
"--no-randomx Disable internal RandomX hasher: p2pool will use RPC calls to monerod to check PoW hashes\n"
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
#include "block_template.h"
|
#include "block_template.h"
|
||||||
#include "pow_hash.h"
|
#include "pow_hash.h"
|
||||||
#include "randomx.h"
|
#include "randomx.h"
|
||||||
|
#include "params.h"
|
||||||
|
#include "p2pool_api.h"
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
static constexpr char log_category_prefix[] = "Miner ";
|
static constexpr char log_category_prefix[] = "Miner ";
|
||||||
|
@ -34,9 +36,11 @@ Miner::Miner(p2pool* pool, uint32_t threads)
|
||||||
: m_pool(pool)
|
: m_pool(pool)
|
||||||
, m_threads(threads)
|
, m_threads(threads)
|
||||||
, m_stopped(false)
|
, m_stopped(false)
|
||||||
|
, m_startTimestamp(high_resolution_clock::now())
|
||||||
, m_nonce(0)
|
, m_nonce(0)
|
||||||
, m_nonceTimestamp(high_resolution_clock::now())
|
, m_nonceTimestamp(m_startTimestamp)
|
||||||
, m_extraNonce(0xF19E3779U)
|
, m_extraNonce(0xF19E3779U)
|
||||||
|
, m_totalHashes(0)
|
||||||
, m_job{}
|
, m_job{}
|
||||||
, m_jobIndex(0)
|
, m_jobIndex(0)
|
||||||
{
|
{
|
||||||
|
@ -85,9 +89,31 @@ void Miner::on_block(const BlockTemplate& block)
|
||||||
Job& j = m_job[next_index];
|
Job& j = m_job[next_index];
|
||||||
hash seed;
|
hash seed;
|
||||||
j.m_blobSize = block.get_hashing_blob(m_extraNonce, j.m_blob, j.m_height, j.m_diff, j.m_sidechainDiff, seed, j.m_nonceOffset, j.m_templateId);
|
j.m_blobSize = block.get_hashing_blob(m_extraNonce, j.m_blob, j.m_height, j.m_diff, j.m_sidechainDiff, seed, j.m_nonceOffset, j.m_templateId);
|
||||||
m_nonce.exchange(0);
|
|
||||||
|
const uint32_t hash_count = 0 - m_nonce.exchange(0);
|
||||||
m_jobIndex = next_index;
|
m_jobIndex = next_index;
|
||||||
m_nonceTimestamp = high_resolution_clock::now();
|
|
||||||
|
const auto cur_ts = high_resolution_clock::now();
|
||||||
|
const double dt = static_cast<double>(duration_cast<nanoseconds>(cur_ts - m_nonceTimestamp).count()) / 1e9;
|
||||||
|
|
||||||
|
m_nonceTimestamp = cur_ts;
|
||||||
|
m_totalHashes += hash_count;
|
||||||
|
|
||||||
|
if (m_pool->api() && m_pool->params().m_localStats) {
|
||||||
|
m_pool->api()->set(p2pool_api::Category::LOCAL, "miner",
|
||||||
|
[cur_ts, hash_count, dt, this](log::Stream& s)
|
||||||
|
{
|
||||||
|
const uint64_t hr = (dt > 0.0) ? static_cast<uint64_t>(hash_count / dt) : 0;
|
||||||
|
const double time_running = static_cast<double>(duration_cast<milliseconds>(cur_ts - m_startTimestamp).count()) / 1e3;
|
||||||
|
|
||||||
|
s << "{\"current_hashrate\":" << hr
|
||||||
|
<< ",\"total_hashes\":" << m_totalHashes
|
||||||
|
<< ",\"time_running\":" << time_running
|
||||||
|
<< ",\"shares_found\":" << m_sharesFound.load()
|
||||||
|
<< ",\"threads\":" << m_threads
|
||||||
|
<< "}";
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Miner::run(void* data)
|
void Miner::run(void* data)
|
||||||
|
@ -173,6 +199,7 @@ void Miner::run(WorkerData* data)
|
||||||
if (j.m_sidechainDiff.check_pow(h)) {
|
if (j.m_sidechainDiff.check_pow(h)) {
|
||||||
LOGINFO(0, log::Green() << "SHARE FOUND: mainchain height " << j.m_height << ", diff " << j.m_sidechainDiff << ", worker thread " << data->m_index << '/' << data->m_count);
|
LOGINFO(0, log::Green() << "SHARE FOUND: mainchain height " << j.m_height << ", diff " << j.m_sidechainDiff << ", worker thread " << data->m_index << '/' << data->m_count);
|
||||||
m_pool->submit_sidechain_block(j.m_templateId, j.m_nonce, j.m_extraNonce);
|
m_pool->submit_sidechain_block(j.m_templateId, j.m_nonce, j.m_extraNonce);
|
||||||
|
++m_sharesFound;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::this_thread::yield();
|
std::this_thread::yield();
|
||||||
|
|
|
@ -51,10 +51,15 @@ private:
|
||||||
std::vector<WorkerData*> m_minerThreads;
|
std::vector<WorkerData*> m_minerThreads;
|
||||||
volatile bool m_stopped;
|
volatile bool m_stopped;
|
||||||
|
|
||||||
|
std::chrono::time_point<std::chrono::high_resolution_clock> m_startTimestamp;
|
||||||
|
|
||||||
std::atomic<uint32_t> m_nonce;
|
std::atomic<uint32_t> m_nonce;
|
||||||
std::chrono::time_point<std::chrono::high_resolution_clock> m_nonceTimestamp;
|
std::chrono::time_point<std::chrono::high_resolution_clock> m_nonceTimestamp;
|
||||||
const uint32_t m_extraNonce;
|
const uint32_t m_extraNonce;
|
||||||
|
|
||||||
|
uint64_t m_totalHashes;
|
||||||
|
std::atomic<uint32_t> m_sharesFound;
|
||||||
|
|
||||||
struct Job
|
struct Job
|
||||||
{
|
{
|
||||||
uint8_t m_blob[128] = {};
|
uint8_t m_blob[128] = {};
|
||||||
|
|
|
@ -70,7 +70,7 @@ Params::Params(int argc, char* argv[])
|
||||||
m_apiPath = argv[++i];
|
m_apiPath = argv[++i];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(argv[i], "--stratum-api") == 0) {
|
if ((strcmp(argv[i], "--local-api") == 0) || (strcmp(argv[i], "--stratum-api") == 0)) {
|
||||||
m_localStats = true;
|
m_localStats = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue