Software / code / prosody
Comparison
prosodyctl @ 8652:03bb534593cb
prosodyctl: Run commands inside async context
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Thu, 22 Mar 2018 16:23:06 +0000 |
| parent | 8635:47e3b8b6f17a |
| child | 8668:31c5abd49dfe |
comparison
equal
deleted
inserted
replaced
| 8651:1b7c5933b215 | 8652:03bb534593cb |
|---|---|
| 1230 return ok and 0 or 2; | 1230 return ok and 0 or 2; |
| 1231 end | 1231 end |
| 1232 | 1232 |
| 1233 --------------------- | 1233 --------------------- |
| 1234 | 1234 |
| 1235 if command and command:match("^mod_") then -- Is a command in a module | 1235 local async = require "util.async"; |
| 1236 local module_name = command:match("^mod_(.+)"); | 1236 local watchers = { |
| 1237 local ret, err = modulemanager.load("*", module_name); | 1237 error = function (_, err) |
| 1238 if not ret then | 1238 error(err); |
| 1239 show_message("Failed to load module '"..module_name.."': "..err); | 1239 end; |
| 1240 os.exit(1); | 1240 waiting = function () |
| 1241 end | 1241 server.loop(); |
| 1242 | 1242 end; |
| 1243 table.remove(arg, 1); | 1243 }; |
| 1244 | 1244 local command_runner = async.runner(function () |
| 1245 local module = modulemanager.get_module("*", module_name); | 1245 if command and command:match("^mod_") then -- Is a command in a module |
| 1246 if not module then | 1246 local module_name = command:match("^mod_(.+)"); |
| 1247 show_message("Failed to load module '"..module_name.."': Unknown error"); | 1247 local ret, err = modulemanager.load("*", module_name); |
| 1248 os.exit(1); | 1248 if not ret then |
| 1249 end | 1249 show_message("Failed to load module '"..module_name.."': "..err); |
| 1250 | 1250 os.exit(1); |
| 1251 if not modulemanager.module_has_method(module, "command") then | 1251 end |
| 1252 show_message("Fail: mod_"..module_name.." does not support any commands"); | 1252 |
| 1253 os.exit(1); | 1253 table.remove(arg, 1); |
| 1254 end | 1254 |
| 1255 | 1255 local module = modulemanager.get_module("*", module_name); |
| 1256 local ok, ret = modulemanager.call_module_method(module, "command", arg); | 1256 if not module then |
| 1257 if ok then | 1257 show_message("Failed to load module '"..module_name.."': Unknown error"); |
| 1258 if type(ret) == "number" then | 1258 os.exit(1); |
| 1259 os.exit(ret); | 1259 end |
| 1260 elseif type(ret) == "string" then | 1260 |
| 1261 show_message(ret); | 1261 if not modulemanager.module_has_method(module, "command") then |
| 1262 end | 1262 show_message("Fail: mod_"..module_name.." does not support any commands"); |
| 1263 os.exit(0); -- :) | 1263 os.exit(1); |
| 1264 else | 1264 end |
| 1265 show_message("Failed to execute command: "..error_messages[ret]); | 1265 |
| 1266 os.exit(1); -- :( | 1266 local ok, ret = modulemanager.call_module_method(module, "command", arg); |
| 1267 end | 1267 if ok then |
| 1268 end | 1268 if type(ret) == "number" then |
| 1269 | 1269 os.exit(ret); |
| 1270 if not commands[command] then -- Show help for all commands | 1270 elseif type(ret) == "string" then |
| 1271 function show_usage(usage, desc) | 1271 show_message(ret); |
| 1272 print(" "..usage); | 1272 end |
| 1273 print(" "..desc); | 1273 os.exit(0); -- :) |
| 1274 end | 1274 else |
| 1275 | 1275 show_message("Failed to execute command: "..error_messages[ret]); |
| 1276 print("prosodyctl - Manage a Prosody server"); | 1276 os.exit(1); -- :( |
| 1277 print(""); | 1277 end |
| 1278 print("Usage: "..arg[0].." COMMAND [OPTIONS]"); | 1278 end |
| 1279 print(""); | 1279 |
| 1280 print("Where COMMAND may be one of:\n"); | 1280 if not commands[command] then -- Show help for all commands |
| 1281 | 1281 function show_usage(usage, desc) |
| 1282 local hidden_commands = require "util.set".new{ "register", "unregister", "addplugin" }; | 1282 print(" "..usage); |
| 1283 local commands_order = { "adduser", "passwd", "deluser", "start", "stop", "restart", "reload", "about" }; | 1283 print(" "..desc); |
| 1284 | 1284 end |
| 1285 local done = {}; | 1285 |
| 1286 | 1286 print("prosodyctl - Manage a Prosody server"); |
| 1287 for _, command_name in ipairs(commands_order) do | 1287 print(""); |
| 1288 local command = commands[command_name]; | 1288 print("Usage: "..arg[0].." COMMAND [OPTIONS]"); |
| 1289 if command then | 1289 print(""); |
| 1290 command{ "--help" }; | 1290 print("Where COMMAND may be one of:\n"); |
| 1291 print"" | 1291 |
| 1292 done[command_name] = true; | 1292 local hidden_commands = require "util.set".new{ "register", "unregister", "addplugin" }; |
| 1293 end | 1293 local commands_order = { "adduser", "passwd", "deluser", "start", "stop", "restart", "reload", "about" }; |
| 1294 end | 1294 |
| 1295 | 1295 local done = {}; |
| 1296 for command_name, command in pairs(commands) do | 1296 |
| 1297 if not done[command_name] and not hidden_commands:contains(command_name) then | 1297 for _, command_name in ipairs(commands_order) do |
| 1298 command{ "--help" }; | 1298 local command = commands[command_name]; |
| 1299 print"" | 1299 if command then |
| 1300 done[command_name] = true; | 1300 command{ "--help" }; |
| 1301 end | 1301 print"" |
| 1302 end | 1302 done[command_name] = true; |
| 1303 | 1303 end |
| 1304 | 1304 end |
| 1305 os.exit(0); | 1305 |
| 1306 end | 1306 for command_name, command in pairs(commands) do |
| 1307 | 1307 if not done[command_name] and not hidden_commands:contains(command_name) then |
| 1308 os.exit(commands[command]({ select(2, unpack(arg)) })); | 1308 command{ "--help" }; |
| 1309 print"" | |
| 1310 done[command_name] = true; | |
| 1311 end | |
| 1312 end | |
| 1313 | |
| 1314 | |
| 1315 os.exit(0); | |
| 1316 end | |
| 1317 | |
| 1318 os.exit(commands[command]({ select(2, unpack(arg)) })); | |
| 1319 end, watchers); | |
| 1320 | |
| 1321 command_runner:run(true); |