view mod_measure_client_presence/mod_measure_client_presence.lua @ 3503:882180b459a0

mod_pubsub_post: Restructure authentication and authorization (BC) This deprecates the default "superuser" actor model and makes the default equivalent to the previous "request.id". A single actor and secret per node is supported because HTTP and WebHooks don't normally include any authorization identity. Allowing authentication bypass when no secret is given should be relatively safe when the actor is unprivileged, as will be unless explicitly configured otherwise.
author Kim Alvefur <zash@zash.se>
date Sat, 30 Mar 2019 21:16:13 +0100
parents 37ae0801f925
children
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)