diff options
author | Matthew Wild <mwild1@gmail.com> | 2023-03-23 14:40:51 +0000 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2023-03-23 14:40:51 +0000 |
commit | 8e325c229fef8833a1fa07387963e26c90a7436f (patch) | |
tree | 2c5e256b606f7faeb4286b4ac21d84a94b1f102c /plugins | |
parent | 893366fb799968fcd88339812e8291bc4f06bee1 (diff) | |
download | prosody-8e325c229fef8833a1fa07387963e26c90a7436f.tar.gz prosody-8e325c229fef8833a1fa07387963e26c90a7436f.zip |
mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Plan to use this for integration tests.
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/mod_debug_reset.lua | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/plugins/mod_debug_reset.lua b/plugins/mod_debug_reset.lua new file mode 100644 index 00000000..cd08d960 --- /dev/null +++ b/plugins/mod_debug_reset.lua @@ -0,0 +1,41 @@ +-- 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 "core.hostmanager"; +local modulemanager = require "core.modulemanager"; + +local timer = require "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; +}; |