comparison mod_adhoc_cmd_modules/mod_adhoc_cmd_modules.lua @ 205:a6361a1fda5e

mod_adhoc_cmd_modules: Add "Reload module" command
author Florian Zeitz <florob@babelmonkeys.de>
date Fri, 09 Jul 2010 22:29:26 +0200
parents 4927b9737bb7
children d3498f115fcd
comparison
equal deleted inserted replaced
204:316d7c8e1fb0 205:a6361a1fda5e
10 local hosts = prosody.hosts; 10 local hosts = prosody.hosts;
11 11
12 require "util.iterators"; 12 require "util.iterators";
13 local dataforms_new = require "util.dataforms".new; 13 local dataforms_new = require "util.dataforms".new;
14 local array = require "util.array"; 14 local array = require "util.array";
15 local modulemanager = require "modulemanager";
15 local adhoc_new = module:require "adhoc".new; 16 local adhoc_new = module:require "adhoc".new;
16 17
17 function list_modules_handler(self, data, state) 18 function list_modules_handler(self, data, state)
18 local list_modules_result = dataforms_new { 19 local result = dataforms_new {
19 title = "List of loaded modules"; 20 title = "List of loaded modules";
20 21
21 { name = "FORM_TYPE", type = "hidden", value = "http://prosody.im/protocol/modules#list" }; 22 { name = "FORM_TYPE", type = "hidden", value = "http://prosody.im/protocol/modules#list" };
22 { name = "modules", type = "text-multi", label = "The following modules are loaded:" }; 23 { name = "modules", type = "text-multi", label = "The following modules are loaded:" };
23 }; 24 };
24 25
25 local modules = array.collect(keys(hosts[data.to].modules)):sort() 26 local modules = array.collect(keys(hosts[data.to].modules)):sort():concat("\n");
26 local modules_str = nil; 27
27 for _, name in ipairs(modules) do 28 return { status = "completed", result = { layout = result; data = { modules = modules } } };
28 modules_str = ((modules_str and modules_str .. "\n") or "") .. name; 29 end
30
31 -- TODO: Allow reloading multiple modules (depends on list-multi
32 function reload_modules_handler(self, data, state)
33 local modules = {};
34 local layout = dataforms_new {
35 title = "Reload module";
36 instructions = "Select the module to be reloaded";
37
38 { name = "FORM_TYPE", type = "hidden", value = "http://prosody.im/protocol/modules#reload" };
39 { name = "module", type = "list-single", value = modules, label = "Module to be reloaded:"};
40 };
41 if state then
42 if data.action == "cancel" then
43 return { status = "canceled" };
44 end
45 fields = layout:data(data.form);
46 local ok, err = modulemanager.reload(data.to, fields.module);
47 if ok then
48 return { status = "completed", info = 'Module "'..fields.module..'" successfully reloaded on host "'..data.to..'".' };
49 else
50 return { status = "completed", error = 'Failed to reload module "'..fields.module..'" on host "'..data.to..
51 '". Error was: "'..tostring(err)..'"' };
52 end
53 else
54 local modules2 = array.collect(keys(hosts[data.to].modules)):sort();
55 for i, val in ipairs(modules2) do
56 modules[i] = val;
57 end
58 return { status = "executing", form = layout }, "executing";
29 end 59 end
30
31 return { status = "completed", result = { layout = list_modules_result; data = { modules = modules_str } } };
32 end 60 end
33 61
34 local list_modules_desc = adhoc_new("List loaded modules", "http://prosody.im/protocol/modules#list", list_modules_handler, "admin"); 62 local list_modules_desc = adhoc_new("List loaded modules", "http://prosody.im/protocol/modules#list", list_modules_handler, "admin");
63 local reload_modules_desc = adhoc_new("Reload module", "http://prosody.im/protocol/modules#reload", reload_modules_handler, "admin");
35 64
36 module:add_item("adhoc", list_modules_desc); 65 module:add_item("adhoc", list_modules_desc);
66 module:add_item("adhoc", reload_modules_desc);