# HG changeset patch # User Kim Alvefur # Date 1507572933 -7200 # Node ID 750572f6f59d45cd1184839e04bc70f026fdebdc # Parent 127d5452e4bb7206d9f35d802440453e8684be6b mod_measure_stanza_counts: Counts stanzas and reports using 0.10+ statistics API diff -r 127d5452e4bb -r 750572f6f59d mod_measure_stanza_counts/README.markdown --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_measure_stanza_counts/README.markdown Mon Oct 09 20:15:33 2017 +0200 @@ -0,0 +1,9 @@ +--- +summary: Collect statistics on number of stanzas processed +--- + +Description +=========== + +This module measures the number of stanzas handled and reports using +Prosody 0.10 APIs diff -r 127d5452e4bb -r 750572f6f59d mod_measure_stanza_counts/mod_measure_stanza_counts.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_measure_stanza_counts/mod_measure_stanza_counts.lua Mon Oct 09 20:15:33 2017 +0200 @@ -0,0 +1,31 @@ +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 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);