X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=libs%2Fsys%2Fluasrc%2Fsys.lua;h=b3155c8c8542c8fbda06b8acf4049c3d616ccf18;hp=d9f236e1b4d36fe51fc99dc932835358903a6444;hb=ccf1355343ec104146259119b0a61b0e9d856b8d;hpb=a0650b4ca96a184887369e04bc4793579364aeef diff --git a/libs/sys/luasrc/sys.lua b/libs/sys/luasrc/sys.lua index d9f236e1b..b3155c8c8 100644 --- a/libs/sys/luasrc/sys.lua +++ b/libs/sys/luasrc/sys.lua @@ -41,6 +41,21 @@ local tonumber, ipairs, pairs = tonumber, ipairs, pairs --- LuCI Linux and POSIX system utilities. module "luci.sys" +--- Execute a given shell command and return the error code +-- @class function +-- @name call +-- @param ... Command to call +-- @return Error code of the command +function call(...) + return os.execute(...) / 256 +end + +--- Execute a given shell command and capture its standard output +-- @class function +-- @name exec +-- @param command Command to call +-- @return String containg the return the output of the command +exec = luci.util.exec --- Invoke the luci-flash executable to write an image to the flash memory. -- @param image Local path or URL to image file @@ -62,27 +77,44 @@ function mounts() local data = {} local k = {"fs", "blocks", "used", "available", "percent", "mountpoint"} local ps = luci.util.execi("df") - + if not ps then return else ps() end - + for line in ps do local row = {} - + local j = 1 for value in line:gmatch("[^%s]+") do row[k[j]] = value j = j + 1 end - + if row[k[1]] then + + -- this is a rather ugly workaround to cope with wrapped lines in + -- the df output: + -- + -- /dev/scsi/host0/bus0/target0/lun0/part3 + -- 114382024 93566472 15005244 86% /mnt/usb + -- + + if not row[k[2]] then + j = 2 + line = ps() + for value in line:gmatch("[^%s]+") do + row[k[j]] = value + j = j + 1 + end + end + table.insert(data, row) end end - + return data end @@ -309,6 +341,8 @@ end process = {} --- Get the current process id. +-- @class function +-- @name process.info -- @return Number containing the current pid process.info = posix.getpid @@ -318,37 +352,37 @@ function process.list() local data = {} local k local ps = luci.util.execi("top -bn1") - + if not ps then return end - + while true do local line = ps() if not line then return end - + k = luci.util.split(luci.util.trim(line), "%s+", nil, true) if k[1] == "PID" then break end end - + for line in ps do local row = {} - + line = luci.util.trim(line) for i, value in ipairs(luci.util.split(line, "%s+", #k-1, true)) do row[k[i]] = value end - + local pid = tonumber(row[k[1]]) if pid then data[pid] = row end end - + return data end @@ -373,6 +407,8 @@ function process.setuser(pid, uid) end --- Send a signal to a process identified by given pid. +-- @class function +-- @name process.signal -- @param pid Number containing the process id -- @param sig Signal to send (default: 15 [SIGTERM]) -- @return Boolean indicating successful operation