Browse Source

Privacy fixes

master
webworker01 5 years ago
parent
commit
647b15c568
  1. 6
      libs/api.js
  2. 18
      libs/stats.js
  3. 8
      libs/website.js
  4. 2
      website/piratepool.io/pages/miner_stats.html
  5. 2
      website/piratepool.io/pages/workers.html
  6. 246
      website/piratepool.io/static/miner_stats.js
  7. 13
      website/piratepool.io/static/workers.js

6
libs/api.js

@ -43,9 +43,9 @@ module.exports = function(logger, portalConfig, poolConfigs){
for(var pool in portalStats.stats.pools) {
filterIterate(portalStats.stats.pools[pool].pending.blocks, {split:{by:':', index:3}}, 'miner-');
for (payment in portalStats.stats.pools[pool].payments) {
filterIterate(portalStats.stats.pools[pool].payments[payment].amounts, {key: true}, 'miner-', );
filterIterate(portalStats.stats.pools[pool].payments[payment].balances, {key: true}, 'miner-', );
filterIterate(portalStats.stats.pools[pool].payments[payment].work, {key: true}, 'miner-', );
filterIterate(portalStats.stats.pools[pool].payments[payment].amounts, {key: true}, 'miner-');
filterIterate(portalStats.stats.pools[pool].payments[payment].balances, {key: true}, 'miner-');
filterIterate(portalStats.stats.pools[pool].payments[payment].work, {key: true}, 'miner-');
}
poolBlocks.push({name: pool, pending: portalStats.stats.pools[pool].pending, payments: portalStats.stats.pools[pool].payments});
}

18
libs/stats.js

@ -100,23 +100,17 @@ module.exports = function(logger, portalConfig, poolConfigs){
var allBlocks = {};
async.each(_this.stats.pools, function(pool, pcb) {
if (_this.stats.pools[pool.name].pending && _this.stats.pools[pool.name].pending.blocks)
if (_this.stats.pools[pool.name].pending && _this.stats.pools[pool.name].pending.blocks) {
for (var i=0; i<_this.stats.pools[pool.name].pending.blocks.length; i++) {
let blockoutput = _this.stats.pools[pool.name].pending.blocks[i].split(':');
blockoutput[3] = pool.name + '-miner';
blockoutput = blockoutput.join(':');
allBlocks[pool.name+"-"+_this.stats.pools[pool.name].pending.blocks[i].split(':')[2]] = blockoutput;
allBlocks[pool.name+"-"+_this.stats.pools[pool.name].pending.blocks[i].split(':')[2]] = _this.stats.pools[pool.name].pending.blocks[i];
}
}
if (_this.stats.pools[pool.name].confirmed && _this.stats.pools[pool.name].confirmed.blocks)
if (_this.stats.pools[pool.name].confirmed && _this.stats.pools[pool.name].confirmed.blocks) {
for (var i=0; i<_this.stats.pools[pool.name].confirmed.blocks.length; i++) {
let blockoutput = _this.stats.pools[pool.name].confirmed.blocks[i].split(':');
blockoutput[3] = pool.name + '-miner';
blockoutput = blockoutput.join(':');
allBlocks[pool.name+"-"+_this.stats.pools[pool.name].confirmed.blocks[i].split(':')[2]] = blockoutput;
allBlocks[pool.name+"-"+_this.stats.pools[pool.name].confirmed.blocks[i].split(':')[2]] = _this.stats.pools[pool.name].confirmed.blocks[i];
}
}
pcb();
}, function(err) {

8
libs/website.js

@ -124,12 +124,12 @@ module.exports = function(logger){
filterIterate(portalStats.stats.pools[pool].currentRoundTimes, {key: true}, 'miner-');
filterIterate(portalStats.stats.pools[pool].miners, {key: true, prop: ['name']}, 'miner-', );
filterIterate(portalStats.stats.pools[pool].pending.blocks, {split:{by:':', index:3}}, 'miner-');
filterIterate(portalStats.stats.pools[pool].workers, {key: true, prop: ['name']}, 'worker-', );
filterIterate(portalStats.stats.pools[pool].workers, {key: true, prop: ['name']}, 'worker-');
for (payment in portalStats.stats.pools[pool].payments) {
filterIterate(portalStats.stats.pools[pool].payments[payment].amounts, {key: true}, 'miner-', );
filterIterate(portalStats.stats.pools[pool].payments[payment].balances, {key: true}, 'miner-', );
filterIterate(portalStats.stats.pools[pool].payments[payment].work, {key: true}, 'miner-', );
filterIterate(portalStats.stats.pools[pool].payments[payment].amounts, {key: true}, 'miner-');
filterIterate(portalStats.stats.pools[pool].payments[payment].balances, {key: true}, 'miner-');
filterIterate(portalStats.stats.pools[pool].payments[payment].work, {key: true}, 'miner-');
}
}

2
website/piratepool.io/pages/miner_stats.html

@ -27,7 +27,7 @@
<div id="boxesWorkers" class="pure-g boxStats"> </div>
<script>
var _miner = "{{=String(it.stats.address).split(".")[0]}}";
var _miner = "{{=String(it.stats.address).split('.')[0]}}";
var _workerCount = 0;
document.querySelector('main').appendChild(document.createElement('script')).src = '/static/miner_stats.js';
</script>

2
website/piratepool.io/pages/workers.html

@ -35,7 +35,7 @@
{{ for(var worker in it.stats.pools[pool].miners) { }}
{{ minerindex++; }}
{{var workerstat = it.stats.pools[pool].miners[worker];}}
<tr id="worker{{=minerindex}}" data-hashrate="{{=workerstat.hashrate}}">
<tr id="miner-{{=minerindex}}" data-hashrate="{{=workerstat.hashrate}}">
<td><span class="responsiveTableLabel"><i class="far fa-address-card fa-fw"></i></span>Miner #{{=minerindex}}</td>
<td><span class="responsiveTableLabel"><i class="fas fa-cog fa-fw"></i> Shares: </span><span>{{=bigNumber(workerstat.currRoundShares)}}</span></td>
<td><span class="responsiveTableLabel"><i class="fas fa-bullseye fa-fw"></i> Efficiency: </span><span>{{? workerstat.shares > 0}} {{=Math.floor(10000 * workerstat.shares / (workerstat.shares + workerstat.invalidshares)) / 100}}% {{??}} 0% {{?}}</span></td>

246
website/piratepool.io/static/miner_stats.js

@ -19,7 +19,7 @@ $(function() {
for (var w in minerStatData.workers) { _workerCount++; }
buildMinerChartData();
displayMinerCharts();
rebuildWorkerDisplay();
rebuildWorkerDisplay();
updateMinerStats();
});
@ -57,96 +57,96 @@ $(function() {
});
function getWorkerNameFromAddress(w) {
var worker = w;
if (w.split(".").length > 1) {
worker = w.split(".")[1];
if (worker == null || worker.length < 1) {
worker = "noname";
}
} else {
worker = "noname";
}
return worker;
var worker = w;
if (w.split(".").length > 1) {
worker = w.split(".")[1];
if (worker == null || worker.length < 1) {
worker = "noname";
}
} else {
worker = "noname";
}
return worker;
}
function buildMinerChartData(){
var workers = {};
for (var w in minerStatData.history) {
var worker = getWorkerNameFromAddress(w);
var a = workers[worker] = (workers[worker] || {
hashrate: []
});
for (var wh in minerStatData.history[w]) {
a.hashrate.push([minerStatData.history[w][wh].time * 1000, minerStatData.history[w][wh].hashrate]);
}
if (a.hashrate.length > workerHistoryMax) {
workerHistoryMax = a.hashrate.length;
}
}
var i=0;
for (var w in minerStatData.history) {
var worker = getWorkerNameFromAddress(w);
var a = workers[worker] = (workers[worker] || {
hashrate: []
});
for (var wh in minerStatData.history[w]) {
a.hashrate.push([minerStatData.history[w][wh].time * 1000, minerStatData.history[w][wh].hashrate]);
}
if (a.hashrate.length > workerHistoryMax) {
workerHistoryMax = a.hashrate.length;
}
}
var i=0;
workerHashrateData = [];
for (var worker in workers){
workerHashrateData.push({
key: worker,
//disabled: (i > Math.min((_workerCount-1), 3)),
disabled: false,
//disabled: (i > Math.min((_workerCount-1), 3)),
disabled: false,
values: workers[worker].hashrate
});
i++;
i++;
}
}
function updateMinerChartData(){
var workers = {};
for (var w in minerStatData.history) {
var worker = getWorkerNameFromAddress(w);
// get a reference to lastest workerhistory
for (var wh in minerStatData.history[w]) { }
//var wh = minerStatData.history[w][minerStatData.history[w].length - 1];
var foundWorker = false;
for (var i = 0; i < workerHashrateData.length; i++) {
if (workerHashrateData[i].key === worker) {
foundWorker = true;
if (workerHashrateData[i].values.length >= workerHistoryMax) {
workerHashrateData[i].values.shift();
}
workerHashrateData[i].values.push([minerStatData.history[w][wh].time * 1000, minerStatData.history[w][wh].hashrate]);
break;
}
}
if (!foundWorker) {
var hashrate = [];
hashrate.push([minerStatData.history[w][wh].time * 1000, minerStatData.history[w][wh].hashrate]);
workerHashrateData.push({
key: worker,
values: hashrate
});
rebuildWorkerDisplay();
return true;
}
}
triggerMinerChartUpdates();
return false;
for (var w in minerStatData.history) {
var worker = getWorkerNameFromAddress(w);
// get a reference to lastest workerhistory
for (var wh in minerStatData.history[w]) { }
//var wh = minerStatData.history[w][minerStatData.history[w].length - 1];
var foundWorker = false;
for (var i = 0; i < workerHashrateData.length; i++) {
if (workerHashrateData[i].key === worker) {
foundWorker = true;
if (workerHashrateData[i].values.length >= workerHistoryMax) {
workerHashrateData[i].values.shift();
}
workerHashrateData[i].values.push([minerStatData.history[w][wh].time * 1000, minerStatData.history[w][wh].hashrate]);
break;
}
}
if (!foundWorker) {
var hashrate = [];
hashrate.push([minerStatData.history[w][wh].time * 1000, minerStatData.history[w][wh].hashrate]);
workerHashrateData.push({
key: worker,
values: hashrate
});
rebuildWorkerDisplay();
return true;
}
}
triggerMinerChartUpdates();
return false;
}
function calculateAverageMinerHashrate(worker) {
var count = 0;
var total = 1;
var avg = 0;
for (var i = 0; i < workerHashrateData.length; i++) {
count = 0;
for (var ii = 0; ii < workerHashrateData[i].values.length; ii++) {
if (worker == null || workerHashrateData[i].key === worker) {
count++;
avg += parseFloat(workerHashrateData[i].values[ii][1]);
}
}
if (count > total)
total = count;
}
avg = avg / total;
return avg;
var count = 0;
var total = 1;
var avg = 0;
for (var i = 0; i < workerHashrateData.length; i++) {
count = 0;
for (var ii = 0; ii < workerHashrateData[i].values.length; ii++) {
if (worker == null || workerHashrateData[i].key === worker) {
count++;
avg += parseFloat(workerHashrateData[i].values[ii][1]);
}
}
if (count > total)
total = count;
}
avg = avg / total;
return avg;
}
function triggerMinerChartUpdates(){
@ -172,66 +172,66 @@ function displayMinerCharts() {
}
function updateMinerStats() {
totalHash = minerStatData.totalHash;
totalPaid = minerStatData.paid;
totalBal = minerStatData.balance;
totalImmature = minerStatData.immature;
totalShares = minerStatData.totalShares;
// do some calculations
var _blocktime = 250;
var _networkHashRate = parseFloat(minerStatData.networkSols) * 1.2;
var _myHashRate = (totalHash / 1000000) * 2;
var luckDays = ((_networkHashRate / _myHashRate * _blocktime) / (24 * 60 * 60)).toFixed(3);
// update miner stats
$("#statsHashrate").text(getReadableHashRateString(totalHash));
$("#statsHashrateAvg").text(getReadableHashRateString(calculateAverageMinerHashrate(null)));
$("#statsLuckDays").text(luckDays);
$("#statsTotalImmature").text(totalImmature);
$("#statsTotalBal").text(totalBal);
$("#statsTotalPaid").text(totalPaid);
$("#statsTotalShares").text(bigNumber(totalShares));
totalHash = minerStatData.totalHash;
totalPaid = minerStatData.paid;
totalBal = minerStatData.balance;
totalImmature = minerStatData.immature;
totalShares = minerStatData.totalShares;
// do some calculations
var _blocktime = 250;
var _networkHashRate = parseFloat(minerStatData.networkSols) * 1.2;
var _myHashRate = (totalHash / 1000000) * 2;
var luckDays = ((_networkHashRate / _myHashRate * _blocktime) / (24 * 60 * 60)).toFixed(3);
// update miner stats
$("#statsHashrate").text(getReadableHashRateString(totalHash));
$("#statsHashrateAvg").text(getReadableHashRateString(calculateAverageMinerHashrate(null)));
$("#statsLuckDays").text(luckDays);
$("#statsTotalImmature").text(totalImmature);
$("#statsTotalBal").text(totalBal);
$("#statsTotalPaid").text(totalPaid);
$("#statsTotalShares").text(bigNumber(totalShares));
}
function updateWorkerStats() {
// update worker stats
var i=0;
for (var w in minerStatData.workers) { i++;
var htmlSafeWorkerName = w.split('.').join('_').replace(/[^\w\s]/gi, '');
var saneWorkerName = getWorkerNameFromAddress(w);
$("#statsHashrate"+htmlSafeWorkerName).text(getReadableHashRateString(minerStatData.workers[w].hashrate));
$("#statsHashrateAvg"+htmlSafeWorkerName).text(getReadableHashRateString(calculateAverageMinerHashrate(saneWorkerName)));
$("#statsLuckDays"+htmlSafeWorkerName).text(minerStatData.workers[w].luckDays);
$("#statsPaid"+htmlSafeWorkerName).text(minerStatData.workers[w].paid);
$("#statsBalance"+htmlSafeWorkerName).text(minerStatData.workers[w].balance);
$("#statsShares"+htmlSafeWorkerName).text(bigNumber(minerStatData.workers[w].currRoundShares));
$("#statsDiff"+htmlSafeWorkerName).text(bigNumber(zeroOrGreater(minerStatData.workers[w].diff)));
}
// update worker stats
var i=0;
for (var w in minerStatData.workers) { i++;
var htmlSafeWorkerName = w.split('.').join('_').replace(/[^\w\s]/gi, '');
var saneWorkerName = getWorkerNameFromAddress(w);
$("#statsHashrate"+htmlSafeWorkerName).text(getReadableHashRateString(minerStatData.workers[w].hashrate));
$("#statsHashrateAvg"+htmlSafeWorkerName).text(getReadableHashRateString(calculateAverageMinerHashrate(saneWorkerName)));
$("#statsLuckDays"+htmlSafeWorkerName).text(minerStatData.workers[w].luckDays);
$("#statsPaid"+htmlSafeWorkerName).text(minerStatData.workers[w].paid);
$("#statsBalance"+htmlSafeWorkerName).text(minerStatData.workers[w].balance);
$("#statsShares"+htmlSafeWorkerName).text(bigNumber(minerStatData.workers[w].currRoundShares));
$("#statsDiff"+htmlSafeWorkerName).text(bigNumber(zeroOrGreater(minerStatData.workers[w].diff)));
}
}
function addWorkerToDisplay(name, htmlSafeName, workerObj) {
var htmlToAdd = "";
htmlToAdd ='<div class="pure-u-1-4 pure-responsive-disable"><div class="l-box">';
var htmlToAdd = "";
htmlToAdd ='<div class="pure-u-1-4 pure-responsive-disable"><div class="l-box">';
htmlToAdd+='<h3 class="boxLowerHeader">';
htmlToAdd+=(htmlSafeName.indexOf("_") >= 0) ? htmlSafeName.substr(htmlSafeName.indexOf("_")+1,htmlSafeName.length) : 'noname';
htmlToAdd+=(htmlSafeName.indexOf("_") >= 0) ? htmlSafeName.substr(htmlSafeName.indexOf("_")+1,htmlSafeName.length) : 'noname';
htmlToAdd+='</h3>';
htmlToAdd+='<div class="boxStatsList"><ul>';
htmlToAdd+='<li><i class="fas fa-tachometer-alt fa-fw"></i> <span id="statsHashrate'+htmlSafeName+'">'+getReadableHashRateString(workerObj.hashrate)+'</span> (Now)</li>';
htmlToAdd+='<li><i class="fas fa-tachometer-alt fa-fw"></i> <span id="statsHashrateAvg'+htmlSafeName+'">'+getReadableHashRateString(calculateAverageMinerHashrate(name))+'</span> (Avg)</li>';
htmlToAdd+='<li><i class="fas fa-unlock-alt fa-fw"></i> Diff: <span id="statsDiff'+htmlSafeName+'">'+bigNumber(zeroOrGreater(workerObj.diff))+'</span></li>';
htmlToAdd+='<li><i class="fas fa-cog fa-fw"></i> Shares: <span id="statsShares'+htmlSafeName+'">'+bigNumber(workerObj.currRoundShares)+'</span></li>';
htmlToAdd+='<li><i class="fas fa-dice fa-fw"></i> Luck <span id="statsLuckDays'+htmlSafeName+'">'+workerObj.luckDays+'</span> Days</li>';
htmlToAdd+='<li><i class="fas fa-piggy-bank fa-fw"></i> Bal: <span id="statsBalance'+htmlSafeName+'">'+workerObj.balance+'</span></li>';
htmlToAdd+='<li><i class="fas fa-money-bill-wave fa-fw"></i> Paid: <span id="statsPaid'+htmlSafeName+'">'+workerObj.paid+'</span></li>';
htmlToAdd+='</ul></div></div></div>';
$("#boxesWorkers").html($("#boxesWorkers").html()+htmlToAdd);
htmlToAdd+='<li><i class="fas fa-tachometer-alt fa-fw"></i> <span id="statsHashrate'+htmlSafeName+'">'+getReadableHashRateString(workerObj.hashrate)+'</span> (Now)</li>';
htmlToAdd+='<li><i class="fas fa-tachometer-alt fa-fw"></i> <span id="statsHashrateAvg'+htmlSafeName+'">'+getReadableHashRateString(calculateAverageMinerHashrate(name))+'</span> (Avg)</li>';
htmlToAdd+='<li><i class="fas fa-unlock-alt fa-fw"></i> Diff: <span id="statsDiff'+htmlSafeName+'">'+bigNumber(zeroOrGreater(workerObj.diff))+'</span></li>';
htmlToAdd+='<li><i class="fas fa-cog fa-fw"></i> Shares: <span id="statsShares'+htmlSafeName+'">'+bigNumber(workerObj.currRoundShares)+'</span></li>';
htmlToAdd+='<li><i class="fas fa-dice fa-fw"></i> Luck <span id="statsLuckDays'+htmlSafeName+'">'+workerObj.luckDays+'</span> Days</li>';
htmlToAdd+='<li><i class="fas fa-piggy-bank fa-fw"></i> Bal: <span id="statsBalance'+htmlSafeName+'">'+workerObj.balance+'</span></li>';
htmlToAdd+='<li><i class="fas fa-money-bill-wave fa-fw"></i> Paid: <span id="statsPaid'+htmlSafeName+'">'+workerObj.paid+'</span></li>';
htmlToAdd+='</ul></div></div></div>';
$("#boxesWorkers").html($("#boxesWorkers").html()+htmlToAdd);
}
function rebuildWorkerDisplay() {
$("#boxesWorkers").html("");
var i=0;
for (var w in minerStatData.workers) { i++;
var htmlSafeWorkerName = w.split('.').join('_').replace(/[^\w\s]/gi, '');
var saneWorkerName = getWorkerNameFromAddress(w);
addWorkerToDisplay(saneWorkerName, htmlSafeWorkerName, minerStatData.workers[w]);
}
$("#boxesWorkers").html("");
var i=0;
for (var w in minerStatData.workers) { i++;
var htmlSafeWorkerName = w.split('.').join('_').replace(/[^\w\s]/gi, '');
var saneWorkerName = getWorkerNameFromAddress(w);
addWorkerToDisplay(saneWorkerName, htmlSafeWorkerName, minerStatData.workers[w]);
}
}

13
website/piratepool.io/static/workers.js

@ -8,7 +8,6 @@ $(function() {
statsSource.addEventListener('message', function (e) {
if (document.querySelector('#pageWorkers') !== null) {
var stats = JSON.parse(e.data);
for (var f = 0; f < poolKeys.length; f++) {
var pool = poolKeys[f];
var sharesTotal = 0;
@ -18,13 +17,13 @@ $(function() {
minerIndex++;
var workerstat = stats.pools[pool].miners[addr];
sharesTotal += parseFloat(workerstat.shares);
var existingRow = document.querySelector('#workers' + pool + ' #worker' + minerIndex);
var existingRow = document.querySelector('#workers' + pool + ' #miner-' + minerIndex);
var minerEfficiency = ( workerstat.shares > 0 ) ? Math.floor(10000 * workerstat.shares / (workerstat.shares + workerstat.invalidshares)) / 100 : 0;
if (existingRow == null) {
//Add new
var insertMinerTr = document.createElement('tr');
insertMinerTr.id = 'worker' + minerIndex;
insertMinerTr.id = 'miner-' + minerIndex;
insertMinerTr.setAttribute('data-hashrate', workerstat.hashrate);
insertMinerTr.innerHTML = '<td><span class="responsiveTableLabel"><i class="far fa-address-card fa-fw"></i></span>Miner #'+ minerIndex +'</td>';
insertMinerTr.innerHTML += '<td><span class="responsiveTableLabel"><i class="fas fa-cog fa-fw"></i> Shares: </span><span>' + bigNumber(workerstat.shares) + '</span></td>';
@ -36,10 +35,10 @@ $(function() {
console.log('Added new miner! [' + minerIndex + ']');
} else {
//Update existing
document.querySelector('#workers' + pool + ' #worker' + minerIndex + ' td:nth-child(2) span:nth-child(2)').innerHTML = bigNumber(workerstat.shares);
document.querySelector('#workers' + pool + ' #worker' + minerIndex + ' td:nth-child(3) span:nth-child(2)').innerHTML = minerEfficiency + '%';
document.querySelector('#workers' + pool + ' #worker' + minerIndex + ' td:nth-child(4) span:nth-child(2)').innerHTML = workerstat.hashrateString;
document.querySelector('#workers' + pool + ' #worker' + minerIndex).setAttribute('data-hashrate', workerstat.hashrate);
document.querySelector('#workers' + pool + ' #miner-' + minerIndex + ' td:nth-child(2) span:nth-child(2)').innerHTML = bigNumber(workerstat.shares);
document.querySelector('#workers' + pool + ' #miner-' + minerIndex + ' td:nth-child(3) span:nth-child(2)').innerHTML = minerEfficiency + '%';
document.querySelector('#workers' + pool + ' #miner-' + minerIndex + ' td:nth-child(4) span:nth-child(2)').innerHTML = workerstat.hashrateString;
document.querySelector('#workers' + pool + ' #miner-' + minerIndex).setAttribute('data-hashrate', workerstat.hashrate);
}
}

Loading…
Cancel
Save