Merge pull request #9 from goerli/tao-staging

Merge all the lose ends
pull/5/head
Afri Schoedon 6 years ago committed by GitHub
commit 22bd2edd98
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 13
      .travis.yml
  2. 11
      Dockerfile
  3. 4
      Gruntfile.js
  4. 4
      README.md
  5. 3
      lib/node.js
  6. 27
      lib/utils/config.js
  7. 2
      package.json
  8. 96
      src/css/style.css
  9. BIN
      src/fonts/SourceSansPro-Bold.woff2
  10. BIN
      src/fonts/SourceSansPro-ExtraLight.woff2
  11. BIN
      src/fonts/SourceSansPro-Light.woff2
  12. BIN
      src/fonts/SourceSansPro-Regular.woff2
  13. BIN
      src/fonts/SourceSansPro-SemiBold.woff2
  14. 59
      src/js/directives.js
  15. 92
      src/js/filters.js
  16. 14
      src/js/script.js
  17. 9
      src/views/layout.jade

@ -1,9 +1,8 @@
language: node_js language: node_js
node_js: sudo: required
- "8" dist: trusty
env: node_js: '8'
global:
secure: Qdkmi13nqcXskABBhbuGZmRakh4orOW1dalkSCyUbzGuYf0OdYF8ttNVuJa0WSWI4KhNXhtz2p3I8dM95wL++LCVqXFmIvZtX8Nca36KlNxIPNXPjn0odayh+c4pgrhrbz8TDmDXl9IPuZmNz8HHtN7xmIn6YDcm13wA3gTmfwo=
before_install: npm install -g grunt-cli before_install: npm install -g grunt-cli
install: npm install install:
before_script: grunt build - npm install
- npm run dist

@ -1,9 +1,10 @@
FROM mhart/alpine-node:latest FROM node
ADD . /eth-netstats RUN git clone https://github.com/goerli/netstats-server /netstats-server
WORKDIR /eth-netstats WORKDIR /netstats-server
RUN npm install
RUN npm install && npm install -g grunt-cli && grunt RUN npm install -g grunt-cli
RUN grunt
EXPOSE 3000 EXPOSE 3000
CMD ["npm", "start"] CMD ["npm", "start"]

