proc.lua

changeset 0
813b739a632b
equal deleted inserted replaced
-1:000000000000 0:813b739a632b
1 module("systats", package.seeall);
2
3 local cache_time = 5;
4
5 local memory_info = { __fetched = 0 };
6 local function get_memory_info()
7 if (os.time() - memory_info.__fetched) > cache_time then
8 memory_info.__fetched = os.time();
9 for line in io.lines("/proc/meminfo") do
10 local k, v = line:match("^(%w+):%s*(%d+) kB");
11 if k and v then
12 memory_info[k] = tonumber(v);
13 end
14 end
15 end
16 return memory_info;
17 end
18
19 function memory_total()
20 return get_memory_info().MemTotal;
21 end
22
23 function memory_free()
24 return get_memory_info().MemFree;
25 end
26
27 function memory_used()
28 return memory_total() - memory_free();
29 end
30
31 function load_average()
32 local l = io.open("/proc/loadavg");
33 local five, ten, fifteen = l:read("*l"):match("^(%S+) (%S+) (%S+)");
34 l:close();
35 return tonumber(five), tonumber(ten), tonumber(fifteen);
36 end
37
38 function disks()
39 local df = io.popen("df -k");
40 if not df then return nil; end
41 local disks = {};
42 for line in df:lines() do
43 local device, total, used, free, percent, mounted =
44 line:match("^(/%S+)%s+(%d+)%s+(%d+)%s+(%d+)%s+(%d+)%%%s+(.+)$");
45 if device then
46 disks[#disks+1] = {
47 device = device,
48 total = tonumber(total), used = tonumber(used),
49 free = tonumber(free), percent_used = tonumber(percent),
50 mounted_on = mounted,
51 };
52 end
53 end
54 df:close();
55 return disks;
56 end
57
58 return _M;

mercurial