view mod_measure_client_features/mod_measure_client_features.lua @ 6165:e977174082ee

mod_invites_register_api: Use set_password() for password resets Previously the code relied on the (weird) behaviour of create_user(), which would update the password for a user account if it already existed. This has several issues, and we plan to deprecate this behaviour of create_user(). The larger issue is that this route does not trigger the user-password-changed event, which can be a security problem. For example, it did not disconnect existing user sessions (this occurs in mod_c2s in response to the event). Switching to set_password() is the right thing to do
author Matthew Wild <mwild1@gmail.com>
date Thu, 06 Feb 2025 10:24:30 +0000
parents 3e0bce07f66c
children
line wrap: on
line source

module:set_global();

local statsmanager = require "prosody.core.statsmanager";

local measure_features = module:metric("gauge", "features", "", "Features advertized by clients", {"feature"});

local disco_ns = "http://jabber.org/protocol/disco#info";

module:hook("stats-update", function ()
	local total = 0;
	local buckets = {};
	for _, session in pairs(prosody.full_sessions) do
		local disco_info = session.caps_cache;
		if disco_info ~= nil then
			for feature in disco_info:childtags("feature", disco_ns) do
				local var = feature.attr.var;
				if var ~= nil then
					if buckets[var] == nil then
						buckets[var] = 0;
					end
					buckets[var] = buckets[var] + 1;
				end
			end
			total = total + 1;
		end
	end
	statsmanager.cork();
	measure_features:clear();
	for bucket, count in pairs(buckets) do
		measure_features:with_labels(bucket):add(count);
	end
	measure_features:with_labels("total"):add(total);
	statsmanager.uncork();
end)