Diff

prosodyctl @ 4324:5e7cba840409

prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
author Matthew Wild <mwild1@gmail.com>
date Mon, 27 Jun 2011 12:02:50 +0100
parent 4167:9c60cc8dc142
child 4331:9c45858e3208
line wrap: on
line diff
--- a/prosodyctl	Sat Jun 18 14:04:56 2011 +0100
+++ b/prosodyctl	Mon Jun 27 12:02:50 2011 +0100
@@ -485,6 +485,49 @@
 	return commands.start(arg);
 end
 
+function commands.about(arg)
+	require "util.array";
+	require "util.iterators";
+	
+	print("Prosody "..(prosody.version or "(unknown version)"));
+	print("");
+	print("# Prosody directories");
+	print("Data directory:  ", CFG_DATADIR or "./");
+	print("Plugin directory:", CFG_PLUGINDIR or "./");
+	print("Config directory:", CFG_CONFIGDIR or "./");
+	print("Source directory:", CFG_SOURCEDIR or "./");
+	print("");
+	print("# Lua environment");
+	print("Lua version:             ", _G._VERSION);
+	print("");
+	print("Lua module search paths:");
+	for path in package.path:gmatch("[^;]+") do
+		print("  "..path);
+	end
+	print("");
+	print("Lua C module search paths:");
+	for path in package.cpath:gmatch("[^;]+") do
+		print("  "..path);
+	end
+	print("");
+	print("# Lua module versions");
+	local module_versions, longest_name = {}, 8;
+	for name, module in pairs(package.loaded) do
+		if type(module) == "table" and rawget(module, "_VERSION")
+		and name ~= "_G" and not name:match("%.") then
+			if #name > longest_name then
+				longest_name = #name;
+			end
+			module_versions[name] = module._VERSION;
+		end
+	end
+	local sorted_keys = array.collect(keys(module_versions)):sort();
+	for _, name in ipairs(array.collect(keys(module_versions)):sort()) do
+		print(name..":"..string.rep(" ", longest_name-#name), module_versions[name]);
+	end
+	print("");
+end
+
 -- ejabberdctl compatibility
 
 function commands.register(arg)
@@ -588,7 +631,7 @@
 	print("Where COMMAND may be one of:\n");
 
 	local hidden_commands = require "util.set".new{ "register", "unregister", "addplugin" };
-	local commands_order = { "adduser", "passwd", "deluser", "start", "stop", "restart" };
+	local commands_order = { "adduser", "passwd", "deluser", "start", "stop", "restart", "about" };
 
 	local done = {};