|
|
@ -161,7 +161,7 @@ static const char SEPARATOR = '|'; |
|
|
|
#define SEPSTR "|" |
|
|
|
#define SEPSTR "|" |
|
|
|
static const char GPUSEP = ','; |
|
|
|
static const char GPUSEP = ','; |
|
|
|
|
|
|
|
|
|
|
|
static const char *APIVERSION = "1.11"; |
|
|
|
static const char *APIVERSION = "1.12"; |
|
|
|
static const char *DEAD = "Dead"; |
|
|
|
static const char *DEAD = "Dead"; |
|
|
|
static const char *SICK = "Sick"; |
|
|
|
static const char *SICK = "Sick"; |
|
|
|
static const char *NOSTART = "NoStart"; |
|
|
|
static const char *NOSTART = "NoStart"; |
|
|
@ -2008,7 +2008,7 @@ void dosave(__maybe_unused SOCKETTYPE c, char *param, bool isjson) |
|
|
|
ptr = NULL; |
|
|
|
ptr = NULL; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int itemstats(int i, char *id, struct cgminer_stats *stats, char *extra, bool isjson) |
|
|
|
static int itemstats(int i, char *id, struct cgminer_stats *stats, struct cgminer_pool_stats *pool_stats, char *extra, bool isjson) |
|
|
|
{ |
|
|
|
{ |
|
|
|
char buf[TMPBUFSIZ]; |
|
|
|
char buf[TMPBUFSIZ]; |
|
|
|
|
|
|
|
|
|
|
@ -2018,13 +2018,31 @@ static int itemstats(int i, char *id, struct cgminer_stats *stats, char *extra, |
|
|
|
extra = (char *)BLANK; |
|
|
|
extra = (char *)BLANK; |
|
|
|
|
|
|
|
|
|
|
|
sprintf(buf, isjson |
|
|
|
sprintf(buf, isjson |
|
|
|
? "%s{\"STATS\":%d,\"ID\":\"%s\",\"Elapsed\":%.0f,\"Calls\":%d,\"Wait\":%ld.%06ld,\"Max\":%ld.%06ld,\"Min\":%ld.%06ld%s%s}" |
|
|
|
? "%s{\"STATS\":%d,\"ID\":\"%s\",\"Elapsed\":%.0f,\"Calls\":%d,\"Wait\":%ld.%06ld,\"Max\":%ld.%06ld,\"Min\":%ld.%06ld" |
|
|
|
: "%sSTATS=%d,ID=%s,Elapsed=%.0f,Calls=%d,Wait=%ld.%06ld,Max=%ld.%06ld,Min=%ld.%06ld%s%s" SEPSTR, |
|
|
|
: "%sSTATS=%d,ID=%s,Elapsed=%.0f,Calls=%d,Wait=%ld.%06ld,Max=%ld.%06ld,Min=%ld.%06ld", |
|
|
|
(isjson && (i > 0)) ? COMMA : BLANK, |
|
|
|
(isjson && (i > 0)) ? COMMA : BLANK, |
|
|
|
i, id, total_secs, stats->getwork_calls, |
|
|
|
i, id, total_secs, stats->getwork_calls, |
|
|
|
stats->getwork_wait.tv_sec, stats->getwork_wait.tv_usec, |
|
|
|
stats->getwork_wait.tv_sec, stats->getwork_wait.tv_usec, |
|
|
|
stats->getwork_wait_max.tv_sec, stats->getwork_wait_max.tv_usec, |
|
|
|
stats->getwork_wait_max.tv_sec, stats->getwork_wait_max.tv_usec, |
|
|
|
stats->getwork_wait_min.tv_sec, stats->getwork_wait_min.tv_usec, |
|
|
|
stats->getwork_wait_min.tv_sec, stats->getwork_wait_min.tv_usec); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
strcat(io_buffer, buf); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (pool_stats) { |
|
|
|
|
|
|
|
sprintf(buf, isjson |
|
|
|
|
|
|
|
? ",\"Pool Calls\":%d,\"Pool Attempts\":%d,\"Pool Wait\":%ld.%06ld,\"Pool Max\":%ld.%06ld,\"Pool Min\":%ld.%06ld" |
|
|
|
|
|
|
|
: ",Pool Calls=%d,Pool Attempts=%d,Pool Wait=%ld.%06ld,Pool Max=%ld.%06ld,Pool Min=%ld.%06ld", |
|
|
|
|
|
|
|
pool_stats->getwork_calls, pool_stats->getwork_attempts, |
|
|
|
|
|
|
|
pool_stats->getwork_wait.tv_sec, pool_stats->getwork_wait.tv_usec, |
|
|
|
|
|
|
|
pool_stats->getwork_wait_max.tv_sec, pool_stats->getwork_wait_max.tv_usec, |
|
|
|
|
|
|
|
pool_stats->getwork_wait_min.tv_sec, pool_stats->getwork_wait_min.tv_usec); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
strcat(io_buffer, buf); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sprintf(buf, isjson |
|
|
|
|
|
|
|
? "%s%s}" |
|
|
|
|
|
|
|
: "%s%s" SEPSTR, |
|
|
|
*extra ? COMMA : BLANK, extra); |
|
|
|
*extra ? COMMA : BLANK, extra); |
|
|
|
|
|
|
|
|
|
|
|
strcat(io_buffer, buf); |
|
|
|
strcat(io_buffer, buf); |
|
|
@ -2058,7 +2076,7 @@ static void minerstats(__maybe_unused SOCKETTYPE c, __maybe_unused char *param, |
|
|
|
extra[0] = '\0'; |
|
|
|
extra[0] = '\0'; |
|
|
|
|
|
|
|
|
|
|
|
sprintf(id, "%s%d", cgpu->api->name, cgpu->device_id); |
|
|
|
sprintf(id, "%s%d", cgpu->api->name, cgpu->device_id); |
|
|
|
i = itemstats(i, id, &(cgpu->cgminer_stats), extra, isjson); |
|
|
|
i = itemstats(i, id, &(cgpu->cgminer_stats), NULL, extra, isjson); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -2066,7 +2084,7 @@ static void minerstats(__maybe_unused SOCKETTYPE c, __maybe_unused char *param, |
|
|
|
struct pool *pool = pools[j]; |
|
|
|
struct pool *pool = pools[j]; |
|
|
|
|
|
|
|
|
|
|
|
sprintf(id, "POOL%d", j); |
|
|
|
sprintf(id, "POOL%d", j); |
|
|
|
i = itemstats(i, id, &(pool->cgminer_stats), NULL, isjson); |
|
|
|
i = itemstats(i, id, &(pool->cgminer_stats), &(pool->cgminer_pool_stats), NULL, isjson); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (isjson) |
|
|
|
if (isjson) |
|
|
|