|
@@ -60,7 +60,7 @@ static const char SEPARATOR = '|';
|
|
|
#define SEPSTR "|"
|
|
#define SEPSTR "|"
|
|
|
static const char GPUSEP = ',';
|
|
static const char GPUSEP = ',';
|
|
|
|
|
|
|
|
-static const char *APIVERSION = "1.25";
|
|
|
|
|
|
|
+static const char *APIVERSION = "1.25.3";
|
|
|
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";
|
|
@@ -814,6 +814,7 @@ static struct api_data *api_add_data_full(struct api_data *root, char *name, enu
|
|
|
case API_FREQ:
|
|
case API_FREQ:
|
|
|
case API_HS:
|
|
case API_HS:
|
|
|
case API_DIFF:
|
|
case API_DIFF:
|
|
|
|
|
+ case API_PERCENT:
|
|
|
api_data->data = (void *)malloc(sizeof(double));
|
|
api_data->data = (void *)malloc(sizeof(double));
|
|
|
*((double *)(api_data->data)) = *((double *)data);
|
|
*((double *)(api_data->data)) = *((double *)data);
|
|
|
break;
|
|
break;
|
|
@@ -954,6 +955,11 @@ struct api_data *api_add_json(struct api_data *root, char *name, json_t *data, b
|
|
|
return api_add_data_full(root, name, API_JSON, (void *)data, copy_data);
|
|
return api_add_data_full(root, name, API_JSON, (void *)data, copy_data);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+struct api_data *api_add_percent(struct api_data *root, char *name, double *data, bool copy_data)
|
|
|
|
|
+{
|
|
|
|
|
+ return api_add_data_full(root, name, API_PERCENT, (void *)data, copy_data);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
static struct api_data *print_data(struct api_data *root, char *buf, bool isjson, bool precom)
|
|
static struct api_data *print_data(struct api_data *root, char *buf, bool isjson, bool precom)
|
|
|
{
|
|
{
|
|
|
struct api_data *tmp;
|
|
struct api_data *tmp;
|
|
@@ -1051,6 +1057,9 @@ static struct api_data *print_data(struct api_data *root, char *buf, bool isjson
|
|
|
strcpy(buf, escape);
|
|
strcpy(buf, escape);
|
|
|
free(escape);
|
|
free(escape);
|
|
|
break;
|
|
break;
|
|
|
|
|
+ case API_PERCENT:
|
|
|
|
|
+ sprintf(buf, "%.4f", *((double *)(root->data)) * 100.0);
|
|
|
|
|
+ break;
|
|
|
default:
|
|
default:
|
|
|
applog(LOG_ERR, "API: unknown2 data type %d ignored", root->type);
|
|
applog(LOG_ERR, "API: unknown2 data type %d ignored", root->type);
|
|
|
sprintf(buf, "%s%s%s", quote, UNKNOWN, quote);
|
|
sprintf(buf, "%s%s%s", quote, UNKNOWN, quote);
|
|
@@ -1475,6 +1484,12 @@ static void devstatus_an(struct io_data *io_data, struct cgpu_info *cgpu, bool i
|
|
|
root = api_add_diff(root, "Difficulty Rejected", &(cgpu->diff_rejected), false);
|
|
root = api_add_diff(root, "Difficulty Rejected", &(cgpu->diff_rejected), false);
|
|
|
root = api_add_diff(root, "Last Share Difficulty", &(cgpu->last_share_diff), false);
|
|
root = api_add_diff(root, "Last Share Difficulty", &(cgpu->last_share_diff), false);
|
|
|
root = api_add_time(root, "Last Valid Work", &(cgpu->last_device_valid_work), false);
|
|
root = api_add_time(root, "Last Valid Work", &(cgpu->last_device_valid_work), false);
|
|
|
|
|
+ double hwp = (cgpu->hw_errors + cgpu->diff1) ?
|
|
|
|
|
+ (double)(cgpu->hw_errors) / (double)(cgpu->hw_errors + cgpu->diff1) : 0;
|
|
|
|
|
+ root = api_add_percent(root, "Device Hardware%", &hwp, false);
|
|
|
|
|
+ double rejp = cgpu->diff1 ?
|
|
|
|
|
+ (double)(cgpu->diff_rejected) / (double)(cgpu->diff1) : 0;
|
|
|
|
|
+ root = api_add_percent(root, "Device Rejected%", &rejp, false);
|
|
|
|
|
|
|
|
if (cgpu->drv->get_api_extra_device_status)
|
|
if (cgpu->drv->get_api_extra_device_status)
|
|
|
root = api_add_extra(root, cgpu->drv->get_api_extra_device_status(cgpu));
|
|
root = api_add_extra(root, cgpu->drv->get_api_extra_device_status(cgpu));
|
|
@@ -1884,6 +1899,12 @@ static void poolstatus(struct io_data *io_data, __maybe_unused SOCKETTYPE c, __m
|
|
|
root = api_add_uint64(root, "Best Share", &(pool->best_diff), true);
|
|
root = api_add_uint64(root, "Best Share", &(pool->best_diff), true);
|
|
|
if (pool->admin_msg)
|
|
if (pool->admin_msg)
|
|
|
root = api_add_escape(root, "Message", pool->admin_msg, true);
|
|
root = api_add_escape(root, "Message", pool->admin_msg, true);
|
|
|
|
|
+ double rejp = (pool->diff_accepted + pool->diff_rejected + pool->diff_stale) ?
|
|
|
|
|
+ (double)(pool->diff_rejected) / (double)(pool->diff_accepted + pool->diff_rejected + pool->diff_stale) : 0;
|
|
|
|
|
+ root = api_add_percent(root, "Pool Rejected%", &rejp, false);
|
|
|
|
|
+ double stalep = (pool->diff_accepted + pool->diff_rejected + pool->diff_stale) ?
|
|
|
|
|
+ (double)(pool->diff_stale) / (double)(pool->diff_accepted + pool->diff_rejected + pool->diff_stale) : 0;
|
|
|
|
|
+ root = api_add_percent(root, "Pool Stale%", &stalep, false);
|
|
|
|
|
|
|
|
root = print_data(root, buf, isjson, isjson && (i > 0));
|
|
root = print_data(root, buf, isjson, isjson && (i > 0));
|
|
|
io_add(io_data, buf);
|
|
io_add(io_data, buf);
|
|
@@ -1940,6 +1961,18 @@ static void summary(struct io_data *io_data, __maybe_unused SOCKETTYPE c, __mayb
|
|
|
root = api_add_diff(root, "Difficulty Rejected", &(total_diff_rejected), true);
|
|
root = api_add_diff(root, "Difficulty Rejected", &(total_diff_rejected), true);
|
|
|
root = api_add_diff(root, "Difficulty Stale", &(total_diff_stale), true);
|
|
root = api_add_diff(root, "Difficulty Stale", &(total_diff_stale), true);
|
|
|
root = api_add_uint64(root, "Best Share", &(best_diff), true);
|
|
root = api_add_uint64(root, "Best Share", &(best_diff), true);
|
|
|
|
|
+ double hwp = (hw_errors + total_diff1) ?
|
|
|
|
|
+ (double)(hw_errors) / (double)(hw_errors + total_diff1) : 0;
|
|
|
|
|
+ root = api_add_percent(root, "Device Hardware%", &hwp, false);
|
|
|
|
|
+ double rejp = total_diff1 ?
|
|
|
|
|
+ (double)(total_diff_rejected) / (double)(total_diff1) : 0;
|
|
|
|
|
+ root = api_add_percent(root, "Device Rejected%", &rejp, false);
|
|
|
|
|
+ double prejp = (total_diff_accepted + total_diff_rejected + total_diff_stale) ?
|
|
|
|
|
+ (double)(total_diff_rejected) / (double)(total_diff_accepted + total_diff_rejected + total_diff_stale) : 0;
|
|
|
|
|
+ root = api_add_percent(root, "Pool Rejected%", &prejp, false);
|
|
|
|
|
+ double stalep = (total_diff_accepted + total_diff_rejected + total_diff_stale) ?
|
|
|
|
|
+ (double)(total_diff_stale) / (double)(total_diff_accepted + total_diff_rejected + total_diff_stale) : 0;
|
|
|
|
|
+ root = api_add_percent(root, "Pool Stale%", &stalep, false);
|
|
|
|
|
|
|
|
mutex_unlock(&hash_lock);
|
|
mutex_unlock(&hash_lock);
|
|
|
|
|
|