mirror of
https://github.com/GOSTSec/ccminer
synced 2025-01-08 22:07:56 +00:00
api: add scanlog command to monitor scan ranges
will be used for external debugging...
This commit is contained in:
parent
1dfbe6dfb5
commit
dc5d1b112d
28
api.cpp
28
api.cpp
@ -284,7 +284,7 @@ static char *gethwinfos(char *params)
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the last 20 scans stats (not the same as shares)
|
||||
* Returns the last 50 scans stats
|
||||
* optional param thread id (default all)
|
||||
*/
|
||||
static char *gethistory(char *params)
|
||||
@ -304,6 +304,25 @@ static char *gethistory(char *params)
|
||||
return buffer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the job scans ranges (debug purpose)
|
||||
*/
|
||||
static char *getscanlog(char *params)
|
||||
{
|
||||
struct hashlog_data data[50];
|
||||
char *p = buffer;
|
||||
int records = hashlog_get_history(data, ARRAY_SIZE(data));
|
||||
*buffer = '\0';
|
||||
for (int i = 0; i < records; i++) {
|
||||
time_t ts = data[i].tm_upd;
|
||||
p += sprintf(p, "H=%u;JOB=%u;N=%u;FROM=0x%x;SCANTO=0x%x;"
|
||||
"COUNT=0x%x;FOUND=%u;TS=%u|",
|
||||
data[i].height, data[i].njobid, data[i].nonce, data[i].scanned_from, data[i].scanned_to,
|
||||
(data[i].scanned_to - data[i].scanned_from), data[i].tm_sent ? 1 : 0, (uint32_t)ts);
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Some debug infos about memory usage
|
||||
*/
|
||||
@ -331,6 +350,7 @@ struct CMDS {
|
||||
{ "summary", getsummary },
|
||||
{ "threads", getthreads },
|
||||
{ "histo", gethistory },
|
||||
{ "scanlog", getscanlog },
|
||||
{ "meminfo", getmeminfo },
|
||||
{ "hwinfo", gethwinfos },
|
||||
/* keep it the last */
|
||||
@ -344,9 +364,11 @@ static char *gethelp(char *params)
|
||||
char * p = buffer;
|
||||
for (int i = 0; i < CMDMAX-1; i++)
|
||||
p += sprintf(p, "%s\n", cmds[i].name);
|
||||
sprintf(p, "|");
|
||||
return buffer;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static int send_result(SOCKETTYPE c, char *result)
|
||||
{
|
||||
@ -620,10 +642,10 @@ static void api()
|
||||
*(params++) = '\0';
|
||||
|
||||
if (opt_debug && opt_protocol && n > 0)
|
||||
applog(LOG_DEBUG, "API: exec command %s(%s)", buf, params);
|
||||
applog(LOG_DEBUG, "API: exec command %s(%s)", buf, params ? params : "");
|
||||
|
||||
for (i = 0; i < CMDMAX; i++) {
|
||||
if (strcmp(buf, cmds[i].name) == 0) {
|
||||
if (strcmp(buf, cmds[i].name) == 0 && strlen(buf)) {
|
||||
result = (cmds[i].func)(params);
|
||||
send_result(c, result);
|
||||
break;
|
||||
|
26
hashlog.cpp
26
hashlog.cpp
@ -1,8 +1,8 @@
|
||||
/**
|
||||
* Hash log of submitted job nonces
|
||||
* Prevent duplicate shares and could be used for RPC stats later
|
||||
* Prevent duplicate shares
|
||||
*
|
||||
* Note: this source is C++ (requires std::map)
|
||||
* (to be merged later with stats)
|
||||
*
|
||||
* tpruvot@github 2014
|
||||
*/
|
||||
@ -16,6 +16,7 @@
|
||||
#define LO_DWORD(u64) ((uint32_t) u64)
|
||||
#define MK_HI64(u32) (0x100000000ULL * u32)
|
||||
|
||||
/* from miner.h
|
||||
struct hashlog_data {
|
||||
uint32_t tm_sent;
|
||||
uint32_t height;
|
||||
@ -25,6 +26,7 @@ struct hashlog_data {
|
||||
uint32_t tm_add;
|
||||
uint32_t tm_upd;
|
||||
};
|
||||
*/
|
||||
|
||||
static std::map<uint64_t, hashlog_data> tlastshares;
|
||||
|
||||
@ -71,6 +73,7 @@ void hashlog_remember_submit(struct work* work, uint32_t nonce)
|
||||
data.scanned_from = work->scanned_from;
|
||||
data.scanned_to = nonce;
|
||||
data.height = work->height;
|
||||
data.njobid = (uint32_t) njobid;
|
||||
data.tm_add = data.tm_upd = data.tm_sent = (uint32_t) time(NULL);
|
||||
tlastshares[key] = data;
|
||||
}
|
||||
@ -89,6 +92,7 @@ void hashlog_remember_scan_range(struct work* work)
|
||||
data = tlastshares[key];
|
||||
if (range == 0) {
|
||||
memset(&data, 0, sizeof(data));
|
||||
data.njobid = njobid;
|
||||
} else {
|
||||
// get min and max from all sent records
|
||||
data.scanned_from = LO_DWORD(range);
|
||||
@ -164,6 +168,24 @@ uint32_t hashlog_get_last_sent(char* jobid)
|
||||
return nonce;
|
||||
}
|
||||
|
||||
/**
|
||||
* Export data for api calls
|
||||
*/
|
||||
int hashlog_get_history(struct hashlog_data *data, int max_records)
|
||||
{
|
||||
int records = 0;
|
||||
|
||||
std::map<uint64_t, hashlog_data>::reverse_iterator it = tlastshares.rbegin();
|
||||
while (it != tlastshares.rend() && records < max_records) {
|
||||
memcpy(&data[records], &(it->second), sizeof(struct hashlog_data));
|
||||
data[records].nonce = LO_DWORD(it->first);
|
||||
data[records].njobid = (uint32_t) HI_DWORD(it->first);
|
||||
records++;
|
||||
++it;
|
||||
}
|
||||
return records;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove entries of a job...
|
||||
*/
|
||||
|
38
miner.h
38
miner.h
@ -399,6 +399,31 @@ struct thr_api {
|
||||
pthread_t pth;
|
||||
struct thread_q *q;
|
||||
};
|
||||
|
||||
struct stats_data {
|
||||
uint32_t tm_stat;
|
||||
uint32_t hashcount;
|
||||
uint32_t height;
|
||||
double difficulty;
|
||||
double hashrate;
|
||||
uint8_t thr_id;
|
||||
uint8_t gpu_id;
|
||||
uint8_t hashfound;
|
||||
uint8_t ignored;
|
||||
};
|
||||
|
||||
struct hashlog_data {
|
||||
uint32_t tm_sent;
|
||||
uint32_t height;
|
||||
uint32_t njobid;
|
||||
uint32_t nonce;
|
||||
uint32_t scanned_from;
|
||||
uint32_t scanned_to;
|
||||
uint32_t last_from;
|
||||
uint32_t tm_add;
|
||||
uint32_t tm_upd;
|
||||
};
|
||||
|
||||
/* end of api */
|
||||
|
||||
struct thr_info {
|
||||
@ -544,18 +569,6 @@ struct work {
|
||||
uint32_t scanned_to;
|
||||
};
|
||||
|
||||
struct stats_data {
|
||||
uint32_t tm_stat;
|
||||
uint32_t hashcount;
|
||||
uint32_t height;
|
||||
double difficulty;
|
||||
double hashrate;
|
||||
uint8_t thr_id;
|
||||
uint8_t gpu_id;
|
||||
uint8_t hashfound;
|
||||
uint8_t ignored;
|
||||
};
|
||||
|
||||
bool stratum_socket_full(struct stratum_ctx *sctx, int timeout);
|
||||
bool stratum_send_line(struct stratum_ctx *sctx, char *s);
|
||||
char *stratum_recv_line(struct stratum_ctx *sctx);
|
||||
@ -570,6 +583,7 @@ void hashlog_remember_scan_range(struct work* work);
|
||||
uint32_t hashlog_already_submittted(char* jobid, uint32_t nounce);
|
||||
uint32_t hashlog_get_last_sent(char* jobid);
|
||||
uint64_t hashlog_get_scan_range(char* jobid);
|
||||
int hashlog_get_history(struct hashlog_data *data, int max_records);
|
||||
void hashlog_purge_old(void);
|
||||
void hashlog_purge_job(char* jobid);
|
||||
void hashlog_purge_all(void);
|
||||
|
@ -90,11 +90,13 @@ double stats_get_speed(int thr_id, double def_speed)
|
||||
return speed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Export data for api calls
|
||||
*/
|
||||
int stats_get_history(int thr_id, struct stats_data *data, int max_records)
|
||||
{
|
||||
const uint64_t gpu = device_map[thr_id];
|
||||
const uint64_t keymsk = 0xffULL; // last u8 is the gpu
|
||||
double speed = 0.0;
|
||||
int records = 0;
|
||||
|
||||
std::map<uint64_t, stats_data>::reverse_iterator i = tlastscans.rbegin();
|
||||
|
@ -20,9 +20,9 @@
|
||||
#define HWMON_ALT \
|
||||
"/sys/class/hwmon/hwmon0/temp1_input"
|
||||
|
||||
static float linux_cputemp(int core)
|
||||
static double linux_cputemp(int core)
|
||||
{
|
||||
float tc = 0.0;
|
||||
double tc = 0.0;
|
||||
FILE *fd = fopen(HWMON_PATH, "r");
|
||||
uint32_t val = 0;
|
||||
|
||||
@ -33,7 +33,7 @@ static float linux_cputemp(int core)
|
||||
return tc;
|
||||
|
||||
if (fscanf(fd, "%d", &val))
|
||||
tc = val / 1000.0;
|
||||
tc = (double)val / 1000.0;
|
||||
|
||||
fclose(fd);
|
||||
return tc;
|
||||
@ -74,7 +74,7 @@ float cpu_temp(int core)
|
||||
#ifdef WIN32
|
||||
return win32_cputemp(core);
|
||||
#else
|
||||
return linux_cputemp(core);
|
||||
return (float) linux_cputemp(core);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user