view mod_measure_stanza_counts/mod_measure_stanza_counts.lua @ 4023:7e2db4d61f6c

mod_easy_invite: backport: ensure session exists before accessing it Backport from https://github.com/snikket-im/snikket-server This prevents a 500 issue when using mod_register_web.
author Maxime “pep” Buquet <pep@bouah.net>
date Sun, 17 May 2020 22:38:55 +0200
parents 512405077709
children 33b1b6ff23d8
line wrap: on
line source

module:set_global()

local filters = require"util.filters";

local stanza_kinds = { message = true, presence = true, iq = true };

local function rate(measures, dir)
	return function (stanza, session)
		measures[dir]();
		measures[dir .. "_" .. session.type]();
		if stanza.attr and not stanza.attr.xmlns and stanza_kinds[stanza.name] then
			measures[dir .. "_" .. session.type .. "_" .. stanza.name]();
		end
		return stanza;
	end
end

local measures = setmetatable({}, {
	__index = function (t, name)
		local m = module:measure(name, "rate");
		t[name] = m;
		return m;
	end
});

local function measure_stanza_counts(session)
	filters.add_filter(session, "stanzas/in",  rate(measures, "incoming"));
	filters.add_filter(session, "stanzas/out", rate(measures, "outgoing"));
end

filters.add_filter_hook(measure_stanza_counts);