etcd/mod/dashboard/app/page/stats/stats-ctrl.js
2014-04-14 12:16:18 -07:00

64 lines
1.5 KiB
JavaScript

'use strict';
angular.module('etcd.page')
.controller('StatsCtrl', function($scope, $modal, etcdApiSvc, pollerSvc) {
$scope.followers = null;
$scope.leader = null;
$scope.leaderName = null;
$scope.parseLatencyStats = function(stats) {
$scope.followers = stats.followers;
$scope.leaderName = stats.leaderName;
};
$scope.fetchLeaderDetails = function() {
return etcdApiSvc.fetchPeerDetailStats($scope.leaderName)
.then(function(leaderSelfStats) {
$scope.leader = {
name: $scope.leaderName,
uptime: leaderSelfStats.leaderInfo.uptime
};
});
};
$scope.$watch('leaderName', function(leaderName) {
if (leaderName) {
pollerSvc.kill('leaderDetailsPoller');
pollerSvc.register('leaderDetailsPoller', {
fn: $scope.fetchLeaderDetails,
scope: $scope,
interval: 5000
});
}
});
$scope.openDetailModal = function(peerName) {
$modal.open({
templateUrl: '/page/stats/stats-detail.html',
controller: 'StatsDetailCtrl',
resolve: {
peerName: d3.functor(peerName),
}
});
};
$scope.getSquareStatusClass = function(follower) {
if (follower.latency.current < 25) {
return 'ed-m-square-status--green';
}
if (follower.latency.current < 60) {
return 'ed-m-square-status--orange';
}
return 'ed-m-square-status--red';
};
pollerSvc.register('statsPoller', {
fn: etcdApiSvc.fetchLeaderStats,
then: $scope.parseLatencyStats,
scope: $scope,
interval: 500
});
});