Changeset

13512:0b742bbbb819

mod_csi: Optimize metrics collection (prematurely) I did not measure, but this should be way fewer function calls.
author Kim Alvefur <zash@zash.se>
date Sun, 18 Aug 2024 16:56:36 +0200
parents 13511:453979e16f2d
children 13514:a1bc6533bbba
files plugins/mod_csi.lua
diffstat 1 files changed, 10 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/plugins/mod_csi.lua	Sat Aug 17 23:15:14 2024 +0200
+++ b/plugins/mod_csi.lua	Sun Aug 18 16:56:36 2024 +0200
@@ -1,4 +1,3 @@
-local statsmanager = require "prosody.core.statsmanager";
 local st = require "prosody.util.stanza";
 local xmlns_csi = "urn:xmpp:csi:0";
 local csi_feature = st.stanza("csi", { xmlns = xmlns_csi });
@@ -29,17 +28,19 @@
 module:hook_global("stats-update", function()
 	local sessions = prosody.hosts[module.host].sessions;
 	if not sessions then return end
-	statsmanager.cork();
-	-- Can't do :clear() on host-scoped measures?
-	count:with_labels("active"):set(0);
-	count:with_labels("inactive"):set(0);
-	count:with_labels("flushing"):set(0);
+	local active, inactive, flushing = 0, 0, 0;
 	for _, user_session in pairs(sessions) do
 		for _, session in pairs(user_session.sessions) do
-			if session.state == "inactive" or session.state == "active" or session.state == "flushing" then
-				count:with_labels(session.state):add(1);
+			if session.state == "inactive" then
+				inactive = inactive + 1;
+			elseif session.state == "active" then
+				inactive = inactive + 1;
+			elseif session.state == "flushing" then
+				inactive = inactive + 1;
 			end
 		end
 	end
-	statsmanager.uncork();
+	count:with_labels("active"):set(active);
+	count:with_labels("inactive"):set(inactive);
+	count:with_labels("flushing"):set(flushing);
 end);