mod_statistics_mem/mod_statistics_mem.lua
author Matthew Wild <mwild1@gmail.com>
Sat, 24 Sep 2022 09:25:46 +0100
changeset 5062 39c2824c2880
parent 1379 403d5cd924eb
permissions -rw-r--r--
mod_cloud_notify: README overhaul
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1379
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     1
-- Probably Linux-specific memory statistics
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     2
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     3
module:set_global();
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
local human;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     6
do
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     7
	local tostring = tostring;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     8
	local s_format = string.format;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     9
	local m_floor = math.floor;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
	local m_max = math.max;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    11
	local prefixes = "kMGTPEZY";
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
	local multiplier = 1024;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    13
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    14
	function human(num)
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    15
		num = tonumber(num) or 0;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    16
		local m = 0;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
		while num >= multiplier and m < #prefixes do
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    18
			num = num / multiplier;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    19
			m = m + 1;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    20
		end
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    21
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    22
		return s_format("%0."..m_max(0,3-#tostring(m_floor(num))).."f%sB",
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    23
		num, m > 0 and (prefixes:sub(m,m) .. "i") or "");
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    24
	end
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    25
end
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    28
local pagesize = 4096; -- according to getpagesize()
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    29
module:provides("statistics", {
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    30
	statistics = {
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    31
		memory_total = { -- virtual memory
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
			get = function ()
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33
				local statm, err = io.open"/proc/self/statm";
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    34
				if statm then
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    35
					local total = statm:read"*n";
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    36
					statm:close();
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    37
					return total * pagesize;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    38
				else
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    39
					module:log("debug", err);
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    40
				end
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    41
			end;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    42
			tostring = human;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    43
		};
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    44
		memory_rss = { -- actual in-memory data size
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    45
			get = function ()
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    46
				local statm, err = io.open"/proc/self/statm";
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    47
				if statm then
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    48
					statm:read"*n"; -- Total size, ignore
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    49
					local rss = statm:read"*n";
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    50
					statm:close();
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    51
					return rss * pagesize;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    52
				else
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    53
					module:log("debug", err);
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    54
				end
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    55
			end;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    56
			tostring = human;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    57
		};
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    58
	}
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    59
});