From c1eae36f7bf2299fb49b1eeeba49345e5dc7a46a Mon Sep 17 00:00:00 2001 From: Kano Date: Tue, 15 Jan 2013 01:13:00 +1100 Subject: [PATCH] API stats - include pool network bytes + in miner.php --- api.c | 2 ++ miner.h | 2 ++ miner.php | 16 +++++++++++----- util.c | 35 +++++++++++++++++++++++++++++++---- 4 files changed, 46 insertions(+), 9 deletions(-) diff --git a/api.c b/api.c index ce598683..fe593a76 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 a7b6fa15..f9e616d0 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 9215a21e..717e26aa 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 e628af45..9283955c 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);