diff --git a/app.js b/app.js index 8420406..dd76910 100644 --- a/app.js +++ b/app.js @@ -22,16 +22,21 @@ app.use(bodyParser.urlencoded({ extended: false })); app.use(express.static(path.join(__dirname, 'public'))); var nodes = [], - nodeStatus = []; + nodeStatus = [], + nodeInterval; for(i in config) { - var node = new Node(config[i], i); - console.log(node); - node.update(); - nodes[i] = node; - nodeStatus[i] = node.info; + nodes[i] = new Node(config[i], i); + console.log(nodes[i]); + nodeStatus[i] = nodes[i].update(); } +nodeInterval = setInterval(function(){ + for(i in nodes){ + app.io.broadcast('update', nodes[i].update()); + } +}, 10000); + app.get('/', function(req, res) { res.render('index', { title: 'Ethereum Network Status' }); }); diff --git a/models/node.js b/models/node.js index 084ef71..4506591 100644 --- a/models/node.js +++ b/models/node.js @@ -6,7 +6,7 @@ var Node = function Node(options, id) { this.info = options; this.info.geo = geoip.lookup(this.info.rpcHost); - this.info.id = id; + this.info.id = parseInt(id); this.info.stats = { active: false, peers: 0, diff --git a/public/js/controllers.js b/public/js/controllers.js index 7d13af6..237713c 100644 --- a/public/js/controllers.js +++ b/public/js/controllers.js @@ -14,7 +14,7 @@ function StatsCtrl($scope, socket, _) { }); socket.on('update', function(data){ - $scope.nodes[data.node.id] = data.node; + $scope.nodes[data.id] = data; updateStats(); }); diff --git a/public/js/filters.js b/public/js/filters.js index 7d0c2a0..e42274d 100644 --- a/public/js/filters.js +++ b/public/js/filters.js @@ -3,34 +3,50 @@ /* Filters */ angular.module('netStatsApp.filters', []) +.filter('nodesActiveClass', function() { + return function(active, total) { + var ratio = active/total; + + if(ratio >= 0.9) + return 'text-success'; + + if(ratio >= 0.75) + return 'text-info'; + + if(ratio >= 0.5) + return 'text-warning'; + + return 'text-danger'; + }; +}) .filter('mainClass', function() { return function(node, bestBlock) { if( ! node.active) return 'text-danger'; - if( node.peers === 0) + if(node.peers === 0) return 'text-danger'; return (node.peers <= 1 ? 'text-danger' : (node.peers > 1 && node.peers < 4 ? 'text-warning' : 'text-success')); - } + }; }) .filter('peerClass', function() { return function(peers) { return (peers <= 1 ? 'text-danger' : (peers > 1 && peers < 4 ? 'text-warning' : 'text-success')); - } + }; }) .filter('miningClass', function() { return function(mining) { return (! mining ? 'text-danger' : ''); - } + }; }) .filter('miningIconClass', function() { return function(mining) { return (! mining ? 'icon-cancel' : 'icon-check'); - } + }; }) .filter('blockClass', function() { return function(current, best) { return (best - current <= 1 ? '' : (best - current > 1 && best - current < 4 ? 'text-warning' : 'text-danger')); - } + }; }); \ No newline at end of file diff --git a/views/index.jade b/views/index.jade index a0866f2..3d8707c 100644 --- a/views/index.jade +++ b/views/index.jade @@ -11,7 +11,7 @@ block content div.clearfix div.col-xs-6.stat-holder - div.row.big-info.nodesactive.text-success + div.row.big-info.nodesactive(class="{{ nodesActive | nodesActiveClass : nodesTotal }}") div.pull-left.icon-full-width i.icon-bulb div.pull-left