mirror of
https://github.com/nicolargo/glances.git
synced 2024-12-22 16:51:35 +03:00
Init hotkeys system
This commit is contained in:
parent
09758fa713
commit
7b2cac0f2f
@ -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"
|
||||
}
|
||||
}
|
||||
|
@ -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('/', {
|
||||
|
@ -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);
|
||||
}
|
||||
|
378
glances/outputs/static/public/js/main.min.js
vendored
378
glances/outputs/static/public/js/main.min.js
vendored
@ -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';
|
||||
Hotkeys.registerHotkey(Hotkeys.createHotkey({
|
||||
key: 'm',
|
||||
callback: function () {
|
||||
console.log('Sort processes by MEM%');
|
||||
}
|
||||
}));
|
||||
|
||||
glancesApp.component('glancesHelp', {
|
||||
controller: GlancesHelpController,
|
||||
controllerAs: 'vm',
|
||||
bindings: {
|
||||
},
|
||||
templateUrl: 'components/help/view.html'
|
||||
});
|
||||
|
||||
'use strict';
|
||||
|
||||
function GlancesHelpController(GlancesStats) {
|
||||
var vm = this;
|
||||
|
||||
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,54 +860,6 @@ function GlancesPluginMemMoreController() {
|
||||
|
||||
'use strict';
|
||||
|
||||
glancesApp.component('glancesPluginMemswap', {
|
||||
controller: GlancesPluginMemswapController,
|
||||
controllerAs: 'vm',
|
||||
bindings: {
|
||||
stats: '<'
|
||||
},
|
||||
templateUrl: 'components/plugin-memswap/view.html'
|
||||
});
|
||||
|
||||
'use strict';
|
||||
|
||||
function GlancesPluginMemswapController() {
|
||||
var vm = this;
|
||||
var _view = {};
|
||||
|
||||
vm.percent = null;
|
||||
vm.total = null;
|
||||
vm.used = null;
|
||||
vm.free = null;
|
||||
|
||||
vm.$onChanges = function (changes) {
|
||||
var stats = changes.stats.currentValue;
|
||||
if (stats === undefined || stats.stats === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
var data = stats.stats['memswap'];
|
||||
_view = stats.view['memswap'];
|
||||
|
||||
vm.percent = data['percent'];
|
||||
vm.total = data['total'];
|
||||
vm.used = data['used'];
|
||||
vm.free = data['free'];
|
||||
|
||||
data = undefined;
|
||||
};
|
||||
|
||||
this.getDecoration = function (value) {
|
||||
if (_view[value] === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
return _view[value].decoration.toLowerCase();
|
||||
};
|
||||
}
|
||||
|
||||
'use strict';
|
||||
|
||||
glancesApp.component('glancesPluginNetwork', {
|
||||
controller: GlancesPluginNetworkController,
|
||||
controllerAs: 'vm',
|
||||
@ -950,6 +911,54 @@ function GlancesPluginNetworkController($filter) {
|
||||
|
||||
'use strict';
|
||||
|
||||
glancesApp.component('glancesPluginMemswap', {
|
||||
controller: GlancesPluginMemswapController,
|
||||
controllerAs: 'vm',
|
||||
bindings: {
|
||||
stats: '<'
|
||||
},
|
||||
templateUrl: 'components/plugin-memswap/view.html'
|
||||
});
|
||||
|
||||
'use strict';
|
||||
|
||||
function GlancesPluginMemswapController() {
|
||||
var vm = this;
|
||||
var _view = {};
|
||||
|
||||
vm.percent = null;
|
||||
vm.total = null;
|
||||
vm.used = null;
|
||||
vm.free = null;
|
||||
|
||||
vm.$onChanges = function (changes) {
|
||||
var stats = changes.stats.currentValue;
|
||||
if (stats === undefined || stats.stats === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
var data = stats.stats['memswap'];
|
||||
_view = stats.view['memswap'];
|
||||
|
||||
vm.percent = data['percent'];
|
||||
vm.total = data['total'];
|
||||
vm.used = data['used'];
|
||||
vm.free = data['free'];
|
||||
|
||||
data = undefined;
|
||||
};
|
||||
|
||||
this.getDecoration = function (value) {
|
||||
if (_view[value] === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
return _view[value].decoration.toLowerCase();
|
||||
};
|
||||
}
|
||||
|
||||
'use strict';
|
||||
|
||||
glancesApp.component('glancesPluginPercpu', {
|
||||
controller: GlancesPluginPercpuController,
|
||||
controllerAs: 'vm',
|
||||
@ -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;
|
||||
};
|
||||
}]);
|
||||
|
File diff suppressed because one or more lines are too long
@ -52139,3 +52139,6 @@ function ngViewFillContentFactory($compile, $controller, $route) {
|
||||
}
|
||||
|
||||
})();
|
||||
|
||||
!function(a){!function(a){a.module("fps.hotkeys",[]).service("Hotkeys",["$Hotkeys",function(a){return new a}]).provider("$Hotkeys",function(){function a(){function a(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return a()+a()+"-"+a()+"-"+a()+"-"+a()+"-"+a()+a()+a()}var b=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},c=function(a){for(var b={},c=[],d=0;d<a.length;++d)b[a[d]]||c.push(a[d]),b[a[d]]=!0;return c},d=this.KEY_CODES={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",19:"pause",20:"caps",27:"escape",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"insert",46:"delete",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9",106:"*",107:"+",109:"-",110:".",111:"/",112:"f1",113:"f2",114:"f3",115:"f4",116:"f5",117:"f6",118:"f7",119:"f8",120:"f9",121:"f10",122:"f11",123:"f12"};this.$get=["$rootScope","$window",function(e,f){var g=function(a){return function(b,c){e.$apply(function(){a.call(this,b,c)}.bind(this))}},h=function(b){this.id=b.id||a(),this.key=b.key,this.context=b.context||null,this.callback=b.callback,this.args=b.args,this.onKeyUp=!1};h.prototype.clone=function(){return new h(this)};var i=function(){this._hotkeys={},this._hotkeysUp={},this._onKeydown=this._onKeydown.bind(this),this._onKeyup=this._onKeyup.bind(this),this.initialize()};return Object.defineProperty(i.prototype,"initialize",{value:function(){f.addEventListener("keydown",this._onKeydown,!0),f.addEventListener("keyup",this._onKeyup,!0)}}),Object.defineProperty(i.prototype,"_invokeHotkeyHandlers",{value:function(a,b,c){for(var d=0,e=c.length;d<e;d++)try{var f=c[d];f.callback.call(f.context,a,f.args)}catch(g){console.error("HotKeys: ",f.key,g.message)}}}),Object.defineProperty(i.prototype,"_onKeydown",{value:function(a){var b=this.keyStringFromEvent(a);this._hotkeys[b]&&this._invokeHotkeyHandlers(a,b,this._hotkeys[b])},writable:!0}),Object.defineProperty(i.prototype,"_onKeyup",{value:function(a){var b=this.keyStringFromEvent(a);this._hotkeysUp[b]&&this._invokeHotkeyHandlers(this._hotkeysUp[b],b)},writable:!0}),Object.defineProperty(i.prototype,"keyStringFromEvent",{value:function(a){var b=[],e=a.which;return e=d[e]?d[e]:String.fromCharCode(e).toLowerCase(),a.ctrlKey&&b.push("ctrl"),a.altKey&&b.push("alt"),a.shiftKey&&b.push("shift"),a.metaKey&&b.push("meta"),b.push(e),c(b).join("+")}}),Object.defineProperty(i.prototype,"_deregisterHotkey",{value:function(a){var b,c=this._hotkeys;if(a.onKeyUp&&(c=this._hotkeysUp),c[a.key])for(var d=c[a.key],e=0;e<d.length;++e){var f=d[e];(a.callback===f.callback&&f.context===a.context||a.id===f.id)&&(b=d.splice(e,1))}return b}}),Object.defineProperty(i.prototype,"deregisterHotkey",{value:function(a){var c=[];if(this._validateHotkey(a),b(a.key))for(var d=a.key.length-1;d>=0;d--){var e=a.clone();e.key=a.key[d];var f=this._deregisterHotkey(e);void 0!==f&&c.push(f[0])}else c.push(this._deregisterHotkey(a));return c}}),Object.defineProperty(i.prototype,"_validateHotkey",{value:function(a){if(!(a instanceof h))throw new TypeError("Hotkeys: Expected a hotkey object be instance of HotKey")}}),Object.defineProperty(i.prototype,"_registerKey",{value:function(a){var b=this._hotkeys;return a.onKeyUp&&(b=this._hotkeysUp),b[a.key]=b[a.key]||[],b[a.key].push(a),a}}),Object.defineProperty(i.prototype,"_registerKeys",{value:function(c){var d=[];if(b(c.key))for(var e=c.key.length-1;e>=0;e--){var f=c.clone();f.id=a(),f.key=c.key[e],d.push(this._registerKey(f))}else d.push(this._registerKey(c));return d}}),Object.defineProperty(i.prototype,"registerHotkey",{value:function(a){return this._validateHotkey(a),this._registerKeys(a)}}),Object.defineProperty(i.prototype,"registerHotkeyUp",{value:function(a){this._validateHotkey(a),a.onKeyUp=!0,this._registerKeys(a)}}),Object.defineProperty(i.prototype,"createHotkey",{value:function(a){if(null===a.key||void 0===a.key)throw new TypeError('HotKeys: Argument "key" is required');if(null===a.callback||void 0===a.callback)throw new TypeError('HotKeys: Argument "callback" is required');return a.callback=g(a.callback),new h(a)}}),Object.defineProperty(i.prototype,"match",{value:function(a,c){b(c)||(c=[c]);var d=this.keyStringFromEvent(a);return Boolean(~c.indexOf(d))}}),i}]})}(window.angular)}(angular);
|
||||
//# sourceMappingURL=angular-hotkeys-light.map.js
|
Loading…
Reference in New Issue
Block a user