File

mod_statistics_mem/mod_statistics_mem.lua @ 5931:d194d1012fd3

Updating dox for mod_rest. Ideas expressed / clarified: 1) Making clear that mod_rest isn't to be installed under VirtualHosts AND as a component. 2) Understanding some of the implications of this choice: A) Changes to user authentication B) How it affects subdomains 3) More consistent use of domain names for clarity. 4) Using different heading sizes to show scope of section. Essentially, I added all the tidbits I had to clarify in getting this to work in my own example.
author Ben Smith <bens@effortlessis.com>
date Mon, 13 May 2024 13:25:13 -0700
parent 1379:403d5cd924eb
line wrap: on
line source

-- Probably Linux-specific memory statistics

module:set_global();

local human;
do
	local tostring = tostring;
	local s_format = string.format;
	local m_floor = math.floor;
	local m_max = math.max;
	local prefixes = "kMGTPEZY";
	local multiplier = 1024;

	function human(num)
		num = tonumber(num) or 0;
		local m = 0;
		while num >= multiplier and m < #prefixes do
			num = num / multiplier;
			m = m + 1;
		end

		return s_format("%0."..m_max(0,3-#tostring(m_floor(num))).."f%sB",
		num, m > 0 and (prefixes:sub(m,m) .. "i") or "");
	end
end


local pagesize = 4096; -- according to getpagesize()
module:provides("statistics", {
	statistics = {
		memory_total = { -- virtual memory
			get = function ()
				local statm, err = io.open"/proc/self/statm";
				if statm then
					local total = statm:read"*n";
					statm:close();
					return total * pagesize;
				else
					module:log("debug", err);
				end
			end;
			tostring = human;
		};
		memory_rss = { -- actual in-memory data size
			get = function ()
				local statm, err = io.open"/proc/self/statm";
				if statm then
					statm:read"*n"; -- Total size, ignore
					local rss = statm:read"*n";
					statm:close();
					return rss * pagesize;
				else
					module:log("debug", err);
				end
			end;
			tostring = human;
		};
	}
});