view mod_measure_stanza_counts/mod_measure_stanza_counts.lua @ 4520:bd320ec2c2fc

mod_rest: Declare presence priority an integer in -128..127 per RFC6121 util.datamapper doesn't actually understand min/max, but it's informative and the schema could be used to validate the input at some point.
author Kim Alvefur <zash@zash.se>
date Mon, 22 Mar 2021 00:45:10 +0100
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);