Software /
code /
prosody
Diff
plugins/mod_console.lua @ 1315:bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 05 Jun 2009 19:57:29 +0100 |
parent | 1241:9c53fb182044 |
child | 1316:28ae044f1aaf |
line wrap: on
line diff
--- a/plugins/mod_console.lua Fri Jun 05 13:34:21 2009 +0100 +++ b/plugins/mod_console.lua Fri Jun 05 19:57:29 2009 +0100 @@ -8,11 +8,15 @@ module.host = "*"; -local hosts = _G.hosts; +local prosody = _G.prosody; +local hosts = prosody.hosts; local connlisteners_register = require "net.connlisteners".register; local console_listener = { default_port = 5582; default_mode = "*l"; }; +require "util.iterators"; +local set, array = require "util.set", require "util.array"; + local commands = {}; local def_env = {}; local default_env_mt = { __index = def_env }; @@ -141,31 +145,90 @@ end def_env.module = {}; -function def_env.module:load(name, host, config) + +local function get_hosts_set(hosts) + if type(hosts) == "table" then + if hosts[1] then + return set.new(hosts); + elseif hosts._items then + return hosts; + end + elseif type(hosts) == "string" then + return set.new { hosts }; + elseif hosts == nil then + return set.new(array.collect(keys(prosody.hosts))) + / function (host) return prosody.hosts[host].type == "local"; end; + end +end + +function def_env.module:load(name, hosts, config) local mm = require "modulemanager"; - local ok, err = mm.load(host or self.env.host, name, config); - if not ok then - return false, err or "Unknown error loading module"; + + hosts = get_hosts_set(hosts); + + -- Load the module for each host + local ok, err, count = true, nil, 0; + for host in hosts do + if (not mm.is_loaded(host, name)) then + ok, err = mm.load(host, name, config); + if not ok then + ok = false; + self.session.print(err or "Unknown error loading module"); + else + count = count + 1; + self.session.print("Loaded for "..host); + end + end end - return true, "Module loaded"; + + return ok, (ok and "Module loaded onto "..count.." host"..(count ~= 1 and "s" or "")) or ("Last error: "..tostring(err)); end -function def_env.module:unload(name, host) +function def_env.module:unload(name, hosts) local mm = require "modulemanager"; - local ok, err = mm.unload(host or self.env.host, name); - if not ok then - return false, err or "Unknown error unloading module"; + + hosts = get_hosts_set(hosts); + + -- Unload the module for each host + local ok, err, count = true, nil, 0; + for host in hosts do + if mm.is_loaded(host, name) then + ok, err = mm.unload(host, name); + if not ok then + ok = false; + self.session.print(err or "Unknown error unloading module"); + else + count = count + 1; + self.session.print("Unloaded from "..host); + end + end end - return true, "Module unloaded"; + return ok, (ok and "Module unloaded from "..count.." host"..(count ~= 1 and "s" or "")) or ("Last error: "..tostring(err)); end -function def_env.module:reload(name, host) +function def_env.module:reload(name, hosts) local mm = require "modulemanager"; - local ok, err = mm.reload(host or self.env.host, name); - if not ok then - return false, err or "Unknown error reloading module"; + + hosts = get_hosts_set(hosts); + + -- Reload the module for each host + local ok, err, count = true, nil, 0; + for host in hosts do + if mm.is_loaded(host, name) then + ok, err = mm.reload(host, name); + if not ok then + ok = false; + self.session.print(err or "Unknown error reloading module"); + else + count = count + 1; + if ok == nil then + ok = true; + end + self.session.print("Reloaded on "..host); + end + end end - return true, "Module reloaded"; + return ok, (ok and "Module reloaded on "..count.." host"..(count ~= 1 and "s" or "")) or ("Last error: "..tostring(err)); end def_env.config = {};