ethstats-server/public/js/filters.js

280 lines
5.7 KiB
JavaScript
Raw Normal View History

2015-01-20 19:29:31 +01:00
'use strict';
/* Filters */
2015-01-29 17:50:16 +01:00
angular.module('netStatsApp.filters', [])
2015-02-05 00:30:16 +01:00
.filter('nodesActiveClass', function() {
return function(active, total) {
var ratio = active/total;
if(ratio >= 0.9)
return 'text-success';
if(ratio >= 0.75)
return 'text-info';
if(ratio >= 0.5)
return 'text-warning';
return 'text-danger';
};
})
2015-01-30 22:37:38 +01:00
.filter('mainClass', function() {
2015-02-05 05:32:42 +01:00
return function(node, bestBlock) {
2015-02-08 16:03:05 +01:00
return mainClass(node, bestBlock);
2015-02-05 05:32:42 +01:00
};
2015-01-30 22:37:38 +01:00
})
2015-01-29 17:50:16 +01:00
.filter('peerClass', function() {
2015-04-09 00:48:27 +02:00
return function(peers, active) {
return peerClass(peers, active);
2015-02-05 05:32:42 +01:00
};
2015-01-29 17:50:16 +01:00
})
.filter('miningClass', function() {
2015-04-09 00:48:27 +02:00
return function(mining, active) {
if(! active)
return 'text-gray';
2015-02-05 05:59:24 +01:00
return (! mining ? 'text-danger' : 'text-success');
2015-02-05 05:32:42 +01:00
};
2015-01-29 17:50:16 +01:00
})
.filter('miningIconClass', function() {
2015-02-05 05:32:42 +01:00
return function(mining) {
return (! mining ? 'icon-cancel' : 'icon-check');
};
2015-01-29 17:50:16 +01:00
})
2015-02-17 16:29:26 +01:00
.filter('nodeVersion', function($sce) {
2015-02-17 15:07:50 +01:00
return function(version) {
2015-03-27 17:52:42 +01:00
if(typeof version !== 'undefined') {
version = version.replace('eth version ', 'v')
.replace("\n" + 'Network protocol version: ', ' (')
.replace("\n" + 'Client database version: ', ',')
.replace("\n" + 'Build: ', ') - ')
.replace('/Debug', '')
.replace('/.', '');
} else
return '';
2015-02-17 16:29:26 +01:00
return $sce.trustAsHtml(version);
};
2015-02-17 15:07:50 +01:00
})
2015-01-29 17:50:16 +01:00
.filter('blockClass', function() {
2015-02-05 05:32:42 +01:00
return function(current, best) {
2015-04-09 00:48:27 +02:00
if( ! current.active)
return 'text-gray';
return (best - current.block.number <= 1 ? 'text-success' : (best - current.block.number > 1 && best - current.block.number < 4 ? 'text-warning' : 'text-danger'));
2015-02-05 05:32:42 +01:00
};
2015-02-05 02:33:58 +01:00
})
2015-02-09 16:44:44 +01:00
.filter('gasFilter', function() {
return function(gas) {
return (typeof gas !== 'undefined' ? parseInt(gas) : '?');
}
})
2015-02-19 18:34:20 +01:00
.filter('hashFilter', function() {
return function(hash) {
2015-04-06 15:13:49 +02:00
return hash.substr(0, 8) + '...' + hash.substr(56, 8);
2015-02-19 18:34:20 +01:00
}
})
2015-02-05 02:33:58 +01:00
.filter('timeClass', function() {
2015-04-09 00:48:27 +02:00
return function(timestamp, active) {
if( ! active)
return 'text-gray';
2015-02-05 05:32:42 +01:00
return timeClass(timestamp);
};
2015-02-05 12:05:21 +01:00
})
2015-02-24 22:38:14 +01:00
.filter('propagationTimeClass', function() {
2015-04-09 00:48:27 +02:00
return function(stats, bestBlock) {
if( ! stats.active)
2015-04-06 12:47:11 +02:00
return 'text-gray';
2015-04-09 00:48:27 +02:00
if(stats.block.number < bestBlock)
return 'text-gray';
if(stats.block.propagation == 0)
2015-04-09 23:36:29 +02:00
return 'text-info';
2015-04-06 13:02:52 +02:00
2015-04-09 00:48:27 +02:00
if(stats.block.propagation < 1000)
2015-04-09 23:36:29 +02:00
return 'text-success';
2015-02-24 22:38:14 +01:00
2015-04-09 00:48:27 +02:00
if(stats.block.propagation < 3000)
2015-04-09 23:36:29 +02:00
return 'text-warning';
2015-04-06 12:47:11 +02:00
2015-04-09 00:48:27 +02:00
if(stats.block.propagation < 7000)
2015-04-09 23:36:29 +02:00
return 'text-orange';
2015-02-24 22:38:14 +01:00
2015-04-09 23:36:29 +02:00
return 'text-danger'
2015-02-24 22:38:14 +01:00
};
})
2015-03-27 12:35:23 +01:00
.filter('latencyFilter', function() {
return function(stats) {
if(stats.active === false)
return 'offline';
else
return stats.latency + ' ms';
}
})
2015-02-24 22:38:14 +01:00
.filter('latencyClass', function() {
2015-03-27 12:35:23 +01:00
return function(stats) {
if(stats.active === false)
2015-04-09 00:48:27 +02:00
return 'text-danger';
2015-03-27 12:35:23 +01:00
if(stats.latency <= 100)
2015-02-24 22:38:14 +01:00
return 'text-success';
2015-03-27 12:35:23 +01:00
if(stats.latency <= 1000)
2015-02-24 22:38:14 +01:00
return 'text-warning';
return 'text-danger'
};
})
2015-02-18 09:57:45 +01:00
.filter('blockTimeFilter', function() {
2015-02-18 10:10:33 +01:00
return function(timestamp) {
2015-02-18 10:11:26 +01:00
if(timestamp === 0)
return '∞';
2015-04-04 21:35:45 +02:00
// var time = Math.floor((new Date()).getTime() / 1000);
var time = (new Date()).getTime();
var diff = Math.floor((time - timestamp)/1000);
2015-02-18 10:10:33 +01:00
if(diff < 60)
2015-02-23 14:57:41 +01:00
return Math.round(diff) + ' s ago';
2015-02-18 10:10:33 +01:00
return moment.duration(Math.round(diff), 's').humanize() + ' ago';
2015-02-18 09:57:45 +01:00
};
2015-03-04 23:11:51 +01:00
})
.filter('blockPropagationFilter', function() {
2015-04-04 23:59:24 +02:00
return function(ms) {
2015-03-04 23:11:51 +01:00
var result = 0;
2015-03-05 16:04:58 +01:00
if(ms < 1000) {
return (ms === 0 ? "" : "+") + ms + " ms";
2015-03-04 23:20:57 +01:00
}
2015-03-05 16:04:58 +01:00
if(ms < 1000*60) {
2015-03-04 23:20:57 +01:00
result = ms/1000;
return "+" + result.toFixed(1) + " s";
2015-03-04 23:11:51 +01:00
}
2015-03-05 16:04:58 +01:00
if(ms < 1000*60*60) {
2015-03-04 23:20:57 +01:00
result = ms/1000/60;
return "+" + Math.round(result) + " min";
2015-03-04 23:11:51 +01:00
}
2015-03-05 16:04:58 +01:00
if(ms < 1000*60*60*24) {
2015-03-04 23:20:57 +01:00
result = ms/1000/60/60;
return "+" + Math.round(result) + " h";
2015-03-04 23:11:51 +01:00
}
2015-03-04 23:20:57 +01:00
result = ms/1000/60/60/24;
return "+" + Math.round(result) + " days";
2015-03-04 23:11:51 +01:00
};
})
.filter('avgTimeFilter', function() {
2015-02-18 09:57:45 +01:00
return function(time) {
2015-02-18 10:10:33 +01:00
if(time < 60)
return Math.round(time) + ' s';
2015-02-18 09:57:45 +01:00
return moment.duration(Math.round(time), 's').humanize();
2015-02-18 08:54:04 +01:00
};
})
.filter('avgTimeClass', function() {
return function(time) {
return blockTimeClass(time);
}
})
2015-02-05 12:05:21 +01:00
.filter('upTimeFilter', function() {
return function(uptime) {
return Math.round(uptime) + '%';
};
})
.filter('upTimeClass', function() {
2015-04-09 00:48:27 +02:00
return function(uptime, active) {
if( ! active )
return 'text-gray';
2015-02-05 12:05:21 +01:00
if(uptime >= 90)
return 'text-success';
if(uptime >= 75)
return 'text-warning';
return 'text-danger';
};
})
.filter('geoTooltip', function() {
2015-02-05 09:27:12 +01:00
return function(geo) {
if(geo !== null)
return geo.city + ", " + geo.country;
return '';
2015-02-05 09:27:12 +01:00
};
2015-02-08 16:03:05 +01:00
})
.filter('bubbleClass', function() {
return function(node, bestBlock) {
return mainClass(node, bestBlock).replace('text-', '');
2015-04-06 01:28:42 +02:00
};
})
.filter('minerNameFilter', function() {
2015-04-06 20:10:27 +02:00
return function(address, name) {
if(typeof name !== 'undefined' && name !== false && name.length > 0)
return name;
return address.replace('0x', '');
2015-04-06 01:28:42 +02:00
};
})
.filter('minerBlocksClass', function() {
return function(blocks) {
if(blocks <= 6)
return 'bg-success';
if(blocks <= 12)
return 'bg-info';
if(blocks <= 18)
return 'bg-warning';
return 'bg-danger';
};
2015-02-05 05:32:42 +01:00
});
2015-02-05 02:33:58 +01:00
2015-02-08 16:03:05 +01:00
function mainClass(node, bestBlock)
{
if( ! node.active)
2015-04-09 00:10:06 +02:00
return 'text-gray';
2015-02-08 16:03:05 +01:00
if(node.peers === 0)
return 'text-danger';
2015-02-18 00:28:47 +01:00
// return timeClass(node.block.timestamp);
2015-04-09 00:48:27 +02:00
return peerClass(node.peers, node.active);
2015-02-08 16:03:05 +01:00
}
2015-04-09 00:48:27 +02:00
function peerClass(peers, active)
2015-02-05 05:32:42 +01:00
{
2015-04-09 00:48:27 +02:00
if( ! active)
return 'text-gray';
2015-02-05 05:32:42 +01:00
return (peers <= 1 ? 'text-danger' : (peers > 1 && peers < 4 ? 'text-warning' : 'text-success'));
}
2015-02-05 02:33:58 +01:00
2015-02-05 05:32:42 +01:00
function timeClass(timestamp)
{
2015-04-06 12:47:11 +02:00
var diff = ((new Date()).getTime() - timestamp)/1000;
2015-02-05 02:33:58 +01:00
2015-02-18 08:54:04 +01:00
return blockTimeClass(diff);
}
function blockTimeClass(diff)
{
2015-02-05 05:32:42 +01:00
if(diff <= 12)
return 'text-success';
2015-02-05 02:33:58 +01:00
2015-02-05 05:32:42 +01:00
if(diff <= 20)
2015-04-06 12:55:33 +02:00
return 'text-warning';
2015-02-05 05:32:42 +01:00
if(diff <= 30)
2015-04-06 12:55:33 +02:00
return 'text-orange';
2015-02-05 05:32:42 +01:00
2015-02-18 08:54:04 +01:00
return 'text-danger'
2015-02-05 05:32:42 +01:00
}