API stats - include pool network bytes + in miner.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
diff --git a/api.c b/api.c
index ce59868..fe593a7 100644
--- a/api.c
+++ b/api.c
@@ -2915,6 +2915,8 @@ static int itemstats(struct io_data *io_data, int i, char *id, struct cgminer_st
root = api_add_uint64(root, "Bytes Sent", &(pool_stats->bytes_sent), false);
root = api_add_uint64(root, "Times Recv", &(pool_stats->times_received), false);
root = api_add_uint64(root, "Bytes Recv", &(pool_stats->bytes_received), false);
+ root = api_add_uint64(root, "Net Bytes Sent", &(pool_stats->net_bytes_sent), false);
+ root = api_add_uint64(root, "Net Bytes Recv", &(pool_stats->net_bytes_received), false);
}
if (extra)
diff --git a/miner.h b/miner.h
index a7b6fa1..f9e616d 100644
--- a/miner.h
+++ b/miner.h
@@ -375,8 +375,10 @@ struct cgminer_pool_stats {
uint32_t max_diff_count;
uint64_t times_sent;
uint64_t bytes_sent;
+ uint64_t net_bytes_sent;
uint64_t times_received;
uint64_t bytes_received;
+ uint64_t net_bytes_received;
};
struct cgpu_info {
diff --git a/miner.php b/miner.php
index 9215a21..717e26a 100644
--- a/miner.php
+++ b/miner.php
@@ -116,16 +116,17 @@ $poolspage = array(
'POOL.Difficulty Rejected=Diff Rej',
'POOL.Has Stratum=Stratum', 'POOL.Stratum Active=StrAct',
'POOL.Has GBT=GBT', 'STATS.Times Sent=TSent',
- 'STATS.Bytes Sent=BSent', 'STATS.Times Recv=TRecv',
- 'STATS.Bytes Recv=BRecv'));
+ 'STATS.Bytes Sent=BSent', 'STATS.Net Bytes Sent=NSent',
+ 'STATS.Times Recv=TRecv', 'STATS.Bytes Recv=BRecv',
+ 'STATS.Net Bytes Recv=NRecv'));
#
$poolssum = array(
'SUMMARY' => array('MHS av', 'Found Blocks', 'Accepted',
'Rejected', 'Utility', 'Hardware Errors',
'Work Utility'),
'POOL+STATS' => array('POOL.Difficulty Accepted', 'POOL.Difficulty Rejected',
- 'STATS.Times Sent', 'STATS.Bytes Sent',
- 'STATS.Times Recv', 'STATS.Bytes Recv'));
+ 'STATS.Times Sent', 'STATS.Bytes Sent', 'STATS.Net Bytes Sent',
+ 'STATS.Times Recv', 'STATS.Bytes Recv', 'STATS.Net Bytes Recv'));
#
$poolsext = array(
'POOL+STATS' => array(
@@ -133,7 +134,8 @@ $poolsext = array(
'group' => array('POOL.URL', 'POOL.Has Stratum', 'POOL.Stratum Active', 'POOL.Has GBT'),
'calc' => array('POOL.Difficulty Accepted' => 'sum', 'POOL.Difficulty Rejected' => 'sum',
'STATS.Times Sent' => 'sum', 'STATS.Bytes Sent' => 'sum',
- 'STATS.Times Recv' => 'sum', 'STATS.Bytes Recv' => 'sum'),
+ 'STATS.Net Bytes Sent' => 'sum', 'STATS.Times Recv' => 'sum',
+ 'STATS.Bytes Recv' => 'sum', 'STATS.Net Bytes Recv' => 'sum'),
'having' => array(array('STATS.Bytes Recv', '>', 0)))
);
@@ -850,12 +852,16 @@ function fmt($section, $name, $value, $when, $alldata)
case 'total.Diff1 Work':
case 'STATS.Times Sent':
case 'STATS.Bytes Sent':
+ case 'STATS.Net Bytes Sent':
case 'STATS.Times Recv':
case 'STATS.Bytes Recv':
+ case 'STATS.Net Bytes Recv':
case 'total.Times Sent':
case 'total.Bytes Sent':
+ case 'total.Net Bytes Sent':
case 'total.Times Recv':
case 'total.Bytes Recv':
+ case 'total.Net Bytes Recv':
$parts = explode('.', $value, 2);
if (count($parts) == 1)
$dec = '';
diff --git a/util.c b/util.c
index e628af4..9283955 100644
--- a/util.c
+++ b/util.c
@@ -261,6 +261,30 @@ static void set_nettime(void)
wr_unlock(&netacc_lock);
}
+static int curl_debug_cb(__maybe_unused CURL *handle, curl_infotype type,
+ __maybe_unused unsigned char *data, size_t size,
+ void *userdata)
+{
+ struct pool *pool = (struct pool *)userdata;
+
+ switch(type) {
+ case CURLINFO_HEADER_IN:
+ case CURLINFO_DATA_IN:
+ case CURLINFO_SSL_DATA_IN:
+ pool->cgminer_pool_stats.net_bytes_received += size;
+ break;
+ case CURLINFO_HEADER_OUT:
+ case CURLINFO_DATA_OUT:
+ case CURLINFO_SSL_DATA_OUT:
+ pool->cgminer_pool_stats.net_bytes_sent += size;
+ break;
+ case CURLINFO_TEXT:
+ default:
+ break;
+ }
+ return 0;
+}
+
json_t *json_rpc_call(CURL *curl, const char *url,
const char *userpass, const char *rpc_req,
bool probe, bool longpoll, int *rolltime,
@@ -287,10 +311,11 @@ json_t *json_rpc_call(CURL *curl, const char *url,
probing = !pool->probed;
curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout);
-#if 0 /* Disable curl debugging since it spews to stderr */
- if (opt_protocol)
- curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
-#endif
+ // CURLOPT_VERBOSE won't write to stderr if we use CURLOPT_DEBUGFUNCTION
+ curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, curl_debug_cb);
+ curl_easy_setopt(curl, CURLOPT_DEBUGDATA, (void *)pool);
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
+
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_ENCODING, "");
@@ -912,6 +937,7 @@ static bool __stratum_send(struct pool *pool, char *s, ssize_t len)
pool->cgminer_pool_stats.times_sent++;
pool->cgminer_pool_stats.bytes_sent += ssent;
+ pool->cgminer_pool_stats.net_bytes_sent += ssent;
return true;
}
@@ -1041,6 +1067,7 @@ char *recv_line(struct pool *pool)
pool->cgminer_pool_stats.times_received++;
pool->cgminer_pool_stats.bytes_received += len;
+ pool->cgminer_pool_stats.net_bytes_received += len;
out:
if (!sret)
clear_sock(pool);