mod_statistics_mem/mod_statistics_mem.lua
author Matthew Wild <mwild1@gmail.com>
Tue, 18 Jan 2022 17:01:18 +0000
changeset 4880 0f5f2d4475b9
parent 1379 403d5cd924eb
permissions -rw-r--r--
mod_http_xep227: Add support for import via APIs rather than direct store manipulation In particular this transitions PEP nodes and data to be imported via mod_pep's APIs, fixing issues with importing at runtime while PEP data may already be live in RAM. Next obvious candidate for this approach is rosters, so clients get immediate roster pushes and other special handling (such as emitting subscribes to reach the desired subscription state).
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
});