File

mod_measure_client_presence/mod_measure_client_presence.lua @ 5549:01a0b67a9afd

mod_http_oauth2: Add TODO about disabling password grant Per recommendation in draft-ietf-oauth-security-topics-23 it should at the very least be disabled by default. However since this is used by the Snikket web portal some care needs to be taken not to break this, unless it's already broken by other changes to this module.
author Kim Alvefur <zash@zash.se>
date Fri, 16 Jun 2023 00:06:53 +0200
parent 2789:37ae0801f925
line wrap: on
line source

module:set_global();

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

local valid_shows = {
	available = true,
	chat = true,
	away = true,
	dnd = true,
	xa = true,
	unavailable = true,
}

local counters = {
	available = measure("amount", "client_presence.available"),
	chat = measure("amount", "client_presence.chat"),
	away = measure("amount", "client_presence.away"),
	dnd = measure("amount", "client_presence.dnd"),
	xa = measure("amount", "client_presence.xa"),
	unavailable = measure("amount", "client_presence.unavailable"),
	invalid = measure("amount", "client_presence.invalid");
};

module:hook("stats-update", function ()
	local buckets = {
		available = 0,
		chat = 0,
		away = 0,
		dnd = 0,
		xa = 0,
		unavailable = 0,
		invalid = 0,
	};
	for _, session in pairs(full_sessions) do
		local status = "unavailable";
		if session.presence then
			status = session.presence:get_child_text("show") or "available";
		end
		if valid_shows[status] ~= nil then
			buckets[status] = buckets[status] + 1;
		else
			buckets.invalid = buckets.invalid + 1;
		end
	end
	for bucket, count in pairs(buckets) do
		counters[bucket](count)
	end
end)