moved datamaps as angular directive
This commit is contained in:
parent
2be95fb402
commit
dad7b8f2ba
@ -62,6 +62,7 @@ table td i {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#mapHolder {
|
#mapHolder {
|
||||||
|
display: block;
|
||||||
position: relative;
|
position: relative;
|
||||||
padding-bottom: 56.25%;
|
padding-bottom: 56.25%;
|
||||||
height: 0;
|
height: 0;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/* Controllers */
|
/* Controllers */
|
||||||
|
|
||||||
function StatsCtrl($scope, socket, _) {
|
function StatsCtrl($scope, $filter, socket, _) {
|
||||||
|
|
||||||
// Main Stats init
|
// Main Stats init
|
||||||
// ---------------
|
// ---------------
|
||||||
@ -13,16 +13,28 @@ function StatsCtrl($scope, socket, _) {
|
|||||||
$scope.lastBlock = 0;
|
$scope.lastBlock = 0;
|
||||||
$scope.upTimeTotal = 0;
|
$scope.upTimeTotal = 0;
|
||||||
|
|
||||||
|
$scope.map = [
|
||||||
|
{
|
||||||
|
radius: 5,
|
||||||
|
latitude: 11.515,
|
||||||
|
longitude: 165.1619
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
// Socket listeners
|
// Socket listeners
|
||||||
// ----------------
|
// ----------------
|
||||||
|
|
||||||
socket.on('init', function(data){
|
socket.emit('ready');
|
||||||
|
|
||||||
|
socket.on('init', function(data)
|
||||||
|
{
|
||||||
$scope.nodes = data.nodes;
|
$scope.nodes = data.nodes;
|
||||||
|
|
||||||
updateStats();
|
updateStats();
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.on('update', function(data){
|
socket.on('update', function(data)
|
||||||
|
{
|
||||||
$scope.nodes[data.id] = data;
|
$scope.nodes[data.id] = data;
|
||||||
|
|
||||||
updateStats();
|
updateStats();
|
||||||
@ -31,9 +43,37 @@ function StatsCtrl($scope, socket, _) {
|
|||||||
function updateStats()
|
function updateStats()
|
||||||
{
|
{
|
||||||
$scope.nodesTotal = $scope.nodes.length;
|
$scope.nodesTotal = $scope.nodes.length;
|
||||||
$scope.nodesActive = _.filter($scope.nodes, function(node){ return node.stats.active == true; }).length;
|
|
||||||
$scope.bestBlock = _.max($scope.nodes, function(node){ return parseInt(node.stats.block.height); }).stats.block.height;
|
$scope.nodesActive = _.filter($scope.nodes, function(node) {
|
||||||
$scope.lastBlock = _.max($scope.nodes, function(node){ return parseInt(node.stats.block.timestamp); }).stats.block.timestamp;
|
return node.stats.active == true;
|
||||||
$scope.upTimeTotal = _.reduce($scope.nodes, function(total, node){ return total + node.stats.uptime.total; }, 0) / $scope.nodes.length;
|
}).length;
|
||||||
|
|
||||||
|
$scope.bestBlock = _.max($scope.nodes, function(node) {
|
||||||
|
return parseInt(node.stats.block.height);
|
||||||
|
}).stats.block.height;
|
||||||
|
|
||||||
|
$scope.lastBlock = _.max($scope.nodes, function(node) {
|
||||||
|
return parseInt(node.stats.block.timestamp);
|
||||||
|
}).stats.block.timestamp;
|
||||||
|
|
||||||
|
$scope.upTimeTotal = _.reduce($scope.nodes, function(total, node) {
|
||||||
|
return total + node.stats.uptime.total;
|
||||||
|
}, 0) / $scope.nodes.length;
|
||||||
|
|
||||||
|
$scope.map = _.map($scope.nodes, function(node) {
|
||||||
|
if(node.geo != null)
|
||||||
|
return {
|
||||||
|
radius: 3,
|
||||||
|
latitude: node.geo.ll[0],
|
||||||
|
longitude: node.geo.ll[1],
|
||||||
|
fillKey: $filter('bubbleClass')(node, $scope.bestBlock)
|
||||||
|
};
|
||||||
|
else
|
||||||
|
return {
|
||||||
|
radius: 0,
|
||||||
|
latitude: 0,
|
||||||
|
longitude: 0
|
||||||
|
};
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -8,4 +8,49 @@ angular.module('netStatsApp.directives', []).
|
|||||||
return function(scope, elm, attrs) {
|
return function(scope, elm, attrs) {
|
||||||
elm.text(version);
|
elm.text(version);
|
||||||
};
|
};
|
||||||
|
}]).
|
||||||
|
directive('nodemap', ['$compile', function($compile) {
|
||||||
|
return {
|
||||||
|
restrict: 'EA',
|
||||||
|
scope: {
|
||||||
|
data: '='
|
||||||
|
},
|
||||||
|
link: function(scope, element, attrs) {
|
||||||
|
element.empty();
|
||||||
|
|
||||||
|
scope.map = new Datamap({
|
||||||
|
element: element[0],
|
||||||
|
scope: 'world',
|
||||||
|
responsive: true,
|
||||||
|
fills: {
|
||||||
|
success: '#7bcc3a',
|
||||||
|
info: '#10a0de',
|
||||||
|
warning: '#FFD162',
|
||||||
|
danger: '#F74B4B',
|
||||||
|
defaultFill: '#282828'
|
||||||
|
},
|
||||||
|
geographyConfig: {
|
||||||
|
borderWidth: 0,
|
||||||
|
borderColor: '#000',
|
||||||
|
highlightOnHover: false,
|
||||||
|
popupOnHover: false
|
||||||
|
},
|
||||||
|
bubblesConfig: {
|
||||||
|
borderWidth: 0,
|
||||||
|
popupOnHover: false,
|
||||||
|
highlightOnHover: false
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
scope.map.bubbles(scope.data);
|
||||||
|
|
||||||
|
scope.$watch('data', function() {
|
||||||
|
scope.map.bubbles(scope.data, {
|
||||||
|
borderWidth: 0,
|
||||||
|
popupOnHover: false,
|
||||||
|
highlightOnHover: false
|
||||||
|
});
|
||||||
|
}, true);
|
||||||
|
}
|
||||||
|
};
|
||||||
}]);
|
}]);
|
@ -21,13 +21,7 @@ angular.module('netStatsApp.filters', [])
|
|||||||
})
|
})
|
||||||
.filter('mainClass', function() {
|
.filter('mainClass', function() {
|
||||||
return function(node, bestBlock) {
|
return function(node, bestBlock) {
|
||||||
if( ! node.active)
|
return mainClass(node, bestBlock);
|
||||||
return 'text-danger';
|
|
||||||
|
|
||||||
if(node.peers === 0)
|
|
||||||
return 'text-danger';
|
|
||||||
|
|
||||||
return timeClass(node.block.timestamp);
|
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
.filter('peerClass', function() {
|
.filter('peerClass', function() {
|
||||||
@ -78,8 +72,24 @@ angular.module('netStatsApp.filters', [])
|
|||||||
|
|
||||||
return '';
|
return '';
|
||||||
};
|
};
|
||||||
|
})
|
||||||
|
.filter('bubbleClass', function() {
|
||||||
|
return function(node, bestBlock) {
|
||||||
|
return mainClass(node, bestBlock).replace('text-', '');
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function mainClass(node, bestBlock)
|
||||||
|
{
|
||||||
|
if( ! node.active)
|
||||||
|
return 'text-danger';
|
||||||
|
|
||||||
|
if(node.peers === 0)
|
||||||
|
return 'text-danger';
|
||||||
|
|
||||||
|
return timeClass(node.block.timestamp);
|
||||||
|
}
|
||||||
|
|
||||||
function peerClass(peers)
|
function peerClass(peers)
|
||||||
{
|
{
|
||||||
return (peers <= 1 ? 'text-danger' : (peers > 1 && peers < 4 ? 'text-warning' : 'text-success'));
|
return (peers <= 1 ? 'text-danger' : (peers > 1 && peers < 4 ? 'text-warning' : 'text-success'));
|
||||||
|
@ -13,68 +13,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var map = new Datamap({
|
|
||||||
scope: 'world',
|
|
||||||
responsive: true,
|
|
||||||
element: mapHolder,
|
|
||||||
fills: {
|
|
||||||
defaultFill: '#282828'
|
|
||||||
},
|
|
||||||
geographyConfig: {
|
|
||||||
borderWidth: 0,
|
|
||||||
borderColor: '#000',
|
|
||||||
highlightOnHover: false,
|
|
||||||
popupOnHover: false
|
|
||||||
},
|
|
||||||
arcConfig: {
|
|
||||||
strokeColor: '#10A0DE',
|
|
||||||
strokeWidth: 1,
|
|
||||||
arcSharpness: 1,
|
|
||||||
animationSpeed: 600
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
map.arc([
|
|
||||||
{
|
|
||||||
origin: {
|
|
||||||
latitude: 40.7089,
|
|
||||||
longitude: -74.0012
|
|
||||||
},
|
|
||||||
destination: {
|
|
||||||
latitude: 37.618889,
|
|
||||||
longitude: -122.375
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
origin: {
|
|
||||||
latitude: 40.7089,
|
|
||||||
longitude: -74.0012
|
|
||||||
},
|
|
||||||
destination: {
|
|
||||||
latitude: 40.639722,
|
|
||||||
longitude: 73.778889
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
origin: {
|
|
||||||
latitude: 40.7089,
|
|
||||||
longitude: -74.0012
|
|
||||||
},
|
|
||||||
destination: {
|
|
||||||
latitude: 25.793333,
|
|
||||||
longitude: -0.290556
|
|
||||||
}
|
|
||||||
}
|
|
||||||
], { strokeColor: '#10A0DE' });
|
|
||||||
|
|
||||||
d3.select(mapHolder).select('svg').attr('data-width', mapHolder.clientWidth);
|
d3.select(mapHolder).select('svg').attr('data-width', mapHolder.clientWidth);
|
||||||
|
|
||||||
window.addEventListener("resize", function (event) {
|
// window.addEventListener("resize", function (event) {
|
||||||
map.resize();
|
// map.resize();
|
||||||
});
|
// });
|
||||||
|
|
||||||
var socket = io.connect();
|
var socket = io.connect();
|
||||||
socket.emit('ready');
|
|
||||||
|
|
||||||
socket.on('init', function(data){
|
socket.on('init', function(data){
|
||||||
console.log(data);
|
console.log(data);
|
||||||
|
@ -47,7 +47,7 @@ block content
|
|||||||
|
|
||||||
div.col-lg-6
|
div.col-lg-6
|
||||||
div.col-xs-12
|
div.col-xs-12
|
||||||
div#mapHolder
|
nodemap#mapHolder(data="map")
|
||||||
|
|
||||||
div.clearfix
|
div.clearfix
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user