github.com/sym3tri/etcd@v0.2.1-0.20140422215517-a563d82f95d6/mod/dashboard/app/page/stats/stats-ctrl.js (about) 1 'use strict'; 2 3 angular.module('etcd.page') 4 .controller('StatsCtrl', function($scope, $modal, etcdApiSvc, pollerSvc) { 5 6 $scope.followers = null; 7 $scope.leader = null; 8 $scope.leaderName = null; 9 10 $scope.parseLatencyStats = function(stats) { 11 $scope.followers = stats.followers; 12 $scope.leaderName = stats.leaderName; 13 }; 14 15 $scope.fetchLeaderDetails = function() { 16 return etcdApiSvc.fetchPeerDetailStats($scope.leaderName) 17 .then(function(leaderSelfStats) { 18 $scope.leader = { 19 name: $scope.leaderName, 20 uptime: leaderSelfStats.leaderInfo.uptime 21 }; 22 }); 23 }; 24 25 $scope.$watch('leaderName', function(leaderName) { 26 if (leaderName) { 27 pollerSvc.kill('leaderDetailsPoller'); 28 pollerSvc.register('leaderDetailsPoller', { 29 fn: $scope.fetchLeaderDetails, 30 scope: $scope, 31 interval: 5000 32 }); 33 } 34 }); 35 36 $scope.openDetailModal = function(peerName) { 37 $modal.open({ 38 templateUrl: '/page/stats/stats-detail.html', 39 controller: 'StatsDetailCtrl', 40 resolve: { 41 peerName: d3.functor(peerName), 42 } 43 }); 44 }; 45 46 $scope.getSquareStatusClass = function(follower) { 47 if (follower.latency.current < 25) { 48 return 'ed-m-square-status--green'; 49 } 50 if (follower.latency.current < 60) { 51 return 'ed-m-square-status--orange'; 52 } 53 return 'ed-m-square-status--red'; 54 }; 55 56 pollerSvc.register('statsPoller', { 57 fn: etcdApiSvc.fetchLeaderStats, 58 then: $scope.parseLatencyStats, 59 scope: $scope, 60 interval: 500 61 }); 62 63 });