mod_admin_telnet: Add server:memory() command to view details of Prosody's memory...
authorMatthew Wild <mwild1@gmail.com>
Thu, 16 May 2013 09:47:22 +0000 (10:47 +0100)
committerMatthew Wild <mwild1@gmail.com>
Thu, 16 May 2013 09:47:22 +0000 (10:47 +0100)
plugins/mod_admin_telnet.lua

index 25830f764f1e3be65845474101b2ce1a801a9e09..b942e9bd8efce95db07c93a53f3c10ab6f002ee0 100644 (file)
@@ -236,6 +236,7 @@ function commands.help(session, data)
        elseif section == "server" then
                print [[server:version() - Show the server's version number]]
                print [[server:uptime() - Show how long the server has been running]]
+               print [[server:memory() - Show details about the server's memory usage]]
                print [[server:shutdown(reason) - Shut down the server, with an optional reason to be broadcast to all connections]]
        elseif section == "port" then
                print [[port:list() - Lists all network ports prosody currently listens on]]
@@ -300,6 +301,26 @@ function def_env.server:shutdown(reason)
        return true, "Shutdown initiated";
 end
 
+local function human(kb)
+       local unit = "K";
+       if kb > 1024 then
+               kb, unit = kb/1024, "M";
+       end
+       return ("%0.2f%sB"):format(kb, unit);
+end
+
+function def_env.server:memory()
+       if not pposix.meminfo then
+               return true, "Lua is using "..collectgarbage("count");
+       end
+       local mem, lua_mem = pposix.meminfo(), collectgarbage("count");
+       local print = self.session.print;
+       print("Process: "..human((mem.allocated+mem.allocated_mmap)/1024));
+       print("   Used: "..human(mem.used/1024).." ("..human(lua_mem).." by Lua)");
+       print("   Free: "..human(mem.unused/1024).." ("..human(mem.returnable/1024).." returnable)");
+       return true, "OK";
+end
+
 def_env.module = {};
 
 local function get_hosts_set(hosts, module)