view mod_measure_muc/mod_measure_muc.lua @ 4300:3f3b672b7616

mod_vcard_muc: Pass room object around instead of JID, hopefully fixing traceback More efficient to pass the object around instead of using the JID and looking up the object when needed. It seems in some (undetermined) cases get_room_from_jid(room.jid) is nil.
author Matthew Wild <mwild1@gmail.com>
date Tue, 15 Dec 2020 10:49:11 +0000
parents 39931d727c22
children
line wrap: on
line source

-- Group Chat statistics
--
-- Copyright (C) 2020 kaliko <kaliko@azylum.org>
--
-- This module is MIT/X11 licensed.

-- https://prosody.im/doc/developers/modules
-- https://prosody.im/doc/developers/moduleapi
-- https://prosody.im/doc/statistics

module:log("info", "loading mod_%s", module.name);
if module:get_host_type() ~= "component" then
	module:log("error", "mod_%s should be loaded only on a MUC component, not normal hosts", module.name);
	return;
end

local mod_muc = module:depends"muc";
local all_rooms = rawget(mod_muc, "all_rooms")

-- Add relevant boolean MUC metrics here
local counters = {
	hidden = module:measure("hidden", "amount", 0),
	persistent = module:measure("persistent", "amount", 0),
	password = module:measure('passwd', "amount", 0),
	archiving = module:measure('archiving', 'amount', 0),
};
local total_counter = module:measure("total", "amount", 0);

module:hook_global("stats-update", function ()
	local total = 0;
	local buckets = {};
	-- Init buckets
	for bucket, _ in pairs(counters) do
		buckets[bucket] = 0;
	end
	for room in all_rooms() do
		--[[
		module:log('debug', 'room data for : "'..room.jid..'"');
		for conf, val in pairs(room._data) do
			module:log('debug', conf..": "..tostring(val));
		end
		]]--
		total = total + 1;
		--module:log('debug','buckets room data :');
		for bucket, _ in pairs(buckets) do
			--module:log('debug', bucket..": "..tostring(room._data[bucket]));
			if room._data[bucket] then
				buckets[bucket] = buckets[bucket] + 1;
			end
		end
	end
	for bucket, count in pairs(buckets) do
		counters[bucket](count)
	end
	total_counter(total);
end)