mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
64 lines
1.5 KiB
JavaScript
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
|
|
});
|
|
|
|
});
|