File

plugins/mod_debug_reset.lua @ 13011:16b47c3b44f3

mod_invites_register: Allow roles to be an ordered list, first being primary Part of an update to mod_invites and friends to the new authz and roles. Invites with roles in the old way will need to be migrated, but with invites often being short lived it is probably not a long-lived problem.
author Kim Alvefur <zash@zash.se>
date Thu, 30 Mar 2023 11:05:40 +0200
parent 12977:74b9e05af71e
child 13028:b2e6a175537d
line wrap: on
line source

-- This module will "reset" the server when the client connection count drops
-- to zero. This is somewhere between a reload and a full process restart.
-- It is useful to ensure isolation between test runs, for example. It may
-- also be of use for some kinds of manual testing.

module:set_global();

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

local timer = require "prosody.util.timer";

local function do_reset()
	module:log("info", "Performing reset...");
	local hosts = {};
	for host in pairs(prosody.hosts) do
		table.insert(hosts, host);
	end
	module:fire_event("server-resetting");
	for _, host in ipairs(hosts) do
		hostmanager.deactivate(host);
		timer.add_task(0, function ()
			hostmanager.activate(host);
			module:log("info", "Reset complete");
			module:fire_event("server-reset");
		end);
	end
end

function module.add_host(host_module)
	host_module:hook("resource-unbind", function ()
		if next(prosody.full_sessions) == nil then
			timer.add_task(0, do_reset);
		end
	end);
end

local console_env = module:shared("/*/admin_shell/env");
console_env.debug_reset = {
	reset = do_reset;
};