changeset 4559:33b1b6ff23d8

mod_measure_stanza_counts: port to new metrics API See https://prosody.im/doc/developers/core/statsmanager#metric
author Jonas Schäfer <jonas@wielicki.name>
date Thu, 20 May 2021 15:25:07 +0200
parents 8e58a1b78336
children 724003f24308
files mod_measure_stanza_counts/README.markdown mod_measure_stanza_counts/mod_measure_stanza_counts.lua
diffstat 2 files changed, 16 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/mod_measure_stanza_counts/README.markdown	Sun May 16 18:39:22 2021 +0200
+++ b/mod_measure_stanza_counts/README.markdown	Thu May 20 15:25:07 2021 +0200
@@ -8,4 +8,4 @@
 ===========
 
 This module measures the number of stanzas handled and reports using
-Prosody 0.10 APIs
+Prosody 0.12+ APIs
--- a/mod_measure_stanza_counts/mod_measure_stanza_counts.lua	Sun May 16 18:39:22 2021 +0200
+++ b/mod_measure_stanza_counts/mod_measure_stanza_counts.lua	Thu May 20 15:25:07 2021 +0200
@@ -2,30 +2,31 @@
 
 local filters = require"util.filters";
 
+local stanzas_in = module:metric(
+	"counter", "received", "",
+	"Stanzas received by Prosody",
+	{ "session_type", "stanza_kind" }
+)
+local stanzas_out = module:metric(
+	"counter", "sent", "",
+	"Stanzas sent by prosody",
+	{ "session_type", "stanza_kind" }
+)
+
 local stanza_kinds = { message = true, presence = true, iq = true };
 
-local function rate(measures, dir)
+local function rate(metric_family)
 	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]();
+			metric_family:with_labels(session.type, stanza.name):add(1);
 		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"));
+	filters.add_filter(session, "stanzas/in",  rate(stanzas_in));
+	filters.add_filter(session, "stanzas/out", rate(stanzas_out));
 end
 
 filters.add_filter_hook(measure_stanza_counts);