|
|
@ -474,7 +474,7 @@ netStatsApp.controller('StatsCtrl', function($scope, $filter, $localStorage, soc |
|
|
|
$scope.nodesTotal = $scope.nodes.length; |
|
|
|
$scope.nodesTotal = $scope.nodes.length; |
|
|
|
|
|
|
|
|
|
|
|
$scope.nodesActive = _.filter($scope.nodes, function (node) { |
|
|
|
$scope.nodesActive = _.filter($scope.nodes, function (node) { |
|
|
|
forkFilter(node); |
|
|
|
// forkFilter(node);
|
|
|
|
return node.stats.active == true; |
|
|
|
return node.stats.active == true; |
|
|
|
}).length; |
|
|
|
}).length; |
|
|
|
|
|
|
|
|
|
|
@ -510,37 +510,37 @@ netStatsApp.controller('StatsCtrl', function($scope, $filter, $localStorage, soc |
|
|
|
var chains = {}; |
|
|
|
var chains = {}; |
|
|
|
var maxScore = 0; |
|
|
|
var maxScore = 0; |
|
|
|
|
|
|
|
|
|
|
|
_($scope.nodes) |
|
|
|
// _($scope.nodes)
|
|
|
|
.map(function (item) |
|
|
|
// .map(function (item)
|
|
|
|
{ |
|
|
|
// {
|
|
|
|
maxScore += (item.trusted ? 50 : 1); |
|
|
|
// maxScore += (item.trusted ? 50 : 1);
|
|
|
|
|
|
|
|
|
|
|
|
if( _.isUndefined(chains[item.stats.block.number]) ) |
|
|
|
// if( _.isUndefined(chains[item.stats.block.number]) )
|
|
|
|
chains[item.stats.block.number] = []; |
|
|
|
// chains[item.stats.block.number] = [];
|
|
|
|
|
|
|
|
|
|
|
|
if( _.isUndefined(chains[item.stats.block.number][item.stats.block.fork]) ) |
|
|
|
// if( _.isUndefined(chains[item.stats.block.number][item.stats.block.fork]) )
|
|
|
|
chains[item.stats.block.number][item.stats.block.fork] = { |
|
|
|
// chains[item.stats.block.number][item.stats.block.fork] = {
|
|
|
|
fork: item.stats.block.fork, |
|
|
|
// fork: item.stats.block.fork,
|
|
|
|
count: 0, |
|
|
|
// count: 0,
|
|
|
|
trusted: 0, |
|
|
|
// trusted: 0,
|
|
|
|
score: 0 |
|
|
|
// score: 0
|
|
|
|
}; |
|
|
|
// };
|
|
|
|
|
|
|
|
|
|
|
|
if(item.stats.block.trusted) |
|
|
|
// if(item.stats.block.trusted)
|
|
|
|
chains[item.stats.block.number][item.stats.block.fork].trusted++; |
|
|
|
// chains[item.stats.block.number][item.stats.block.fork].trusted++;
|
|
|
|
else |
|
|
|
// else
|
|
|
|
chains[item.stats.block.number][item.stats.block.fork].count++; |
|
|
|
// chains[item.stats.block.number][item.stats.block.fork].count++;
|
|
|
|
|
|
|
|
|
|
|
|
chains[item.stats.block.number][item.stats.block.fork].score = chains[item.stats.block.number][item.stats.block.fork].trusted * 50 + chains[item.stats.block.number][item.stats.block.fork].count; |
|
|
|
// chains[item.stats.block.number][item.stats.block.fork].score = chains[item.stats.block.number][item.stats.block.fork].trusted * 50 + chains[item.stats.block.number][item.stats.block.fork].count;
|
|
|
|
}) |
|
|
|
// })
|
|
|
|
.value(); |
|
|
|
// .value();
|
|
|
|
|
|
|
|
|
|
|
|
$scope.maxScore = maxScore; |
|
|
|
// $scope.maxScore = maxScore;
|
|
|
|
$scope.chains = _.reduce(chains, function (result, item, key) |
|
|
|
// $scope.chains = _.reduce(chains, function (result, item, key)
|
|
|
|
{ |
|
|
|
// {
|
|
|
|
result[key] = _.max(item, 'score'); |
|
|
|
// result[key] = _.max(item, 'score');
|
|
|
|
return result; |
|
|
|
// return result;
|
|
|
|
}, {}); |
|
|
|
// }, {});
|
|
|
|
|
|
|
|
|
|
|
|
var bestBlock = _.max($scope.nodes, function (node) |
|
|
|
var bestBlock = _.max($scope.nodes, function (node) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -565,40 +565,40 @@ netStatsApp.controller('StatsCtrl', function($scope, $filter, $localStorage, soc |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function forkFilter(node) |
|
|
|
// function forkFilter(node)
|
|
|
|
{ |
|
|
|
// {
|
|
|
|
if( _.isUndefined(node.readable) ) |
|
|
|
// if( _.isUndefined(node.readable) )
|
|
|
|
node.readable = {}; |
|
|
|
// node.readable = {};
|
|
|
|
|
|
|
|
|
|
|
|
node.readable.forkClass = 'hidden'; |
|
|
|
// node.readable.forkClass = 'hidden';
|
|
|
|
node.readable.forkMessage = ''; |
|
|
|
// node.readable.forkMessage = '';
|
|
|
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
// return true;
|
|
|
|
|
|
|
|
|
|
|
|
if( $scope.chains[node.stats.block.number].fork === node.stats.block.fork && $scope.chains[node.stats.block.number].score / $scope.maxScore >= 0.5 ) |
|
|
|
// if( $scope.chains[node.stats.block.number].fork === node.stats.block.fork && $scope.chains[node.stats.block.number].score / $scope.maxScore >= 0.5 )
|
|
|
|
{ |
|
|
|
// {
|
|
|
|
node.readable.forkClass = 'hidden'; |
|
|
|
// node.readable.forkClass = 'hidden';
|
|
|
|
node.readable.forkMessage = ''; |
|
|
|
// node.readable.forkMessage = '';
|
|
|
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
// return true;
|
|
|
|
} |
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
if( $scope.chains[node.stats.block.number].fork !== node.stats.block.fork ) |
|
|
|
// if( $scope.chains[node.stats.block.number].fork !== node.stats.block.fork )
|
|
|
|
{ |
|
|
|
// {
|
|
|
|
node.readable.forkClass = 'text-danger'; |
|
|
|
// node.readable.forkClass = 'text-danger';
|
|
|
|
node.readable.forkMessage = 'Wrong chain.<br/>This chain is a fork.'; |
|
|
|
// node.readable.forkMessage = 'Wrong chain.<br/>This chain is a fork.';
|
|
|
|
|
|
|
|
|
|
|
|
return false; |
|
|
|
// return false;
|
|
|
|
} |
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
if( $scope.chains[node.stats.block.number].score / $scope.maxScore < 0.5) |
|
|
|
// if( $scope.chains[node.stats.block.number].score / $scope.maxScore < 0.5)
|
|
|
|
{ |
|
|
|
// {
|
|
|
|
node.readable.forkClass = 'text-warning'; |
|
|
|
// node.readable.forkClass = 'text-warning';
|
|
|
|
node.readable.forkMessage = 'May not be main chain.<br/>Waiting for more confirmations.'; |
|
|
|
// node.readable.forkMessage = 'May not be main chain.<br/>Waiting for more confirmations.';
|
|
|
|
|
|
|
|
|
|
|
|
return false; |
|
|
|
// return false;
|
|
|
|
} |
|
|
|
// }
|
|
|
|
} |
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
function latencyFilter(node) |
|
|
|
function latencyFilter(node) |
|
|
|
{ |
|
|
|
{ |
|
|
|