Merge pull request #112 from cubedro/develop

Improvements
pull/5/head
Marian OANCΞA 10 years ago
commit d48203267d
  1. 4
      models/history.js
  2. 4
      public/css/style.css
  3. 4
      public/js/app.js
  4. 20
      public/js/controllers.js
  5. 59
      public/js/filters.js
  6. 1
      public/js/lib/angular-moment.min.js.map
  7. 2
      public/js/lib/angular.min.js
  8. 8
      public/js/lib/angular.min.js.map
  9. 26
      public/js/services.js
  10. 9
      views/index.jade

@ -334,9 +334,9 @@ History.prototype.getAvgHashrate = function()
})
.value();
var avgBlocktime = _.sum(blocktimeHistory) / blocktimeHistory.length;
var avgBlocktime = (_.sum(blocktimeHistory) / blocktimeHistory.length)/1000;
return avgDifficulty / 1000 * 12 * ( 12 / avgBlocktime );
return avgDifficulty * 12 * ( 12 / avgBlocktime );
}
History.prototype.getMinersCount = function()

@ -133,6 +133,10 @@ span.small-title span.small {
word-spacing: nowrap !important;
}
.big-info .big-details .small-hash {
font-size: 87%;
}
.big-info .big-details-holder {
position: absolute;
top: 15px;

@ -1,7 +1,7 @@
'use strict';
var app = angular.module('netStatsApp', ['lodash', 'angularMoment', 'netStatsApp.filters', 'netStatsApp.directives']);
var netStatsApp = angular.module('netStatsApp', ['lodash', 'angularMoment', 'netStatsApp.filters', 'netStatsApp.directives']);
app.run(function(amMoment) {
netStatsApp.run(function(amMoment) {
amMoment.changeLocale('en-gb');
});

@ -2,7 +2,7 @@
/* Controllers */
function StatsCtrl($scope, $filter, socket, _, toastr) {
netStatsApp.controller('StatsCtrl', function($scope, $filter, socket, _, toastr) {
// Main Stats init
// ---------------
@ -34,7 +34,7 @@ function StatsCtrl($scope, $filter, socket, _, toastr) {
$scope.latency = 0;
$scope.currentApiVersion = "0.0.6";
$scope.currentApiVersion = "0.0.7";
$scope.predicate = ['-stats.active', '-stats.block.number', 'stats.block.propagation'];
$scope.reverse = false;
@ -52,9 +52,10 @@ function StatsCtrl($scope, $filter, socket, _, toastr) {
}
}
$scope.timeout = setInterval(function(){
$scope.timeout = setInterval(function ()
{
$scope.$apply();
}, 1000);
}, 200);
$scope.getNumber = function(num) {
return new Array(num);
@ -63,8 +64,6 @@ function StatsCtrl($scope, $filter, socket, _, toastr) {
// Socket listeners
// ----------------
socket = new Primus();
socket.on('open', function open() {
socket.emit('ready');
console.log('The connection has been opened.');
@ -178,7 +177,7 @@ function StatsCtrl($scope, $filter, socket, _, toastr) {
break;
case "inactive":
if(typeof data.stats !== 'undefined')
if( !_.isUndefined(data.stats) )
$scope.nodes[findIndex({id: data.id})].stats = data.stats;
toastr['error']("Node "+ $scope.nodes[findIndex({id: data.id})].info.name +" went away!", "Node connection was lost!");
@ -186,9 +185,10 @@ function StatsCtrl($scope, $filter, socket, _, toastr) {
break;
case "latency":
var node = $scope.nodes[findIndex({id: data.id})];
if( !_.isUndefined(data.id) )
var node = $scope.nodes[findIndex({id: data.id})];
if(typeof node.stats !== 'undefined' && typeof node.stats.latency !== 'undefined')
if( !_.isUndefined(node) && !_.isUndefined(node.stats) && !_.isUndefined(node.stats.latency))
$scope.nodes[findIndex({id: data.id})].stats.latency = data.latency;
break;
@ -316,4 +316,4 @@ function StatsCtrl($scope, $filter, socket, _, toastr) {
$scope.$apply();
}
}
});

@ -174,6 +174,29 @@ angular.module('netStatsApp.filters', [])
return 'text-danger'
};
})
.filter('propagationNodeAvgTimeClass', function() {
return function(stats, bestBlock) {
if( ! stats.active)
return 'text-gray';
if(stats.block.number < bestBlock)
return 'text-gray';
if(stats.propagationAvg == 0)
return 'text-info';
if(stats.propagationAvg < 1000)
return 'text-success';
if(stats.propagationAvg < 3000)
return 'text-warning';
if(stats.propagationAvg < 7000)
return 'text-orange';
return 'text-danger'
};
})
.filter('propagationAvgTimeClass', function() {
return function(propagationAvg, active) {
if( ! active)
@ -231,6 +254,42 @@ angular.module('netStatsApp.filters', [])
return moment.duration(Math.round(diff), 's').humanize() + ' ago';
};
})
.filter('networkHashrateFilter', ['$sce', '$filter', function($sce, filter) {
return function(hashes, isMining) {
var result = 0;
var unit = 'K';
if(hashes !== 0 && hashes < 1000) {
result = hashes;
unit = '';
}
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 )
return $sce.trustAsHtml(filter('number')(result.toFixed(1)) + ' <span class="small-hash">' + unit + 'H/s</span>');
return $sce.trustAsHtml('? <span class="small-hash">' + unit + 'KH/s</span>');
};
}])
.filter('blockPropagationFilter', function() {
return function(ms, prefix) {
if(typeof prefix === 'undefined')

File diff suppressed because one or more lines are too long

@ -214,4 +214,4 @@ k)l=null;else if(w)for(v=0;v<c.length;v++){if(d[m]=c[v],w(e,d)==k){l=x(e,d);brea
x=t.clone();h=0;for(var B=g.children(),v=B.length;h<v;h++)if(""===B[h].value){w=z=B.eq(h);break}q.init(k,z,x);p&&(k.$isEmpty=function(a){return!a||0===a.length});s?n(e,g,k):p?l(e,g,k):m(e,g,k,q)}}}}],hd=["$interpolate",function(a){var c={addOption:v,removeOption:v};return{restrict:"E",priority:100,compile:function(d,e){if(F(e.value)){var f=a(d.text(),!0);f||e.$set("value",d.text())}return function(a,d,e){var m=d.parent(),l=m.data("$selectController")||m.parent().data("$selectController");l&&l.databound?
d.prop("selected",!1):l=c;f?a.$watch(f,function(a,c){e.$set("value",a);a!==c&&l.removeOption(c);l.addOption(a)}):l.addOption(e.value);d.on("$destroy",function(){l.removeOption(e.value)})}}}}],gd=aa({restrict:"E",terminal:!0});W.angular.bootstrap?console.log("WARNING: Tried to load angular more than once."):((Fa=W.jQuery)&&Fa.fn.on?(A=Fa,E(Fa.fn,{scope:Oa.scope,isolateScope:Oa.isolateScope,controller:Oa.controller,injector:Oa.injector,inheritedData:Oa.inheritedData}),Gb("remove",!0,!0,!1),Gb("empty",
!1,!1,!1),Gb("html",!1,!1,!0)):A=S,Xa.element=A,Zc(Xa),A(X).ready(function(){Wc(X,dc)}))})(window,document);!window.angular.$$csp()&&window.angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}.ng-animate-block-transitions{transition:0s all!important;-webkit-transition:0s all!important;}.ng-hide-add-active,.ng-hide-remove{display:block!important;}</style>');
//# sourceMappingURL=angular.min.js.map
//# sourceMappingURL=angular.min.js.map

File diff suppressed because one or more lines are too long

@ -2,32 +2,12 @@
/* Services */
app.factory('socket', function ($rootScope) {
var socket;// = new Primus();
netStatsApp.factory('socket', function ($rootScope) {
var socket = new Primus();
return socket;
// return {
// on: function (eventName, callback) {
// socket.on(eventName, function () {
// var args = arguments;
// $rootScope.$apply(function () {
// callback.apply(socket, args);
// });
// });
// },
// emit: function (eventName, data, callback) {
// socket.emit(eventName, data, function () {
// var args = arguments;
// $rootScope.$apply(function () {
// if (callback) {
// callback.apply(socket, args);
// }
// });
// })
// }
// };
});
app.factory('toastr', function ($rootScope) {
netStatsApp.factory('toastr', function ($rootScope) {
toastr = window.toastr;
toastr.options = {
"closeButton": false,

@ -42,7 +42,7 @@ block content
i.icon-hashrate
div.big-details-holder
span.small-title avg network hashrate
span.big-details {{ avgHashrate | number : 1 }} MH/s
span.big-details(ng-bind-html="avgHashrate | networkHashrateFilter")
div.clearfix
div.col-xs-2.stat-holder
div.big-info.difficulty.text-danger
@ -104,7 +104,7 @@ block content
div.big-info.chart.xdouble-chart(class="{{ blockPropagationAvg | propagationAvgTimeClass : true }}")
//- i.icon-gas
span.small-title block propagation
span.small-value {{ blockPropagationAvg | blockPropagationFilter : '' }}
//- span.small-value {{ blockPropagationAvg | blockPropagationFilter : '' }}
histogram.big-details.d3-blockpropagation(data="blockPropagationChart")
div.col-xs-3.stat-holder.pull-right
@ -192,7 +192,8 @@ block content
td(class="{{ node.stats.mining | miningClass : node.stats.active }}")
i(class="{{ node.stats.mining | miningIconClass }}")
td(class="{{ node.stats.mining | hashrateClass : node.stats.active }}")
span.small {{node.stats.hashrate | hashrateFilter}} kH/s
span.small(ng-bind-html="node.stats.hashrate | networkHashrateFilter")
//- {{node.stats.hashrate | hashrateFilter}} kH/s
td(class="{{ node.stats.peers | peerClass : node.stats.active }}", style="padding-left: 11px;") {{node.stats.peers}}
td(style="padding-left: 15px;") {{node.stats.pending}}
td(class="{{ node.stats | blockClass : bestBlock }}") {{'#'}}{{ node.stats.block.number | number }}
@ -205,5 +206,5 @@ block content
div.propagationBox
span {{node.stats.block.propagation | blockPropagationFilter}}
td.peerPropagationChart(class="{{node.id}}")
td(class="{{ node.stats.propagationAvg | propagationAvgTimeClass : node.stats.active }}") {{ node.stats.propagationAvg | blockPropagationFilter : '' }}
td(class="{{ node.stats | propagationNodeAvgTimeClass : node.stats.active }}") {{ node.stats.propagationAvg | blockPropagationFilter : '' }}
td(class="{{ node.stats.uptime | upTimeClass : node.stats.active }}") {{ node.stats.uptime | upTimeFilter }}

Loading…
Cancel
Save