module("systats", package.seeall);
local cache_time = 5;
local memory_info = { __fetched = 0 };
local function get_memory_info()
if (os.time() - memory_info.__fetched) > cache_time then
memory_info.__fetched = os.time();
for line in io.lines("/proc/meminfo") do
local k, v = line:match("^(%w+):%s*(%d+) kB");
if k and v then
memory_info[k] = tonumber(v);
end
end
end
return memory_info;
end
function memory_total()
return get_memory_info().MemTotal;
end
function memory_free()
return get_memory_info().MemFree;
end
function memory_used()
return memory_total() - memory_free();
end
function load_average()
local l = io.open("/proc/loadavg");
local five, ten, fifteen = l:read("*l"):match("^(%S+) (%S+) (%S+)");
l:close();
return tonumber(five), tonumber(ten), tonumber(fifteen);
end
function disks()
local df = io.popen("df -k");
if not df then return nil; end
local disks = {};
for line in df:lines() do
local device, total, used, free, percent, mounted =
line:match("^(/%S+)%s+(%d+)%s+(%d+)%s+(%d+)%s+(%d+)%%%s+(.+)$");
if device then
disks[#disks+1] = {
device = device,
total = tonumber(total), used = tonumber(used),
free = tonumber(free), percent_used = tonumber(percent),
mounted_on = mounted,
};
end
end
df:close();
return disks;
end
return _M;