|
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; |