From 853acd269f6966d9ff7c28bc2e2cda1fa1abef90 Mon Sep 17 00:00:00 2001 From: stoffu Date: Mon, 2 Dec 2019 13:16:44 +0900 Subject: [PATCH] tx-per-day: more detailed stat on tx size (data format upgraded) --- getdata.py | 3 +- js/tx-per-day.js | 79 +++++++++++++++++++++++++++++++++------- test_framework/daemon.py | 2 +- 3 files changed, 69 insertions(+), 15 deletions(-) diff --git a/getdata.py b/getdata.py index 994a71d..6c8809b 100755 --- a/getdata.py +++ b/getdata.py @@ -93,9 +93,10 @@ class GetData(): outs_total += tx['vout'][k]['amount'] fee = tx['rct_signatures']['txnFee'] if (tx['version'] & 0xff) > 1 else ins_total - outs_total extra_size = len(tx['extra']) + tx_size = len(res_txs['txs'][j]['as_hex']) / 2 if j > 0: txs_str += ',' - txs_str += "[%d,%d,%d,%d,%d,%d,%d]" % (unlock_time, ins, outs, ring_size, fee, extra_size, ins_total) + txs_str += "[%d,%d,%d,%d,%d,%d,%d,%d]" % (unlock_time, ins, outs, ring_size, fee, extra_size, ins_total, tx_size) print('[%d,%d,%d,%d,%d,%d,[%s]],' % (timestamp, nonce, difficulty, reward, block_size, blob_size, txs_str)) print(']') diff --git a/js/tx-per-day.js b/js/tx-per-day.js index 3bd8c75..47e8b6e 100644 --- a/js/tx-per-day.js +++ b/js/tx-per-day.js @@ -13,21 +13,42 @@ function get_chart(chartData, cryptonote_config, offset) { block_date = block_date_new; chartData_tpd.push({ "date": block_date, - "num_txes": 0, - "tx_size_sum": 0, + "tx_sizes": [], }); } - var blk_size = chartData[i][4]; - var blk_blob_size = chartData[i][5]; var num_txes = chartData[i][6].length; - var height = i + (offset === undefined ? 1 : offset.height); - var miner_tx_size = blk_blob_size - cryptonote_config.get_blockheader_size(height) - num_txes * 32 - 1; - chartData_tpd[chartData_tpd.length - 1].num_txes += num_txes; - chartData_tpd[chartData_tpd.length - 1].tx_size_sum += blk_size - miner_tx_size; + for (var j = 0; j < num_txes; ++j) { + var tx_size = chartData[i][6][j][7] + chartData_tpd[chartData_tpd.length - 1].tx_sizes.push(tx_size); + } } for (var i = 0; i < chartData_tpd.length; ++i) { - chartData_tpd[i].tx_size = chartData_tpd[i].num_txes === 0 ? 1 : (chartData_tpd[i].tx_size_sum / chartData_tpd[i].num_txes); - chartData_tpd[i].tx_size_str = formatBytes(chartData_tpd[i].tx_size, 3); + var tpd = chartData_tpd[i]; + tpd.num_txes = tpd.tx_sizes.length; + tpd.tx_size_avg = 0; + tpd.tx_size_max = 0; + tpd.tx_size_min = 100000; + tpd.tx_size_var = 0; + for (var j = 0; j < tpd.num_txes; ++j) { + var tx_size = tpd.tx_sizes[j]; + tpd.tx_size_avg += tx_size; + tpd.tx_size_max = Math.max(tpd.tx_size_max, tx_size); + tpd.tx_size_min = Math.min(tpd.tx_size_min, tx_size); + } + if (tpd.num_txes > 0) + tpd.tx_size_avg /= tpd.num_txes; + for (var j = 0; j < tpd.num_txes; ++j) { + var tx_size = tpd.tx_sizes[j]; + var d = tx_size - tpd.tx_size_avg; + tpd.tx_size_var += d * d; + } + if (tpd.num_txes > 0) + tpd.tx_size_var /= tpd.num_txes; + tpd.tx_size_stddev = Math.sqrt(tpd.tx_size_var); + tpd.tx_size_avg_str = formatBytes(tpd.tx_size_avg, 3); + tpd.tx_size_max_str = formatBytes(tpd.tx_size_max, 3); + tpd.tx_size_min_str = formatBytes(tpd.tx_size_min, 3); + tpd.tx_size_stddev_str = formatBytes(tpd.tx_size_stddev, 3); } var chart = AmCharts.makeChart("chartdiv", { @@ -77,22 +98,54 @@ function get_chart(chartData, cryptonote_config, offset) { "cornerRadius": 10, } },{ - "id": "g_size", + "id": "g_size_avg", "valueAxis": "va_size", "lineColor": "#22b681", "lineThickness": 1, "showBalloon" : true, - "balloonText": "Size: [[tx_size_str]]", + "balloonText": + "Size: [[tx_size_avg_str]]
" + + "Max: [[tx_size_max_str]]
" + + "Min: [[tx_size_min_str]]
" + + "StdDev: [[tx_size_stddev_str]]", "bullet": "round", "bulletBorderAlpha": 1, "bulletColor": "#FFFFFF", "hideBulletsCount": 50, "title": "size", - "valueField": "tx_size", + "valueField": "tx_size_avg", "useLineColorForBulletBorder": true, "balloon":{ "cornerRadius": 10, } + },{ + "id": "g_size_max", + "valueAxis": "va_size", + "type": "step", + "lineColor": "#28d79a", + "lineAlpha": 0.5, + "showBalloon" : false, + "bullet": "round", + "bulletBorderAlpha": 1, + "bulletColor": "#FFFFFF", + "hideBulletsCount": 50, + "title": "Max", + "valueField": "tx_size_max", + "useLineColorForBulletBorder": true, + },{ + "id": "g_size_min", + "valueAxis": "va_size", + "type": "step", + "lineColor": "#18815c", + "lineAlpha": 0.5, + "showBalloon" : false, + "bullet": "round", + "bulletBorderAlpha": 1, + "bulletColor": "#FFFFFF", + "hideBulletsCount": 50, + "title": "Min", + "valueField": "tx_size_min", + "useLineColorForBulletBorder": true, }], "chartScrollbar": { "autoGridCount": true, diff --git a/test_framework/daemon.py b/test_framework/daemon.py index c007c15..89e45d7 100644 --- a/test_framework/daemon.py +++ b/test_framework/daemon.py @@ -83,7 +83,7 @@ class Daemon(object): gettransactions = { 'txs_hashes': tx_hashes, 'decode_as_json': True, - 'prune': True + 'prune': False } return self.rpc.send_request('/gettransactions', gettransactions)