stats-ctrl.js 1.5 KB

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