diff --git a/public/css/minimal-icons-codes.css b/public/css/minimal-icons-codes.css new file mode 100644 index 0000000..c266dc8 --- /dev/null +++ b/public/css/minimal-icons-codes.css @@ -0,0 +1,20 @@ + +.icon-truck:before { content: '\e800'; } /* '' */ +.icon-database:before { content: '\e801'; } /* '' */ +.icon-mining:before { content: '\e802'; } /* '' */ +.icon-check:before { content: '\e803'; } /* '' */ +.icon-cancel:before { content: '\e804'; } /* '' */ +.icon-loader:before { content: '\e805'; } /* '' */ +.icon-check-o:before { content: '\e806'; } /* '' */ +.icon-cancel-o:before { content: '\e807'; } /* '' */ +.icon-warning-o:before { content: '\e808'; } /* '' */ +.icon-network:before { content: '\e809'; } /* '' */ +.icon-block:before { content: '\e80a'; } /* '' */ +.icon-bulb:before { content: '\e80b'; } /* '' */ +.icon-node:before { content: '\e80c'; } /* '' */ +.icon-laptop:before { content: '\e80d'; } /* '' */ +.icon-time:before { content: '\e80e'; } /* '' */ +.icon-clock:before { content: '\e80f'; } /* '' */ +.icon-group:before { content: '\e810'; } /* '' */ +.icon-gas:before { content: '\e811'; } /* '' */ +.icon-difficulty:before { content: '\e812'; } /* '' */ \ No newline at end of file diff --git a/public/css/minimal-icons-embedded.css b/public/css/minimal-icons-embedded.css new file mode 100644 index 0000000..e54ec05 --- /dev/null +++ b/public/css/minimal-icons-embedded.css @@ -0,0 +1,73 @@ +@font-face { + font-family: 'minimal-icons'; + src: url('../fonts/minimal-icons.eot?82572300'); + src: url('../fonts/minimal-icons.eot?82572300#iefix') format('embedded-opentype'), + url('../fonts/minimal-icons.svg?82572300#minimal-icons') format('svg'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'minimal-icons'; + src: url('data:application/octet-stream;base64,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') format('woff'), + url('data:application/octet-stream;base64,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RyNhsAlDKyMgPCAuIzixKwEUKy2wQSyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbErARQrLbBCLLA1Ky6xKwEUKy2wQyywNishIyAgPLAEI0IjOLErARQrsARDLrArKy2wRCywABUgR7AAI0KyAAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKxAAAqsQAFQrEACCqxAAVCsQAIKrEABUK5AAAACSqxAAVCuQAAAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbEADCq4Af+FsASNsQIARAA=') format('truetype'); +} +/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ +/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ +/* +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: 'minimal-icons'; + src: url('../fonts/minimal-icons.svg?82572300#minimal-icons') format('svg'); + } +} +*/ + + [class^="icon-"]:before, [class*=" icon-"]:before { + font-family: "minimal-icons"; + font-style: normal; + font-weight: normal; + speak: none; + + display: inline-block; + text-decoration: inherit; + width: 1em; + margin-right: .2em; + text-align: center; + /* opacity: .8; */ + + /* For safety - reset parent styles, that can break glyph codes*/ + font-variant: normal; + text-transform: none; + + /* fix buttons height, for twitter bootstrap */ + line-height: 1em; + + /* Animation center compensation - margins should be symmetric */ + /* remove if not needed */ + margin-left: .2em; + + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ + + /* Uncomment for 3D effect */ + /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ +} +.icon-truck:before { content: '\e800'; } /* '' */ +.icon-database:before { content: '\e801'; } /* '' */ +.icon-mining:before { content: '\e802'; } /* '' */ +.icon-check:before { content: '\e803'; } /* '' */ +.icon-cancel:before { content: '\e804'; } /* '' */ +.icon-loader:before { content: '\e805'; } /* '' */ +.icon-check-o:before { content: '\e806'; } /* '' */ +.icon-cancel-o:before { content: '\e807'; } /* '' */ +.icon-warning-o:before { content: '\e808'; } /* '' */ +.icon-network:before { content: '\e809'; } /* '' */ +.icon-block:before { content: '\e80a'; } /* '' */ +.icon-bulb:before { content: '\e80b'; } /* '' */ +.icon-node:before { content: '\e80c'; } /* '' */ +.icon-laptop:before { content: '\e80d'; } /* '' */ +.icon-time:before { content: '\e80e'; } /* '' */ +.icon-clock:before { content: '\e80f'; } /* '' */ +.icon-group:before { content: '\e810'; } /* '' */ +.icon-gas:before { content: '\e811'; } /* '' */ +.icon-difficulty:before { content: '\e812'; } /* '' */ \ No newline at end of file diff --git a/public/css/minimal-icons-ie7-codes.css b/public/css/minimal-icons-ie7-codes.css new file mode 100644 index 0000000..6f6c4cb --- /dev/null +++ b/public/css/minimal-icons-ie7-codes.css @@ -0,0 +1,20 @@ + +.icon-truck { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-database { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-mining { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-check { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-loader { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-check-o { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-cancel-o { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-warning-o { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-network { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-block { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-bulb { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-node { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-laptop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-time { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-clock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-group { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-gas { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-difficulty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } \ No newline at end of file diff --git a/public/css/minimal-icons-ie7.css b/public/css/minimal-icons-ie7.css index 37410fd..676f6b8 100644 --- a/public/css/minimal-icons-ie7.css +++ b/public/css/minimal-icons-ie7.css @@ -26,4 +26,6 @@ .icon-laptop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-time { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-clock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-group { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } \ No newline at end of file +.icon-group { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-gas { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-difficulty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } \ No newline at end of file diff --git a/public/css/minimal-icons.css b/public/css/minimal-icons.css index 8d683d9..2a61386 100644 --- a/public/css/minimal-icons.css +++ b/public/css/minimal-icons.css @@ -1,10 +1,10 @@ @font-face { font-family: 'minimal-icons'; - src: url('../fonts/minimal-icons.eot?18158983'); - src: url('../fonts/minimal-icons.eot?18158983#iefix') format('embedded-opentype'), - url('../fonts/minimal-icons.woff?18158983') format('woff'), - url('../fonts/minimal-icons.ttf?18158983') format('truetype'), - url('../fonts/minimal-icons.svg?18158983#minimal-icons') format('svg'); + src: url('../fonts/minimal-icons.eot?55431205'); + src: url('../fonts/minimal-icons.eot?55431205#iefix') format('embedded-opentype'), + url('../fonts/minimal-icons.woff?55431205') format('woff'), + url('../fonts/minimal-icons.ttf?55431205') format('truetype'), + url('../fonts/minimal-icons.svg?55431205#minimal-icons') format('svg'); font-weight: normal; font-style: normal; } @@ -14,7 +14,7 @@ @media screen and (-webkit-min-device-pixel-ratio:0) { @font-face { font-family: 'minimal-icons'; - src: url('../fonts/minimal-icons.svg?18158983#minimal-icons') format('svg'); + src: url('../fonts/minimal-icons.svg?55431205#minimal-icons') format('svg'); } } */ @@ -66,4 +66,6 @@ .icon-laptop:before { content: '\e80d'; } /* '' */ .icon-time:before { content: '\e80e'; } /* '' */ .icon-clock:before { content: '\e80f'; } /* '' */ -.icon-group:before { content: '\e810'; } /* '' */ \ No newline at end of file +.icon-group:before { content: '\e810'; } /* '' */ +.icon-gas:before { content: '\e811'; } /* '' */ +.icon-difficulty:before { content: '\e812'; } /* '' */ \ No newline at end of file diff --git a/public/fonts/minimal-icons.eot b/public/fonts/minimal-icons.eot index cb2a55f..c8b8ce5 100644 Binary files a/public/fonts/minimal-icons.eot and b/public/fonts/minimal-icons.eot differ diff --git a/public/fonts/minimal-icons.svg b/public/fonts/minimal-icons.svg index 1827646..98a057a 100644 --- a/public/fonts/minimal-icons.svg +++ b/public/fonts/minimal-icons.svg @@ -1,7 +1,7 @@ -Copyright (C) 2014 by original authors @ fontello.com +Copyright (C) 2015 by original authors @ fontello.com @@ -23,6 +23,8 @@ + + \ No newline at end of file diff --git a/public/fonts/minimal-icons.ttf b/public/fonts/minimal-icons.ttf index 27bbfa9..1b7c4ae 100644 Binary files a/public/fonts/minimal-icons.ttf and b/public/fonts/minimal-icons.ttf differ diff --git a/public/fonts/minimal-icons.woff b/public/fonts/minimal-icons.woff index 24c30f1..5d06fe0 100644 Binary files a/public/fonts/minimal-icons.woff and b/public/fonts/minimal-icons.woff differ diff --git a/public/js/controllers.js b/public/js/controllers.js index 10f676b..e49a2c4 100644 --- a/public/js/controllers.js +++ b/public/js/controllers.js @@ -11,7 +11,9 @@ function StatsCtrl($scope, $filter, socket, _, toastr) { $scope.nodesActive = 0; $scope.bestBlock = 0; $scope.lastBlock = 0; + $scope.lastDifficulty = 0; $scope.upTimeTotal = 0; + $scope.avgBlockTime = 0; $scope.nodes = []; $scope.map = []; @@ -117,6 +119,14 @@ function StatsCtrl($scope, $filter, socket, _, toastr) { return parseInt(node.stats.block.timestamp); }).stats.block.timestamp; + $scope.lastDifficulty = _.max($scope.nodes, function(node) { + return parseInt(node.stats.block.timestamp); + }).stats.block.difficulty; + + $scope.avgBlockTime = _.max($scope.nodes, function(node) { + return parseInt(node.stats.block.timestamp); + }).stats.blocktimeAvg; + $scope.upTimeTotal = _.reduce($scope.nodes, function(total, node) { return total + node.stats.uptime; }, 0) / $scope.nodes.length; diff --git a/public/js/filters.js b/public/js/filters.js index 725de41..0ac0534 100644 --- a/public/js/filters.js +++ b/public/js/filters.js @@ -44,7 +44,7 @@ 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: ', ') - '); return $sce.trustAsHtml(version); }; }) @@ -63,6 +63,16 @@ angular.module('netStatsApp.filters', []) return timeClass(timestamp); }; }) +.filter('avgTimeFilter', function() { + return function(time) { + return Math.round(time) + 's'; + }; +}) +.filter('avgTimeClass', function() { + return function(time) { + return blockTimeClass(time); + } +}) .filter('upTimeFilter', function() { return function(uptime) { return Math.round(uptime) + '%'; @@ -115,6 +125,11 @@ function timeClass(timestamp) var time = Math.floor((new Date()).getTime() / 1000); var diff = time - timestamp; + return blockTimeClass(diff); +} + +function blockTimeClass(diff) +{ if(diff <= 12) return 'text-success'; @@ -124,5 +139,5 @@ function timeClass(timestamp) if(diff <= 30) return 'text-warning'; - return 'text-danger'; + return 'text-danger' } \ No newline at end of file diff --git a/views/index.jade b/views/index.jade index b9b3538..21845ad 100644 --- a/views/index.jade +++ b/views/index.jade @@ -3,14 +3,14 @@ extends layout block content div.container-fluid(ng-controller='StatsCtrl') div.row - div.col-lg-6(ng-cloak) + div.col-lg-8(ng-cloak) div.col-sm-12 h1= title //- p Welcome to #{title} div.clearfix - div.col-xs-6.stat-holder + div.col-xs-4.stat-holder div.row.big-info.nodesactive(class="{{ nodesActive | nodesActiveClass : nodesTotal }}") div.pull-left.icon-full-width i.icon-bulb @@ -18,23 +18,15 @@ block content span.small-title active nodes span.big-details {{nodesActive}}/{{nodesTotal}} div.clearfix - div.col-xs-6.stat-holder - div.row.big-info.bestblock.text-info + div.col-xs-4.stat-holder + div.row.big-info.difficulty.text-info div.pull-left.icon-full-width - i.icon-block + i.icon-difficulty div.pull-left - span.small-title best block - span.big-details {{"#" + bestBlock}} + span.small-title difficulty + span.big-details {{ lastDifficulty }} div.clearfix - div.col-xs-6.stat-holder - div.row.big-info.blocktime(class="{{ lastBlock | timeClass }}") - div.pull-left.icon-full-width - i.icon-time - div.pull-left - span.small-title last block - span.big-details(am-time-ago="lastBlock", am-preprocess="unix") ∞ - div.clearfix - div.col-xs-6.stat-holder + div.col-xs-4.stat-holder div.row.big-info.uptime(class="{{ upTimeTotal | upTimeClass }}") div.pull-left.icon-full-width i.icon-clock @@ -42,10 +34,34 @@ block content span.small-title up-time span.big-details {{ upTimeTotal | upTimeFilter }} div.clearfix + div.col-xs-4.stat-holder + div.row.big-info.bestblock.text-info + div.pull-left.icon-full-width + i.icon-block + div.pull-left + span.small-title best block + span.big-details {{"#" + bestBlock}} + div.clearfix + div.col-xs-4.stat-holder + div.row.big-info.blocktime(class="{{ lastBlock | timeClass }}") + div.pull-left.icon-full-width + i.icon-time + div.pull-left + span.small-title last block + span.big-details(am-time-ago="lastBlock", am-preprocess="unix") ∞ + div.clearfix + div.col-xs-4.stat-holder + div.row.big-info.avgblocktime(class="{{ avgBlockTime | timeClass }}") + div.pull-left.icon-full-width + i.icon-gas + div.pull-left + span.small-title avg block time + span.big-details {{ avgBlockTime | avgTimeFilter }} + div.clearfix div.clearfix - div.col-lg-6 + div.col-lg-4 div.col-xs-12 nodemap#mapHolder(data="map") @@ -75,9 +91,10 @@ block content tbody tr(ng-repeat='node in nodes', class="{{ node.stats | mainClass : bestBlock }}") td(rel="{{node.id}}") - span(data-toggle="tooltip", data-placement="top", data-original-title="{{node.geo | geoTooltip}}") {{node.info.name}} - div.small {{node.info.ip}} - td.small + span.small(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}} @@ -86,6 +103,6 @@ block content 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}} + //- 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.uptime | upTimeClass }}") {{ node.stats.uptime | upTimeFilter }}