diff --git a/glances/outputs/static/bower.json b/glances/outputs/static/bower.json index 93c7c550fb85dc1b0b33c14d176d7ec9c3b15717..2424d373ce54b85fa357715cec1fa271b2aac655 100644 --- a/glances/outputs/static/bower.json +++ b/glances/outputs/static/bower.json @@ -5,6 +5,7 @@ "angular": "^1.5.8", "angular-route": "^1.5.8", "lodash": "^4.13.1", - "favico.js": "^0.3.10" + "favico.js": "^0.3.10", + "angular-hotkeys-light": "^1.1.1" } } diff --git a/glances/outputs/static/js/app.js b/glances/outputs/static/js/app.js index fab82a0e0d7c934fe8df5ff7173ce64ad4f8523f..3d99d353a567b5f8d65bf894ec074f17783c076b 100644 --- a/glances/outputs/static/js/app.js +++ b/glances/outputs/static/js/app.js @@ -1,4 +1,4 @@ -var glancesApp = angular.module('glancesApp', ['ngRoute', 'glances.config']) +var glancesApp = angular.module('glancesApp', ['ngRoute', 'glances.config', 'fps.hotkeys']) .config(function($routeProvider, $locationProvider) { $routeProvider.when('/', { diff --git a/glances/outputs/static/js/components/glances/controller.js b/glances/outputs/static/js/components/glances/controller.js index 94a0c4209d051c1c5f6b7243c48d7bc532f20a1e..e90e3156068c9d3158276c958bde0a62b2325dcd 100644 --- a/glances/outputs/static/js/components/glances/controller.js +++ b/glances/outputs/static/js/components/glances/controller.js @@ -1,6 +1,6 @@ 'use strict'; -function GlancesController($interval, GlancesStats, REFRESH_TIME) { +function GlancesController($interval, GlancesStats, REFRESH_TIME, Hotkeys) { var vm = this; vm.dataLoaded = false; @@ -25,4 +25,13 @@ function GlancesController($interval, GlancesStats, REFRESH_TIME) { $interval(function () { vm.refreshData(); }, REFRESH_TIME * 1000); // in milliseconds + + Hotkeys.registerHotkey(Hotkeys.createHotkey({ + key: 'm', + callback: function () { + console.log('Sort processes by MEM%'); + } + })); + + Hotkeys.registerHotkey( hotkey); } diff --git a/glances/outputs/static/public/js/main.min.js b/glances/outputs/static/public/js/main.min.js index 0dce27191ee30354b57c380ce7c25b88dba060d0..d9b955d38424d683f31d950f8028b668cb76ea7c 100644 --- a/glances/outputs/static/public/js/main.min.js +++ b/glances/outputs/static/public/js/main.min.js @@ -1,4 +1,4 @@ -var glancesApp = angular.module('glancesApp', ['ngRoute', 'glances.config']) +var glancesApp = angular.module('glancesApp', ['ngRoute', 'glances.config', 'fps.hotkeys']) .config(["$routeProvider", "$locationProvider", function($routeProvider, $locationProvider) { $routeProvider.when('/', { @@ -315,7 +315,7 @@ glancesApp.component('glances', { 'use strict'; -function GlancesController($interval, GlancesStats, REFRESH_TIME) { +function GlancesController($interval, GlancesStats, REFRESH_TIME, Hotkeys) { var vm = this; vm.dataLoaded = false; @@ -340,26 +340,15 @@ function GlancesController($interval, GlancesStats, REFRESH_TIME) { $interval(function () { vm.refreshData(); }, REFRESH_TIME * 1000); // in milliseconds -} - -'use strict'; - -glancesApp.component('glancesHelp', { - controller: GlancesHelpController, - controllerAs: 'vm', - bindings: { - }, - templateUrl: 'components/help/view.html' -}); -'use strict'; - -function GlancesHelpController(GlancesStats) { - var vm = this; + Hotkeys.registerHotkey(Hotkeys.createHotkey({ + key: 'm', + callback: function () { + console.log('Sort processes by MEM%'); + } + })); - GlancesStats.getHelp().then(function(help) { - vm.help = help; - }); + Hotkeys.registerHotkey( hotkey); } 'use strict'; @@ -449,38 +438,22 @@ function GlancesPluginAlertController(favicoService) { 'use strict'; -glancesApp.component('glancesPluginCloud', { - controller: GlancesPluginCloudController, +glancesApp.component('glancesHelp', { + controller: GlancesHelpController, controllerAs: 'vm', bindings: { - stats: '<' }, - templateUrl: 'components/plugin-cloud/view.html' + templateUrl: 'components/help/view.html' }); 'use strict'; -function GlancesPluginCloudController() { +function GlancesHelpController(GlancesStats) { var vm = this; - vm.provider = null; - vm.instance = null; - - vm.$onChanges = function (changes) { - var stats = changes.stats.currentValue; - if (stats === undefined || stats.stats === undefined) { - return; - } - - var data = stats.stats['cloud']; - - if (data['ami-id'] !== undefined) { - vm.provider = 'AWS EC2'; - vm.instance = data['instance-type'] + ' instance ' + data['instance-id'] + ' (' + data['region'] + ')'; - } - - data = undefined; - }; + GlancesStats.getHelp().then(function(help) { + vm.help = help; + }); } 'use strict'; @@ -613,6 +586,42 @@ function GlancesPluginDiskioController($filter) { 'use strict'; +glancesApp.component('glancesPluginCloud', { + controller: GlancesPluginCloudController, + controllerAs: 'vm', + bindings: { + stats: '<' + }, + templateUrl: 'components/plugin-cloud/view.html' +}); + +'use strict'; + +function GlancesPluginCloudController() { + var vm = this; + + vm.provider = null; + vm.instance = null; + + vm.$onChanges = function (changes) { + var stats = changes.stats.currentValue; + if (stats === undefined || stats.stats === undefined) { + return; + } + + var data = stats.stats['cloud']; + + if (data['ami-id'] !== undefined) { + vm.provider = 'AWS EC2'; + vm.instance = data['instance-type'] + ' instance ' + data['instance-id'] + ' (' + data['region'] + ')'; + } + + data = undefined; + }; +} + +'use strict'; + glancesApp.component('glancesPluginFs', { controller: GlancesPluginFsController, controllerAs: 'vm', @@ -851,25 +860,22 @@ function GlancesPluginMemMoreController() { 'use strict'; -glancesApp.component('glancesPluginMemswap', { - controller: GlancesPluginMemswapController, +glancesApp.component('glancesPluginNetwork', { + controller: GlancesPluginNetworkController, controllerAs: 'vm', bindings: { - stats: '<' + stats: '<', + arguments: '<' }, - templateUrl: 'components/plugin-memswap/view.html' + templateUrl: 'components/plugin-network/view.html' }); 'use strict'; -function GlancesPluginMemswapController() { +function GlancesPluginNetworkController($filter) { var vm = this; - var _view = {}; - vm.percent = null; - vm.total = null; - vm.used = null; - vm.free = null; + vm.networks = []; vm.$onChanges = function (changes) { var stats = changes.stats.currentValue; @@ -877,44 +883,53 @@ function GlancesPluginMemswapController() { return; } - var data = stats.stats['memswap']; - _view = stats.view['memswap']; + var data = stats.stats['network']; - vm.percent = data['percent']; - vm.total = data['total']; - vm.used = data['used']; - vm.free = data['free']; + vm.networks = []; + for (var i = 0; i < data.length; i++) { + var networkData = data[i]; - data = undefined; - }; + var network = { + 'interfaceName': networkData['interface_name'], + 'rx': networkData['rx'], + 'tx': networkData['tx'], + 'cx': networkData['cx'], + 'time_since_update': networkData['time_since_update'], + 'cumulativeRx': networkData['cumulative_rx'], + 'cumulativeTx': networkData['cumulative_tx'], + 'cumulativeCx': networkData['cumulative_cx'] + }; - this.getDecoration = function (value) { - if (_view[value] === undefined) { - return; + vm.networks.push(network); } - return _view[value].decoration.toLowerCase(); + vm.networks = $filter('orderBy')(vm.networks, 'interfaceName'); + + data = undefined; }; } 'use strict'; -glancesApp.component('glancesPluginNetwork', { - controller: GlancesPluginNetworkController, +glancesApp.component('glancesPluginMemswap', { + controller: GlancesPluginMemswapController, controllerAs: 'vm', bindings: { - stats: '<', - arguments: '<' + stats: '<' }, - templateUrl: 'components/plugin-network/view.html' + templateUrl: 'components/plugin-memswap/view.html' }); 'use strict'; -function GlancesPluginNetworkController($filter) { +function GlancesPluginMemswapController() { var vm = this; + var _view = {}; - vm.networks = []; + vm.percent = null; + vm.total = null; + vm.used = null; + vm.free = null; vm.$onChanges = function (changes) { var stats = changes.stats.currentValue; @@ -922,29 +937,23 @@ function GlancesPluginNetworkController($filter) { return; } - var data = stats.stats['network']; + var data = stats.stats['memswap']; + _view = stats.view['memswap']; - vm.networks = []; - for (var i = 0; i < data.length; i++) { - var networkData = data[i]; + vm.percent = data['percent']; + vm.total = data['total']; + vm.used = data['used']; + vm.free = data['free']; - var network = { - 'interfaceName': networkData['interface_name'], - 'rx': networkData['rx'], - 'tx': networkData['tx'], - 'cx': networkData['cx'], - 'time_since_update': networkData['time_since_update'], - 'cumulativeRx': networkData['cumulative_rx'], - 'cumulativeTx': networkData['cumulative_tx'], - 'cumulativeCx': networkData['cumulative_cx'] - }; + data = undefined; + }; - vm.networks.push(network); + this.getDecoration = function (value) { + if (_view[value] === undefined) { + return; } - vm.networks = $filter('orderBy')(vm.networks, 'interfaceName'); - - data = undefined; + return _view[value].decoration.toLowerCase(); }; } @@ -1053,39 +1062,6 @@ function GlancesPluginPortsController() { 'use strict'; -glancesApp.component('glancesPluginProcess', { - controller: GlancesPluginProcessController, - controllerAs: 'vm', - bindings: { - stats: '<', - arguments: '<' - }, - templateUrl: 'components/plugin-process/view.html' -}); - -'use strict'; - -function GlancesPluginProcessController() { - var vm = this; - - vm.sorter = { - column: "cpu_percent", - auto: true, - isReverseColumn: function (column) { - return !(column === 'username' || column === 'name'); - }, - getColumnLabel: function (column) { - if (_.isEqual(column, ['io_read', 'io_write'])) { - return 'io_counters'; - } else { - return column; - } - } - }; -} - -'use strict'; - glancesApp.component('glancesPluginProcesscount', { controller: GlancesPluginProcesscountController, controllerAs: 'vm', @@ -1127,6 +1103,39 @@ function GlancesPluginProcesscountController() { 'use strict'; +glancesApp.component('glancesPluginProcess', { + controller: GlancesPluginProcessController, + controllerAs: 'vm', + bindings: { + stats: '<', + arguments: '<' + }, + templateUrl: 'components/plugin-process/view.html' +}); + +'use strict'; + +function GlancesPluginProcessController() { + var vm = this; + + vm.sorter = { + column: "cpu_percent", + auto: true, + isReverseColumn: function (column) { + return !(column === 'username' || column === 'name'); + }, + getColumnLabel: function (column) { + if (_.isEqual(column, ['io_read', 'io_write'])) { + return 'io_counters'; + } else { + return column; + } + } + }; +} + +'use strict'; + glancesApp.component('glancesPluginProcesslist', { controller: GlancesPluginProcesslistController, controllerAs: 'vm', @@ -1278,6 +1287,34 @@ function GlancesPluginQuicklookController() { 'use strict'; +glancesApp.component('glancesPluginUptime', { + controller: GlancesPluginUptimeController, + controllerAs: 'vm', + bindings: { + stats: '<' + }, + templateUrl: 'components/plugin-uptime/view.html' +}); + +'use strict'; + +function GlancesPluginUptimeController() { + var vm = this; + + vm.value = null; + + vm.$onChanges = function (changes) { + var stats = changes.stats.currentValue; + if (stats === undefined || stats.stats === undefined) { + return; + } + + vm.value = stats.stats['uptime']; + }; +} + +'use strict'; + glancesApp.component('glancesPluginSystem', { controller: GlancesPluginSystemController, controllerAs: 'vm', @@ -1321,34 +1358,6 @@ function GlancesPluginSystemController() { 'use strict'; -glancesApp.component('glancesPluginUptime', { - controller: GlancesPluginUptimeController, - controllerAs: 'vm', - bindings: { - stats: '<' - }, - templateUrl: 'components/plugin-uptime/view.html' -}); - -'use strict'; - -function GlancesPluginUptimeController() { - var vm = this; - - vm.value = null; - - vm.$onChanges = function (changes) { - var stats = changes.stats.currentValue; - if (stats === undefined || stats.stats === undefined) { - return; - } - - vm.value = stats.stats['uptime']; - }; -} - -'use strict'; - glancesApp.component('glancesPluginWifi', { controller: GlancesPluginWifiController, controllerAs: 'vm', @@ -1404,68 +1413,3 @@ function GlancesPluginWifiController($filter) { return _view[hotpost.ssid][field].decoration.toLowerCase(); }; } - -glancesApp.service('GlancesPluginProcessList', ["$filter", "GlancesPlugin", function($filter, GlancesPlugin) { - var _pluginName = "processlist"; - var _maxProcessesToDisplay = undefined; - this.processes = []; - this.ioReadWritePresent = false; - - this.setData = function(data, views, config) { - this.processes = []; - this.ioReadWritePresent = false; - _maxProcessesToDisplay = config.outputs !== undefined ? config.outputs.max_processes_display : undefined;; - - for (var i = 0; i < data[_pluginName].length; i++) { - var process = data[_pluginName][i]; - - process.memvirt = process.memory_info[1]; - process.memres = process.memory_info[0]; - process.timeplus = $filter('timedelta')(process.cpu_times); - process.timemillis = $filter('timemillis')(process.cpu_times); - - process.ioRead = null; - process.ioWrite = null; - - if (process.io_counters) { - this.ioReadWritePresent = true; - - process.ioRead = (process.io_counters[0] - process.io_counters[2]) / process.time_since_update; - - if (process.ioRead != 0) { - process.ioRead = $filter('bytes')(process.ioRead); - } - - process.ioWrite = (process.io_counters[1] - process.io_counters[3]) / process.time_since_update; - - if (process.ioWrite != 0) { - process.ioWrite = $filter('bytes')(process.ioWrite); - } - } - - process.isNice = process.nice !== undefined && ((data['system'].os_name === 'Windows' && process.nice != 32) || (data['system'].os_name !== 'Windows' && process.nice != 0)); - - if (Array.isArray(process.cmdline)) { - process.cmdline = process.cmdline.join(' '); - } - - if (data['system'].os_name === 'Windows') { - process.username = _.last(process.username.split('\\')); - } - - this.processes.push(process); - } - }; - - this.getCpuPercentAlert = function(process) { - return GlancesPlugin.getAlert(_pluginName, 'processlist_cpu_', process.cpu_percent); - }; - - this.getMemoryPercentAlert = function(process) { - return GlancesPlugin.getAlert(_pluginName, 'processlist_mem_', process.cpu_percent); - }; - - this.getLimit = function() { - return _maxProcessesToDisplay; - }; -}]); diff --git a/glances/outputs/static/public/js/templates.min.js b/glances/outputs/static/public/js/templates.min.js index 6c59e67f5dc4e9f735713c4bd464a922f1e2640e..f7263e1332a638e734f15c238a13de6bf94c6b38 100644 --- a/glances/outputs/static/public/js/templates.min.js +++ b/glances/outputs/static/public/js/templates.min.js @@ -1,22 +1,22 @@ angular.module('glancesApp').run(['$templateCache', function($templateCache) {$templateCache.put('components/glances/view.html','