luci-base, luci-mod-status: convert process status to client side view
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
parent
8d512f13ec
commit
a43b1c6468
4 changed files with 89 additions and 36 deletions
|
@ -43,7 +43,7 @@
|
|||
"ubus": {
|
||||
"file": [ "list", "read", "stat" ],
|
||||
"iwinfo": [ "assoclist", "freqlist", "txpowerlist", "countrylist" ],
|
||||
"luci": [ "getConntrackList", "getDUIDHints", "getInitList", "getLocaltime", "getRealtimeStats", "getTimezones", "getLEDs", "getUSBDevices", "getSwconfigFeatures", "getSwconfigPortState", "getBlockDevices", "getMountPoints" ],
|
||||
"luci": [ "getConntrackList", "getDUIDHints", "getInitList", "getLocaltime", "getProcessList", "getRealtimeStats", "getTimezones", "getLEDs", "getUSBDevices", "getSwconfigFeatures", "getSwconfigPortState", "getBlockDevices", "getMountPoints" ],
|
||||
"luci-rpc": [ "getBoardJSON", "getDHCPLeases", "getDSLStatus", "getHostHints", "getNetworkDevices", "getWirelessDevices" ],
|
||||
"network.interface": [ "dump" ],
|
||||
"network.rrdns": [ "lookup" ],
|
||||
|
@ -68,6 +68,7 @@
|
|||
"/sbin/reboot": [ "exec" ],
|
||||
"/sbin/sysupgrade": [ "exec" ],
|
||||
"/sbin/wifi": [ "exec" ],
|
||||
"/bin/kill": [ "exec" ],
|
||||
"/bin/tar": [ "exec" ],
|
||||
"/bin/umount": [ "exec" ],
|
||||
"/tmp/backup.tar.gz": [ "write" ],
|
||||
|
|
|
@ -0,0 +1,86 @@
|
|||
'use strict';
|
||||
'require fs';
|
||||
'require ui';
|
||||
'require rpc';
|
||||
|
||||
var callLuciProcessList = rpc.declare({
|
||||
object: 'luci',
|
||||
method: 'getProcessList',
|
||||
expect: { result: [] }
|
||||
});
|
||||
|
||||
return L.view.extend({
|
||||
load: function() {
|
||||
return callLuciProcessList();
|
||||
},
|
||||
|
||||
handleSignal: function(signum, pid, ev) {
|
||||
return fs.exec('/bin/kill', ['-%d'.format(signum), '%s'.format(pid)]).then(L.bind(function() {
|
||||
return callLuciProcessList().then(L.bind(function(processes) {
|
||||
this.updateTable('.table', processes);
|
||||
}, this));
|
||||
}, this)).catch(function(e) { ui.addNotification(null, E('p', e.message)) });
|
||||
},
|
||||
|
||||
updateTable: function(table, processes) {
|
||||
var rows = [];
|
||||
|
||||
processes.sort(function(a, b) {
|
||||
return (a.PID - b.PID);
|
||||
});
|
||||
|
||||
for (var i = 0; i < processes.length; i++) {
|
||||
var proc = processes[i];
|
||||
|
||||
rows.push([
|
||||
proc.PID,
|
||||
proc.USER,
|
||||
proc.COMMAND,
|
||||
proc['%CPU'],
|
||||
proc['%MEM'],
|
||||
E('div', { 'class': 'nowrap' }, [
|
||||
E('button', {
|
||||
'class': 'btn cbi-button-action',
|
||||
'click': ui.createHandlerFn(this, 'handleSignal', 1, proc.PID)
|
||||
}, _('Hang Up')), ' ',
|
||||
E('button', {
|
||||
'class': 'btn cbi-button-negative',
|
||||
'click': ui.createHandlerFn(this, 'handleSignal', 15, proc.PID)
|
||||
}, _('Terminate')), ' ',
|
||||
E('button', {
|
||||
'class': 'btn cbi-button-negative',
|
||||
'click': ui.createHandlerFn(this, 'handleSignal', 9, proc.PID)
|
||||
}, _('Kill'))
|
||||
])
|
||||
]);
|
||||
}
|
||||
|
||||
cbi_update_table(table, rows, E('em', _('No information available')));
|
||||
},
|
||||
|
||||
render: function(processes) {
|
||||
var v = E([], [
|
||||
E('h2', _('Processes')),
|
||||
E('div', { 'class': 'cbi-map-descr' }, _('This list gives an overview over currently running system processes and their status.')),
|
||||
|
||||
E('div', { 'class': 'table' }, [
|
||||
E('div', { 'class': 'tr table-titles' }, [
|
||||
E('div', { 'class': 'th' }, _('PID')),
|
||||
E('div', { 'class': 'th' }, _('Owner')),
|
||||
E('div', { 'class': 'th' }, _('Command')),
|
||||
E('div', { 'class': 'th' }, _('CPU usage (%)')),
|
||||
E('div', { 'class': 'th' }, _('Memory usage (%)')),
|
||||
E('div', { 'class': 'th center' }, _('Actions'))
|
||||
])
|
||||
])
|
||||
]);
|
||||
|
||||
this.updateTable(v.lastElementChild, processes);
|
||||
|
||||
return v;
|
||||
},
|
||||
|
||||
handleSaveApply: null,
|
||||
handleSave: null,
|
||||
handleReset: null
|
||||
});
|
|
@ -16,7 +16,7 @@ function index()
|
|||
entry({"admin", "status", "routes"}, template("admin_status/routes"), _("Routes"), 3)
|
||||
entry({"admin", "status", "syslog"}, call("action_syslog"), _("System Log"), 4)
|
||||
entry({"admin", "status", "dmesg"}, call("action_dmesg"), _("Kernel Log"), 5)
|
||||
entry({"admin", "status", "processes"}, form("admin_status/processes"), _("Processes"), 6)
|
||||
entry({"admin", "status", "processes"}, view("status/processes"), _("Processes"), 6)
|
||||
|
||||
entry({"admin", "status", "realtime"}, alias("admin", "status", "realtime", "load"), _("Realtime Graphs"), 7)
|
||||
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
-- Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
f = SimpleForm("processes", translate("Processes"), translate("This list gives an overview over currently running system processes and their status."))
|
||||
f.reset = false
|
||||
f.submit = false
|
||||
|
||||
t = f:section(Table, luci.sys.process.list())
|
||||
t:option(DummyValue, "PID", translate("PID"))
|
||||
t:option(DummyValue, "USER", translate("Owner"))
|
||||
t:option(DummyValue, "COMMAND", translate("Command"))
|
||||
t:option(DummyValue, "%CPU", translate("CPU usage (%)"))
|
||||
t:option(DummyValue, "%MEM", translate("Memory usage (%)"))
|
||||
|
||||
hup = t:option(Button, "_hup", translate("Hang Up"))
|
||||
hup.inputstyle = "reload"
|
||||
function hup.write(self, section)
|
||||
null, self.tag_error[section] = luci.sys.process.signal(section, 1)
|
||||
end
|
||||
|
||||
term = t:option(Button, "_term", translate("Terminate"))
|
||||
term.inputstyle = "remove"
|
||||
function term.write(self, section)
|
||||
null, self.tag_error[section] = luci.sys.process.signal(section, 15)
|
||||
end
|
||||
|
||||
kill = t:option(Button, "_kill", translate("Kill"))
|
||||
kill.inputstyle = "reset"
|
||||
function kill.write(self, section)
|
||||
null, self.tag_error[section] = luci.sys.process.signal(section, 9)
|
||||
end
|
||||
|
||||
return f
|
Loading…
Reference in a new issue