Comparison

plugins/mod_debug_reset.lua @ 12968:efdb7f2cd578

mod_debug_reset: New module to "reset" a running server (e.g. for testing) Plan to use this for integration tests.
author Matthew Wild <mwild1@gmail.com>
date Thu, 23 Mar 2023 14:40:51 +0000
child 12970:d36243e98704
comparison
equal deleted inserted replaced
12967:53b0730093d8 12968:efdb7f2cd578
1 -- This module will "reset" the server when the client connection count drops
2 -- to zero. This is somewhere between a reload and a full process restart.
3 -- It is useful to ensure isolation between test runs, for example. It may
4 -- also be of use for some kinds of manual testing.
5
6 module:set_global();
7
8 local hostmanager = require "core.hostmanager";
9 local modulemanager = require "core.modulemanager";
10
11 local timer = require "util.timer";
12
13 local function do_reset()
14 module:log("info", "Performing reset...");
15 local hosts = {};
16 for host in pairs(prosody.hosts) do
17 table.insert(hosts, host);
18 end
19 module:fire_event("server-resetting");
20 for _, host in ipairs(hosts) do
21 hostmanager.deactivate(host);
22 timer.add_task(0, function ()
23 hostmanager.activate(host);
24 module:log("info", "Reset complete");
25 module:fire_event("server-reset");
26 end);
27 end
28 end
29
30 function module.add_host(host_module)
31 host_module:hook("resource-unbind", function ()
32 if next(prosody.full_sessions) == nil then
33 timer.add_task(0, do_reset);
34 end
35 end);
36 end
37
38 local console_env = module:shared("/*/admin_shell/env");
39 console_env.debug_reset = {
40 reset = do_reset;
41 };