diff --git a/public/js/controllers.js b/public/js/controllers.js index e49a2c4..7ec5951 100644 --- a/public/js/controllers.js +++ b/public/js/controllers.js @@ -117,7 +117,7 @@ function StatsCtrl($scope, $filter, socket, _, toastr) { $scope.lastBlock = _.max($scope.nodes, function(node) { return parseInt(node.stats.block.timestamp); - }).stats.block.timestamp; + }).stats.block.blocktime; $scope.lastDifficulty = _.max($scope.nodes, function(node) { return parseInt(node.stats.block.timestamp); diff --git a/public/js/filters.js b/public/js/filters.js index 0ac0534..2390807 100644 --- a/public/js/filters.js +++ b/public/js/filters.js @@ -44,7 +44,9 @@ angular.module('netStatsApp.filters', []) version = version.replace('eth version ', 'v') .replace("\n" + 'Network protocol version: ', ' (') .replace("\n" + 'Client database version: ', ',') - .replace("\n" + 'Build: ', ') - '); + .replace("\n" + 'Build: ', ') - ') + .replace('/Debug', '') + .replace('/.', ''); return $sce.trustAsHtml(version); }; }) @@ -63,9 +65,16 @@ angular.module('netStatsApp.filters', []) return timeClass(timestamp); }; }) -.filter('avgTimeFilter', function() { +.filter('blockTimeFilter', function() { return function(time) { - return Math.round(time) + 's'; + if(time === 0) + return '∞'; + + return moment.duration(Math.round(time), 's').humanize() + ' ago'; + }; +}).filter('avgTimeFilter', function() { + return function(time) { + return moment.duration(Math.round(time), 's').humanize(); }; }) .filter('avgTimeClass', function() { diff --git a/public/js/script.js b/public/js/script.js index 3c7068c..f15e568 100644 --- a/public/js/script.js +++ b/public/js/script.js @@ -3,5 +3,11 @@ $(this).tooltip('show'); }).on('mouseleave', '[data-toggle="tooltip"]', function( event ) { $(this).tooltip('hide'); - }) + }); + + moment.relativeTimeTreshold('s', 60); + moment.relativeTimeTreshold('m', 60); + moment.relativeTimeTreshold('h', 24); + moment.relativeTimeTreshold('d', 28); + moment.relativeTimeTreshold('M', 12); })(); \ No newline at end of file diff --git a/views/index.jade b/views/index.jade index 21845ad..fb3d7f9 100644 --- a/views/index.jade +++ b/views/index.jade @@ -3,7 +3,7 @@ extends layout block content div.container-fluid(ng-controller='StatsCtrl') div.row - div.col-lg-8(ng-cloak) + div.col-lg-7(ng-cloak) div.col-sm-12 h1= title //- p Welcome to #{title} @@ -48,7 +48,7 @@ block content i.icon-time div.pull-left span.small-title last block - span.big-details(am-time-ago="lastBlock", am-preprocess="unix") ∞ + span.big-details {{ lastBlock | blockTimeFilter }} div.clearfix div.col-xs-4.stat-holder div.row.big-info.avgblocktime(class="{{ avgBlockTime | timeClass }}") @@ -61,7 +61,7 @@ block content div.clearfix - div.col-lg-4 + div.col-lg-5 div.col-xs-12 nodemap#mapHolder(data="map") @@ -77,10 +77,10 @@ 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-group(data-toggle="tooltip", data-placement="top", title="Peers") th i.icon-mining(data-toggle="tooltip", data-placement="top", title="Is mining") + th + i.icon-group(data-toggle="tooltip", data-placement="top", title="Peers") th i.icon-block(data-toggle="tooltip", data-placement="top", title="Last node block") th.hidden-sm.hidden-xs   @@ -91,18 +91,18 @@ block content tbody tr(ng-repeat='node in nodes', class="{{ node.stats | mainClass : bestBlock }}") td(rel="{{node.id}}") - span.small(data-toggle="tooltip", data-placement="top", data-original-title="{{node.geo | geoTooltip}}") {{node.info.name}} -   -   - span.small {{node.info.ip}} + span(data-toggle="tooltip", data-placement="top", data-original-title="{{node.geo | geoTooltip}}") {{node.info.name}} + span.small  ({{node.info.ip}}) td div.small(ng-bind-html="node.info.node | nodeVersion") //- div.small {{node.info.os}}, {{node.info.os_v}} - td(class="{{ node.stats.peers | peerClass }}") {{node.stats.peers}} td(class="{{ node.stats.mining | miningClass }}") i(class="{{ node.stats.mining | miningIconClass }}") + td(class="{{ node.stats.peers | peerClass }}") {{node.stats.peers}} td(class="{{ node.stats.block.number | blockClass : bestBlock }}") {{'#' + node.stats.block.number}} td(class="{{ node.stats.block.number | blockClass : bestBlock }}").hidden-sm.hidden-xs span.small {{node.stats.block.hash}} //- div.small Difficulty: {{node.stats.block.difficulty | gasFilter}} | Gas used: {{node.stats.block.gasUsed | gasFilter}} | Min gas price: {{node.stats.block.minGasPrice | gasFilter}} | Gas limit: {{node.stats.block.gasLimit | gasFilter}} td(am-time-ago="node.stats.block.timestamp", am-preprocess="unix", class="{{ node.stats.block.timestamp | timeClass }}") ∞ + //- td(class="{{ node.stats.block.timestamp | timeClass }}") {{node.stats.block.blocktime | blockTimeFilter }} td(class="{{ node.stats.uptime | upTimeClass }}") {{ node.stats.uptime | upTimeFilter }}