Browse Source

Merge commit 'c9f5823' into cg_merges_20130818a

Conflicts:
	README.RPC
	api.c
	miner.h
Luke Dashjr 12 years ago
parent
commit
9094481004
4 changed files with 58 additions and 1 deletions
  1. 4 0
      README.RPC
  2. 34 1
      api.c
  3. 1 0
      miner.h
  4. 19 0
      miner.php

+ 4 - 0
README.RPC

@@ -430,7 +430,11 @@ Feature Changelog for external applications using the API:
 API V1.25.3
 API V1.25.3
 
 
 Modified API commands:
 Modified API commands:
+ 'devs', 'pga', 'gpu' - add 'Device Hardware%' and 'Device Rejected%'
+ 'pools' - add 'Pool Rejected%' and 'Pool Stale%'
  'setconfig' - add 'http-port' number
  'setconfig' - add 'http-port' number
+ 'summary' - add 'Device Hardware%', 'Device Rejected%', 'Pool Rejected%',
+                 'Pool Stale%'
 
 
 Removed output limitation:
 Removed output limitation:
  All replies can now be longer than the previous limitation of 64k, and will
  All replies can now be longer than the previous limitation of 64k, and will

+ 34 - 1
api.c

@@ -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);
 
 

+ 1 - 0
miner.h

@@ -1400,6 +1400,7 @@ enum api_data_type {
 	API_HS,
 	API_HS,
 	API_DIFF,
 	API_DIFF,
 	API_JSON,
 	API_JSON,
+	API_PERCENT
 };
 };
 
 
 struct api_data {
 struct api_data {

+ 19 - 0
miner.php

@@ -751,7 +751,11 @@ function fmt($section, $name, $value, $when, $alldata)
 	case 'DEVS.Temperature':
 	case 'DEVS.Temperature':
 		$ret = $value.'°C';
 		$ret = $value.'°C';
 		if (!isset($alldata['GPU']))
 		if (!isset($alldata['GPU']))
+		{
+			if ($value == 0)
+				$ret = ' ';
 			break;
 			break;
+		}
 	case 'GPU.GPU Clock':
 	case 'GPU.GPU Clock':
 	case 'DEVS.GPU Clock':
 	case 'DEVS.GPU Clock':
 	case 'GPU.Memory Clock':
 	case 'GPU.Memory Clock':
@@ -938,6 +942,21 @@ function fmt($section, $name, $value, $when, $alldata)
 		if ($value != '')
 		if ($value != '')
 			$ret = number_format((float)$value, 2);
 			$ret = number_format((float)$value, 2);
 		break;
 		break;
+	case 'DEVS.Device Hardware%':
+	case 'DEVS.Device Rejected%':
+	case 'PGA.Device Hardware%':
+	case 'PGA.Device Rejected%':
+	case 'GPU.Device Hardware%':
+	case 'GPU.Device Rejected%':
+	case 'POOL.Pool Rejected%':
+	case 'POOL.Pool Stale%':
+	case 'SUMMARY.Device Hardware%':
+	case 'SUMMARY.Device Rejected%':
+	case 'SUMMARY.Pool Rejected%':
+	case 'SUMMARY.Pool Stale%':
+		if ($value != '')
+			$ret = number_format((float)$value, 2) . '%';
+		break;
 	case 'SUMMARY.Best Share':
 	case 'SUMMARY.Best Share':
 		if ($value != '')
 		if ($value != '')
 			$ret = number_format((float)$value);
 			$ret = number_format((float)$value);