aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2024-08-18 16:56:36 +0200
committerKim Alvefur <zash@zash.se>2024-08-18 16:56:36 +0200
commitce8b91e4a751b28304a808705bfc4fc974d59ec1 (patch)
treecf08970ea5746db9d531017094979b717210fffa
parent8d00eaa0c74f4f93ef53027b8c4416f6c2df16c3 (diff)
downloadprosody-ce8b91e4a751b28304a808705bfc4fc974d59ec1.tar.gz
prosody-ce8b91e4a751b28304a808705bfc4fc974d59ec1.zip
mod_csi: Optimize metrics collection (prematurely)
I did not measure, but this should be way fewer function calls.
-rw-r--r--plugins/mod_csi.lua19
1 files changed, 10 insertions, 9 deletions
diff --git a/plugins/mod_csi.lua b/plugins/mod_csi.lua
index 75dc4148..7a1857c0 100644
--- a/plugins/mod_csi.lua
+++ b/plugins/mod_csi.lua
@@ -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("stanza/"..xmlns_csi..":inactive", refire_event("csi-client-inactive
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);