From 6c17d0ee9c8f85580fbcd061f5108ecb22d653fc Mon Sep 17 00:00:00 2001 From: cubedro Date: Mon, 23 Feb 2015 15:57:41 +0200 Subject: [PATCH] added node latency --- app.js | 5 +++++ models/node.js | 1 + package.json | 1 + public/js/filters.js | 10 +++++++++- views/index.jade | 5 ++++- 5 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app.js b/app.js index 7a23383..c23c744 100644 --- a/app.js +++ b/app.js @@ -20,6 +20,7 @@ api = new Primus(server, { }); api.use('emit', require('primus-emit')); +api.use('spark-latency', require('primus-spark-latency')); var client = new Primus(server, { transformer: 'websockets', @@ -30,12 +31,14 @@ var client = new Primus(server, { client.use('emit', require('primus-emit')); api.on('connection', function(spark) { + console.log('Latency: ', spark.latency); console.log(spark.id); console.log(spark.address); console.log(spark.query); spark.on('hello', function(data) { + console.log('Latency: ', spark.latency); console.log('got hello data from ', spark.id); console.log(data); @@ -53,11 +56,13 @@ api.on('connection', function(spark) { spark.on('update', function(data) { + console.log('Latency: ', spark.latency); console.log('got update from ' + spark.id); console.log(data); if(typeof data.id !== 'undefined' && typeof data.stats !== 'undefined') { + data.stats.latency = spark.latency; var stats = Nodes.update(data.id, data.stats); client.write({action: 'update', data: stats}); diff --git a/models/node.js b/models/node.js index beaa0f3..e327f7f 100644 --- a/models/node.js +++ b/models/node.js @@ -21,6 +21,7 @@ var Node = function Node(data) }, blocktimeAvg: 0, difficulty: [], + latency: 0, uptime: 0, lastUpdate: 0 }; diff --git a/package.json b/package.json index eb56f0a..a687b5a 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "lodash": "^3.2.0", "primus": "^2.4.12", "primus-emit": "^0.1.2", + "primus-spark-latency": "^0.1.1", "serve-favicon": "~2.1.3", "ws": "^0.7.1" } diff --git a/public/js/filters.js b/public/js/filters.js index 2ba0a9a..0c78e01 100644 --- a/public/js/filters.js +++ b/public/js/filters.js @@ -60,6 +60,14 @@ angular.module('netStatsApp.filters', []) return (typeof gas !== 'undefined' ? parseInt(gas) : '?'); } }) +.filter('latencyFilter', function() { + return function(stats) { + if(stats.active === false) + return 'offline'; + else + return stats.latency + ' ms'; + } +}) .filter('hashFilter', function() { return function(hash) { return hash.substr(0, 6) + '...' + hash.substr(58, 6); @@ -79,7 +87,7 @@ angular.module('netStatsApp.filters', []) var diff = time - timestamp; if(diff < 60) - return Math.round(diff) + ' s'; + return Math.round(diff) + ' s ago'; return moment.duration(Math.round(diff), 's').humanize() + ' ago'; }; diff --git a/views/index.jade b/views/index.jade index cb818e3..4a6cca9 100644 --- a/views/index.jade +++ b/views/index.jade @@ -77,6 +77,8 @@ block content i.icon-node(data-toggle="tooltip", data-placement="top", title="Node") th i.icon-laptop(data-toggle="tooltip", data-placement="top", title="Node type") + th + i.icon-gas(data-toggle="tooltip", data-placement="top", title="Node latency") th i.icon-mining(data-toggle="tooltip", data-placement="top", title="Is mining") th @@ -100,8 +102,9 @@ block content td div.small(ng-bind-html="node.info.node | nodeVersion") //- div.small {{node.info.os}}, {{node.info.os_v}} + td.small(class="{{ node.stats | mainClass : bestBlock }}") {{node.stats | latencyFilter}} td(class="{{ node.stats.mining | miningClass }}") - i(class="{{ node.stats.mining | miningIconClass }}") + i.small(class="{{ node.stats.mining | miningIconClass }}") td(class="{{ node.stats.peers | peerClass }}", style="padding-left: 18px;") {{node.stats.peers}} td(style="padding-left: 18px;") {{node.stats.pending}} td(class="{{ node.stats.block.number | blockClass : bestBlock }}") {{'#' + node.stats.block.number}}