Added status information
[project/luci.git] / libs / sys / luasrc / sys.lua
index 7357d4cfb00a372c711f4bc35b50564b9472647c..970dcffaaa5b27ed17fe722c75da2a6e5f380126 100644 (file)
@@ -124,9 +124,6 @@ end
 -- @return     String containing the memory used for caching in kB
 -- @return     String containing the memory used for buffering in kB
 -- @return     String containing the free memory amount in kB
--- @return     Number containing free memory in percent
--- @return     Number containing buffer memory in percent
--- @return     Number containing cache memory in percent
 function sysinfo()
        local c1 = "cat /proc/cpuinfo|grep system\\ typ|cut -d: -f2 2>/dev/null"
        local c2 = "uname -m 2>/dev/null"
@@ -139,13 +136,10 @@ function sysinfo()
 
        local system = luci.util.trim(luci.util.exec(c1))
        local model = ""
-       local memtotal = luci.util.trim(luci.util.exec(c5))
-       local memcached = luci.util.trim(luci.util.exec(c6))
-       local memfree = luci.util.trim(luci.util.exec(c7))
-       local membuffers = luci.util.trim(luci.util.exec(c8))
-       local perc_memfree = math.floor((memfree/memtotal)*100)
-       local perc_membuffers = math.floor((membuffers/memtotal)*100)
-       local perc_memcached = math.floor((memcached/memtotal)*100)
+       local memtotal = tonumber(luci.util.trim(luci.util.exec(c5)))
+       local memcached = tonumber(luci.util.trim(luci.util.exec(c6)))
+       local memfree = tonumber(luci.util.trim(luci.util.exec(c7)))
+       local membuffers = tonumber(luci.util.trim(luci.util.exec(c8)))
 
        if system == "" then
                system = luci.util.trim(luci.util.exec(c2))
@@ -154,7 +148,7 @@ function sysinfo()
                model = luci.util.trim(luci.util.exec(c4))
        end
 
-       return system, model, memtotal, memcached, membuffers, memfree, perc_memfree, perc_membuffers, perc_memcached
+       return system, model, memtotal, memcached, membuffers, memfree
 end
 
 --- Retrieves the output of the "logread" command.
@@ -298,6 +292,46 @@ process = {}
 -- @return     Number containing the current pid
 process.info = posix.getpid
 
+--- Retrieve information about currently running processes.
+-- @return     Table containing process information
+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
+
 --- Set the gid of a process identified by given pid.
 -- @param pid  Number containing the process id
 -- @param gid  Number containing the Unix group id
@@ -318,6 +352,13 @@ function process.setuser(pid, uid)
        return posix.setpid("u", pid, uid)
 end
 
+--- Send a signal to a process identified by given pid.
+-- @param pid  Number containing the process id
+-- @param sig  Signal to send (default: 15 [SIGTERM])
+-- @return             Boolean indicating successful operation
+-- @return             Number containing the error code if failed
+process.signal = posix.kill
+
 
 --- LuCI system utilities / user related functions.
 -- @class      module