@ -60,14 +60,14 @@ module.exports = function(grunt) {
{ {
expand: true, expand: true,
cwd: 'src/fonts/', cwd: 'src/fonts/',
src: ['minimal-*.*'], src: ['*.*'],
dest: 'dist/fonts/', dest: 'dist/fonts/',
filter: 'isFile' filter: 'isFile'
}, },
{ {
expand: true, expand: true,
cwd: 'src/images/', cwd: 'src/images/',
src: ['*.ico'], src: ['*.*'],
dest: 'dist/', dest: 'dist/',
filter: 'isFile' filter: 'isFile'
}, },

@ -22,14 +22,14 @@ npm install
sudo npm install -g grunt-cli sudo npm install -g grunt-cli
``` ```
##Build the resources ## Build the resources
In order to build the static files you have to run grunt tasks which will generate dist directories containing the js and css files, fonts and images. In order to build the static files you have to run grunt tasks which will generate dist directories containing the js and css files, fonts and images.
```bash ```bash
grunt grunt
``` ```
##Run ## Run
```bash ```bash
WS_SECRET="asdf" npm start WS_SECRET="asdf" npm start

@ -102,6 +102,9 @@ Node.prototype.setInfo = function(data, callback)
Node.prototype.setGeo = function(ip) Node.prototype.setGeo = function(ip)
{ {
if (ip.substr(0, 7) == "::ffff:") {
ip = ip.substr(7)
}
this.info.ip = ip; this.info.ip = ip;
this.geo = geoip.lookup(ip); this.geo = geoip.lookup(ip);
} }

@ -1,29 +1,6 @@
var trusted = [ var trusted = [];
'52.16.188.185',
'54.94.239.50',
'54.174.74.156',
'54.172.25.93',
'54.174.75.126',
'54.173.232.137',
'52.7.205.180',
'52.7.218.44',
'52.7.205.152',
'52.7.224.174',
'92.51.165.126',
'84.117.82.122',
'73.40.58.88',
'178.19.221.38',
'185.37.145.18',
'172.31.39.87',
'86.120.171.69',
'86.123.155.6',
'188.24.81.133',
'::ffff:127.0.0.1',
];
var banned = [ var banned = [];
// '198.48.150.206'
];
module.exports = { module.exports = {
trusted: trusted, trusted: trusted,

@ -1,6 +1,6 @@
{ {
"name": "netstats-server", "name": "netstats-server",
"description": "POA Network Intelligence dashboard", "description": "Görli Network Dashboard",
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"engines": { "engines": {

@ -10,6 +10,41 @@ body {
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
} }
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 200;
src: local('Source Sans Pro ExtraLight'), local('SourceSansPro-ExtraLight'), url(../fonts/SourceSansPro-ExtraLight.woff2) format('woff2');
}
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 300;
src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url(../fonts/SourceSansPro-Light.woff2) format('woff2');
}
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(../fonts/SourceSansPro-Regular.woff2) format('woff2');
}
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 600;
src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url(../fonts/SourceSansPro-SemiBold.woff2) format('woff2');
}
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 700;
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(../fonts/SourceSansPro-Bold.woff2) format('woff2');
}
table td { table td {
font-size: 14px; font-size: 14px;
white-space: nowrap !important; white-space: nowrap !important;
@ -60,7 +95,7 @@ table td {
.text-gray .propagationBox { .text-gray .propagationBox {
background: none !important; background: none !important;
border: 1px solid #f8f8f2; border: 1px solid #777;
} }
.bg-success, .bg-success,
@ -72,7 +107,7 @@ table td {
} }
.text-gray { .text-gray {
color: #f8f8f2 !important; color: #777 !important;
} }
.text-orange { .text-orange {
@ -153,9 +188,9 @@ span.small-title span.small {
} }
.big-info.chart .big-details { .big-info.chart .big-details {
display: block; display: table;
position: absolute;
top: 40px; top: 40px;
margin: 0 auto;
} }
.big-info.chart { .big-info.chart {
@ -172,6 +207,8 @@ span.small-title span.small {
width: 288px; width: 288px;
padding-top: 6px; padding-top: 6px;
margin-left: -2px; margin-left: -2px;
display: table;
margin: 0 auto;
} }
.blocks-holder { .blocks-holder {
@ -185,7 +222,7 @@ span.small-title span.small {
letter-spacing: -0.1px; letter-spacing: -0.1px;
text-transform: none; text-transform: none;
white-space: nowrap; white-space: nowrap;
color: #f8f8f2; color: #777;
} }
.blocks-holder .block-count { .blocks-holder .block-count {
@ -460,7 +497,7 @@ svg .axis line {
shape-rendering: crispEdges; shape-rendering: crispEdges;
} }
svg .axis text { svg .axis text {
fill: #f8f8f2; fill: #777;
font-size: 10px; font-size: 10px;
letter-spacing: 0px; letter-spacing: 0px;
font-family: "Source Sans Pro"; font-family: "Source Sans Pro";
@ -472,3 +509,50 @@ svg .axis text {
svg .y.axis .tick:first-child text { svg .y.axis .tick:first-child text {
opacity: 0; opacity: 0;
} }
@media (max-width: 768px) {
.container-fluid {
padding-left: 5px;
padding-right: 5px;
}
.big-info .icon-full-width i {
width: 75px;
height: 67px;
font-size: 67px;
margin-left: -25px;
}
.big-info .big-details-holder {
left: 75px;
}
.big-info .big-details {
font-size: 35px;
}
.blocks-holder div.small-title-miner {
font-family: inherit;
font-size: 11px;
letter-spacing: -.5px;
}
.blocks-holder {
width: 100%;
}
.big-info.chart i, .second-row .box i {
font-size: 18px;
margin-right: 0px;
}
.second-row .box {
height: 100%; /* BUG XXX */
}
}
@media (max-width: 600px) {
.blocks-holder div.small-title-miner {
font-size: 10px;
}
}

@ -100,6 +100,24 @@ angular.module('netStatsApp.directives', [])
{ {
tElement.replaceWith('<span>' + tAttrs.data + "</span>"); tElement.replaceWith('<span>' + tAttrs.data + "</span>");
// register resize watcher
var timeout;
var width;
$(window).on('resize', function(e) {
if( $('body').width() < 600 )
width = 4;
else if( $('body').width() < 1200 )
width = 5;
else
width = 6;
if(timeout)
clearTimeout(timeout);
timeout = setTimeout(function() {
$.fn.sparkline.defaults.bar.barWidth = width;
}, 200);
});
return function(scope, element, attrs) return function(scope, element, attrs)
{ {
attrs.$observe("data", function (newValue) attrs.$observe("data", function (newValue)
@ -302,6 +320,12 @@ angular.module('netStatsApp.directives', [])
var width = 280 - margin.left - margin.right, var width = 280 - margin.left - margin.right,
height = 63 - margin.top - margin.bottom; height = 63 - margin.top - margin.bottom;
// fix for mobile devices
if( $('body').width() < 600 )
width = 200 - margin.left - margin.right;
else( $('body').width() < 1200 )
width = 240 - margin.left - margin.right;
var TICKS = 40; var TICKS = 40;
var x = d3.scale.linear() var x = d3.scale.linear()
@ -342,10 +366,26 @@ angular.module('netStatsApp.directives', [])
return '<div class="tooltip-arrow"></div><div class="tooltip-inner"><b>' + (d.x/1000) + 's - ' + ((d.x + d.dx)/1000) + 's</b><div class="small">Percent: <b>' + Math.round(d.y * 100) + '%</b>' + '<br>Frequency: <b>' + d.frequency + '</b><br>Cumulative: <b>' + Math.round(d.cumpercent*100) + '%</b></div></div>'; return '<div class="tooltip-arrow"></div><div class="tooltip-inner"><b>' + (d.x/1000) + 's - ' + ((d.x + d.dx)/1000) + 's</b><div class="small">Percent: <b>' + Math.round(d.y * 100) + '%</b>' + '<br>Frequency: <b>' + d.frequency + '</b><br>Cumulative: <b>' + Math.round(d.cumpercent*100) + '%</b></div></div>';
}) })
scope.init = function() scope.init = function(width)
{ {
var data = scope.data; var data = scope.data;
var x = d3.scale.linear()
.domain([0, 10000])
.rangeRound([0, width])
.interpolate(d3.interpolateRound);
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom")
.ticks(4, ",.1s")
.tickFormat(function(t){ return t/1000 + "s"});
var line = d3.svg.line()
.x(function(d) { return x(d.x + d.dx/2) - 1; })
.y(function(d) { return y(d.y) - 2; })
.interpolate('basis');
// Adjust y axis // Adjust y axis
y.domain([0, d3.max(data, function(d) { return d.y; })]); y.domain([0, d3.max(data, function(d) { return d.y; })]);
@ -414,9 +454,24 @@ angular.module('netStatsApp.directives', [])
scope.$watch('data', function() { scope.$watch('data', function() {
if(scope.data.length > 0) { if(scope.data.length > 0) {
scope.init(); scope.init(width);
} }
}, true); }, true);
var timeout;
$(window).on('resize', function(e) {
var width = 280 - margin.left - margin.right;
if( $('body').width() < 768 )
width = 200 - margin.left - margin.right;
if(timeout)
clearTimeout(timeout);
timeout = setTimeout(function() {
// redraw
scope.init(width);
}, 200);
});
} }
}; };
}]); }]);

@ -59,35 +59,17 @@ angular.module('netStatsApp.filters', [])
}) })
.filter('hashrateFilter', ['$sce', '$filter', function($sce, filter) { .filter('hashrateFilter', ['$sce', '$filter', function($sce, filter) {
return function(hashes, isMining) { return function(hashes, isMining) {
var result = 0;
var unit = 'K';
if( !isMining ) if( !isMining )
return $sce.trustAsHtml('<i class="icon-cancel"></i>'); return $sce.trustAsHtml('<i class="icon-cancel"></i>');
if(hashes !== 0 && hashes < 1000) { var result = hashes;
result = hashes; var units = ['', 'K', 'M', 'G', 'T', 'P', 'E'];
unit = ''; var unit = 'K';
}
if(hashes >= 1000 && hashes < Math.pow(1000, 2)) {
result = hashes / 1000;
unit = 'K';
}
if(hashes >= Math.pow(1000, 2) && hashes < Math.pow(1000, 3)) {
result = hashes / Math.pow(1000, 2);
unit = 'M';
}
if(hashes >= Math.pow(1000, 3) && hashes < Math.pow(1000, 4)) {
result = hashes / Math.pow(1000, 3);
unit = 'G';
}
if(hashes >= Math.pow(1000, 4) && hashes < Math.pow(1000, 5)) { for(var i = 1; result > 1000; i++)
result = hashes / Math.pow(1000, 4); {
unit = 'T'; result /= 1000;
unit = units[i];
} }
return $sce.trustAsHtml('<span class="small">' + filter('number')(result.toFixed(1)) + ' <span class="small-hash">' + unit + 'H/s</span></span>'); return $sce.trustAsHtml('<span class="small">' + filter('number')(result.toFixed(1)) + ' <span class="small-hash">' + unit + 'H/s</span></span>');
@ -95,32 +77,14 @@ angular.module('netStatsApp.filters', [])
}]) }])
.filter('totalDifficultyFilter', function() { .filter('totalDifficultyFilter', function() {
return function(hashes) { return function(hashes) {
var result = 0; var result = hashes;
var units = ['', 'K', 'M', 'G', 'T', 'P', 'E'];
var unit = ''; var unit = '';
if(hashes !== 0 && hashes < 1000) { for(var i = 1; result > 1000; i++)
result = hashes; {
unit = ''; result /= 1000;
} unit = units[i];
if(hashes >= 1000 && hashes < Math.pow(1000, 2)) {
result = hashes / 1000;
unit = 'K';
}
if(hashes >= Math.pow(1000, 2) && hashes < Math.pow(1000, 3)) {
result = hashes / Math.pow(1000, 2);
unit = 'M';
}
if(hashes >= Math.pow(1000, 3) && hashes < Math.pow(1000, 4)) {
result = hashes / Math.pow(1000, 3);
unit = 'G';
}
if(hashes >= Math.pow(1000, 4) && hashes < Math.pow(1000, 5)) {
result = hashes / Math.pow(1000, 4);
unit = 'T';
} }
return result.toFixed(2) + ' ' + unit + 'H'; return result.toFixed(2) + ' ' + unit + 'H';
@ -327,32 +291,14 @@ angular.module('netStatsApp.filters', [])
if(hashes === null) if(hashes === null)
hashes = 0; hashes = 0;
var result = 0; var result = hashes;
var units = ['', 'K', 'M', 'G', 'T', 'P'];
var unit = 'K'; var unit = 'K';
if(hashes !== 0 && hashes < 1000) { for(var i = 1; result > 1000; i++)
result = hashes; {
unit = ''; result /= 1000;
} unit = units[i];
if(hashes >= 1000 && hashes < Math.pow(1000, 2)) {
result = hashes / 1000;
unit = 'K';
}
if(hashes >= Math.pow(1000, 2) && hashes < Math.pow(1000, 3)) {
result = hashes / Math.pow(1000, 2);
unit = 'M';
}
if(hashes >= Math.pow(1000, 3) && hashes < Math.pow(1000, 4)) {
result = hashes / Math.pow(1000, 3);
unit = 'G';
}
if(hashes >= Math.pow(1000, 4) && hashes < Math.pow(1000, 5)) {
result = hashes / Math.pow(1000, 4);
unit = 'T';
} }
if( !isMining ) if( !isMining )

@ -7,6 +7,11 @@
$.fn.sparkline.defaults.bar.height = 63; $.fn.sparkline.defaults.bar.height = 63;
$.fn.sparkline.defaults.bar.barWidth = 6; $.fn.sparkline.defaults.bar.barWidth = 6;
if( $('body').width() < 600 )
$.fn.sparkline.defaults.bar.barWidth = 4;
else if( $('body').width() < 1200 )
$.fn.sparkline.defaults.bar.barWidth = 5;
$.fn.sparkline.defaults.bar.barSpacing = 1; $.fn.sparkline.defaults.bar.barSpacing = 1;
$.fn.sparkline.defaults.bar.tooltipClassname = 'jqstooltip'; $.fn.sparkline.defaults.bar.tooltipClassname = 'jqstooltip';
$.fn.sparkline.defaults.bar.tooltipOffsetX = 0; $.fn.sparkline.defaults.bar.tooltipOffsetX = 0;
@ -26,12 +31,3 @@
moment.relativeTimeThreshold('M', 12); moment.relativeTimeThreshold('M', 12);
})(); })();
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
// ga('create', 'UA-68390837-2', 'auto');
ga('create', 'UA-80834434-1', 'auto');
ga('send', 'pageview');

@ -3,11 +3,12 @@ doctype html
html(ng-app="netStatsApp") html(ng-app="netStatsApp")
head head
meta(name="viewport", content="width=device-width, initial-scale=1.0, maximum-scale=1.0") meta(name="viewport", content="width=device-width, initial-scale=1.0, maximum-scale=1.0")
title Ethereum Network Status title Görli Network Status
style(type="text/css") [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { display: none !important; } style(type="text/css") [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { display: none !important; }
link(rel='stylesheet', href='//fonts.googleapis.com/css?family=Source+Sans+Pro:200,300,400,600,700')
link(rel='stylesheet', href='/css/netstats.min.css') link(rel='stylesheet', href='/css/netstats.min.css')
meta(name='robots', content='index,follow')
meta(name='googlebot', content='index,follow')
link(rel='shortcut icon', type="image/x-icon", href="/favicon.ico")
body body
block content block content
script(src="/js/netstats.min.js")
script(src="/js/netstats.min.js")

Loading…
Cancel
Save