blob: 9ff465eb71e52f1a5341b04f0f7fd9b3dbed31d4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
-- 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;
};
|