plugins/mod_admin_telnet.lua
author Kim Alvefur <zash@zash.se>
Fri, 21 Sep 2018 21:19:44 +0200
changeset 9339 9e8d7d461c7d
parent 9335 048389a9bbd4
child 9394 4001eb3f465a
permissions -rw-r--r--
mod_http: Hook the host-less event if hooked from a global module
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1523
841d61be198f Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents: 1506
diff changeset
     1
-- Prosody IM
2923
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2870
diff changeset
     2
-- Copyright (C) 2008-2010 Matthew Wild
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2870
diff changeset
     3
-- Copyright (C) 2008-2010 Waqas Hussain
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
     4
--
758
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 736
diff changeset
     5
-- This project is MIT/X11 licensed. Please see the
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 736
diff changeset
     6
-- COPYING file in the source package for more information.
519
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 461
diff changeset
     7
--
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 461
diff changeset
     8
4623
403b56b78018 mod_posix, mod_bosh, mod_admin_telnet: Use module:set_global()
Kim Alvefur <zash@zash.se>
parents: 4582
diff changeset
     9
module:set_global();
519
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 461
diff changeset
    10
5030
9962fc19f9e9 mod_admin_telnet: Import prosody.incoming_s2s
Matthew Wild <mwild1@gmail.com>
parents: 5029
diff changeset
    11
local hostmanager = require "core.hostmanager";
9962fc19f9e9 mod_admin_telnet: Import prosody.incoming_s2s
Matthew Wild <mwild1@gmail.com>
parents: 5029
diff changeset
    12
local modulemanager = require "core.modulemanager";
9962fc19f9e9 mod_admin_telnet: Import prosody.incoming_s2s
Matthew Wild <mwild1@gmail.com>
parents: 5029
diff changeset
    13
local s2smanager = require "core.s2smanager";
9962fc19f9e9 mod_admin_telnet: Import prosody.incoming_s2s
Matthew Wild <mwild1@gmail.com>
parents: 5029
diff changeset
    14
local portmanager = require "core.portmanager";
8924
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
    15
local helpers = require "util.helpers";
5030
9962fc19f9e9 mod_admin_telnet: Import prosody.incoming_s2s
Matthew Wild <mwild1@gmail.com>
parents: 5029
diff changeset
    16
1342
947d94e3619f mod_console: Redirect print() to console session when executing commands in global environment
Matthew Wild <mwild1@gmail.com>
parents: 1341
diff changeset
    17
local _G = _G;
947d94e3619f mod_console: Redirect print() to console session when executing commands in global environment
Matthew Wild <mwild1@gmail.com>
parents: 1341
diff changeset
    18
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
    19
local prosody = _G.prosody;
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
    20
local hosts = prosody.hosts;
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    21
4989
573123ff2ab0 mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents: 4979
diff changeset
    22
local console_listener = { default_port = 5582; default_mode = "*a"; interface = "127.0.0.1" };
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    23
4582
542afb9c2ab1 mod_admin_telnet: Import util.iterators properly
Kim Alvefur <zash@zash.se>
parents: 4571
diff changeset
    24
local iterators = require "util.iterators";
542afb9c2ab1 mod_admin_telnet: Import util.iterators properly
Kim Alvefur <zash@zash.se>
parents: 4571
diff changeset
    25
local keys, values = iterators.keys, iterators.values;
7071
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
    26
local jid_bare, jid_split, jid_join = import("util.jid", "bare", "prepped_split", "join");
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
    27
local set, array = require "util.set", require "util.array";
3733
26571a99f6e6 core.s2smanager, mod_console, mod_saslauth, util.certverification: rename util.certverification to util.x509
Kim Alvefur <zash@zash.se>
parents: 3718
diff changeset
    28
local cert_verify_identity = require "util.x509".verify_identity;
5021
85b2689dbcfe Eliminate direct setfenv usage
Florian Zeitz <florob@babelmonkeys.de>
parents: 4913
diff changeset
    29
local envload = require "util.envload".envload;
85b2689dbcfe Eliminate direct setfenv usage
Florian Zeitz <florob@babelmonkeys.de>
parents: 4913
diff changeset
    30
local envloadfile = require "util.envload".envloadfile;
6506
8437058c4226 mod_admin_telnet: Soft-reqire util.pposix for server:memory()
Kim Alvefur <zash@zash.se>
parents: 6382
diff changeset
    31
local has_pposix, pposix = pcall(require, "util.pposix");
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
    32
4540
ddce5b1bdfca mod_admin_telnet: Use module:shared() to expose commands table and default console environment
Matthew Wild <mwild1@gmail.com>
parents: 4328
diff changeset
    33
local commands = module:shared("commands")
ddce5b1bdfca mod_admin_telnet: Use module:shared() to expose commands table and default console environment
Matthew Wild <mwild1@gmail.com>
parents: 4328
diff changeset
    34
local def_env = module:shared("env");
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    35
local default_env_mt = { __index = def_env };
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    36
1342
947d94e3619f mod_console: Redirect print() to console session when executing commands in global environment
Matthew Wild <mwild1@gmail.com>
parents: 1341
diff changeset
    37
local function redirect_output(_G, session)
3557
58ab7e61d220 mod_console: Keep global variable assignments sandboxed by default.
Waqas Hussain <waqas20@gmail.com>
parents: 3540
diff changeset
    38
	local env = setmetatable({ print = session.print }, { __index = function (t, k) return rawget(_G, k); end });
3407
15f633285755 mod_console: Override dofile() in the console environment (this lets print() print to the console session for example).
Waqas Hussain <waqas20@gmail.com>
parents: 3404
diff changeset
    39
	env.dofile = function(name)
5021
85b2689dbcfe Eliminate direct setfenv usage
Florian Zeitz <florob@babelmonkeys.de>
parents: 4913
diff changeset
    40
		local f, err = envloadfile(name, env);
3407
15f633285755 mod_console: Override dofile() in the console environment (this lets print() print to the console session for example).
Waqas Hussain <waqas20@gmail.com>
parents: 3404
diff changeset
    41
		if not f then return f, err; end
5021
85b2689dbcfe Eliminate direct setfenv usage
Florian Zeitz <florob@babelmonkeys.de>
parents: 4913
diff changeset
    42
		return f();
3407
15f633285755 mod_console: Override dofile() in the console environment (this lets print() print to the console session for example).
Waqas Hussain <waqas20@gmail.com>
parents: 3404
diff changeset
    43
	end;
15f633285755 mod_console: Override dofile() in the console environment (this lets print() print to the console session for example).
Waqas Hussain <waqas20@gmail.com>
parents: 3404
diff changeset
    44
	return env;
1342
947d94e3619f mod_console: Redirect print() to console session when executing commands in global environment
Matthew Wild <mwild1@gmail.com>
parents: 1341
diff changeset
    45
end
947d94e3619f mod_console: Redirect print() to console session when executing commands in global environment
Matthew Wild <mwild1@gmail.com>
parents: 1341
diff changeset
    46
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    47
console = {};
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    48
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    49
function console:new_session(conn)
2145
daeb6ebf304c mod_console: Update for new net.server API
Matthew Wild <mwild1@gmail.com>
parents: 2087
diff changeset
    50
	local w = function(s) conn:write(s:gsub("\n", "\r\n")); end;
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    51
	local session = { conn = conn;
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    52
			send = function (t) w(tostring(t)); end;
3404
33c81ee280e3 mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents: 3044
diff changeset
    53
			print = function (...)
33c81ee280e3 mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents: 3044
diff changeset
    54
				local t = {};
33c81ee280e3 mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents: 3044
diff changeset
    55
				for i=1,select("#", ...) do
33c81ee280e3 mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents: 3044
diff changeset
    56
					t[i] = tostring(select(i, ...));
33c81ee280e3 mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents: 3044
diff changeset
    57
				end
33c81ee280e3 mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents: 3044
diff changeset
    58
				w("| "..table.concat(t, "\t").."\n");
33c81ee280e3 mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents: 3044
diff changeset
    59
			end;
2253
a3537266a916 mod_console: Update for new server API, fixes traceback when closing console sessions
Matthew Wild <mwild1@gmail.com>
parents: 2145
diff changeset
    60
			disconnect = function () conn:close(); end;
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    61
			};
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    62
	session.env = setmetatable({}, default_env_mt);
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
    63
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    64
	-- Load up environment with helper objects
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    65
	for name, t in pairs(def_env) do
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    66
		if type(t) == "table" then
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    67
			session.env[name] = setmetatable({ session = session }, { __index = t });
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    68
		end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    69
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
    70
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    71
	return session;
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    72
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    73
5186
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    74
function console:process_line(session, line)
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    75
	local useglobalenv;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
    76
5186
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    77
	if line:match("^>") then
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    78
		line = line:gsub("^>", "");
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    79
		useglobalenv = true;
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    80
	elseif line == "\004" then
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    81
		commands["bye"](session, line);
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    82
		return;
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    83
	else
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    84
		local command = line:match("^%w+") or line:match("%p");
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    85
		if commands[command] then
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    86
			commands[command](session, line);
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    87
			return;
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    88
		end
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    89
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
    90
5186
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    91
	session.env._ = line;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
    92
5186
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    93
	local chunkname = "=console";
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    94
	local env = (useglobalenv and redirect_output(_G, session)) or session.env or nil
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    95
	local chunk, err = envload("return "..line, chunkname, env);
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    96
	if not chunk then
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    97
		chunk, err = envload(line, chunkname, env);
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    98
		if not chunk then
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
    99
			err = err:gsub("^%[string .-%]:%d+: ", "");
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   100
			err = err:gsub("^:%d+: ", "");
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   101
			err = err:gsub("'<eof>'", "the end of the line");
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   102
			session.print("Sorry, I couldn't understand that... "..err);
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   103
			return;
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   104
		end
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   105
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   106
5186
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   107
	local ranok, taskok, message = pcall(chunk);
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   108
5186
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   109
	if not (ranok or message or useglobalenv) and commands[line:lower()] then
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   110
		commands[line:lower()](session, line);
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   111
		return;
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   112
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   113
5186
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   114
	if not ranok then
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   115
		session.print("Fatal error while running command, it did not complete");
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   116
		session.print("Error: "..taskok);
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   117
		return;
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   118
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   119
5186
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   120
	if not message then
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   121
		session.print("Result: "..tostring(taskok));
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   122
		return;
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   123
	elseif (not taskok) and message then
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   124
		session.print("Command completed with a problem");
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   125
		session.print("Message: "..tostring(message));
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   126
		return;
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   127
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   128
5186
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   129
	session.print("OK: "..tostring(message));
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   130
end
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   131
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   132
local sessions = {};
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   133
3009
06f7d8054065 mod_console: Make use of the new onconnect callback to initialise session and send banner
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
   134
function console_listener.onconnect(conn)
06f7d8054065 mod_console: Make use of the new onconnect callback to initialise session and send banner
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
   135
	-- Handle new connection
06f7d8054065 mod_console: Make use of the new onconnect callback to initialise session and send banner
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
   136
	local session = console:new_session(conn);
06f7d8054065 mod_console: Make use of the new onconnect callback to initialise session and send banner
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
   137
	sessions[conn] = session;
06f7d8054065 mod_console: Make use of the new onconnect callback to initialise session and send banner
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
   138
	printbanner(session);
669
9255abbb3068 mod_console: replace all \n with \r\n in the output, and send \0 as a marker character after every response
Waqas Hussain <waqas20@gmail.com>
parents: 615
diff changeset
   139
	session.send(string.char(0));
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   140
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   141
2145
daeb6ebf304c mod_console: Update for new net.server API
Matthew Wild <mwild1@gmail.com>
parents: 2087
diff changeset
   142
function console_listener.onincoming(conn, data)
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   143
	local session = sessions[conn];
1317
f6e56a555c37 mod_console: Allow running code in the global environment by prefixing with '>'
Matthew Wild <mwild1@gmail.com>
parents: 1316
diff changeset
   144
4989
573123ff2ab0 mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents: 4979
diff changeset
   145
	local partial = session.partial_data;
573123ff2ab0 mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents: 4979
diff changeset
   146
	if partial then
573123ff2ab0 mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents: 4979
diff changeset
   147
		data = partial..data;
573123ff2ab0 mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents: 4979
diff changeset
   148
	end
573123ff2ab0 mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents: 4979
diff changeset
   149
573123ff2ab0 mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents: 4979
diff changeset
   150
	for line in data:gmatch("[^\n]*[\n\004]") do
5278
f79be67e5666 mod_admin_telnet: Stop processing lines when session is closed
Kim Alvefur <zash@zash.se>
parents: 5270
diff changeset
   151
		if session.closed then return end
5186
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   152
		console:process_line(session, line);
4989
573123ff2ab0 mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents: 4979
diff changeset
   153
		session.send(string.char(0));
573123ff2ab0 mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents: 4979
diff changeset
   154
	end
573123ff2ab0 mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents: 4979
diff changeset
   155
	session.partial_data = data:match("[^\n]+$");
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   156
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   157
6169
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   158
function console_listener.onreadtimeout(conn)
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   159
	local session = sessions[conn];
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   160
	if session then
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   161
		session.send("\0");
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   162
		return true;
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   163
	end
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   164
end
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   165
2145
daeb6ebf304c mod_console: Update for new net.server API
Matthew Wild <mwild1@gmail.com>
parents: 2087
diff changeset
   166
function console_listener.ondisconnect(conn, err)
2054
a43aea9b0bd1 mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents: 2010
diff changeset
   167
	local session = sessions[conn];
a43aea9b0bd1 mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents: 2010
diff changeset
   168
	if session then
a43aea9b0bd1 mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents: 2010
diff changeset
   169
		session.disconnect();
a43aea9b0bd1 mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents: 2010
diff changeset
   170
		sessions[conn] = nil;
a43aea9b0bd1 mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents: 2010
diff changeset
   171
	end
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   172
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   173
6380
4220ffb87b22 net.http, net.http.server, mod_c2s, mod_s2s, mod_component, mod_admin_telnet, mod_net_multiplex: Add ondetach to release connection from 'sessions' table (or equivalent)
Matthew Wild <mwild1@gmail.com>
parents: 6311
diff changeset
   174
function console_listener.ondetach(conn)
4220ffb87b22 net.http, net.http.server, mod_c2s, mod_s2s, mod_component, mod_admin_telnet, mod_net_multiplex: Add ondetach to release connection from 'sessions' table (or equivalent)
Matthew Wild <mwild1@gmail.com>
parents: 6311
diff changeset
   175
	sessions[conn] = nil;
4220ffb87b22 net.http, net.http.server, mod_c2s, mod_s2s, mod_component, mod_admin_telnet, mod_net_multiplex: Add ondetach to release connection from 'sessions' table (or equivalent)
Matthew Wild <mwild1@gmail.com>
parents: 6311
diff changeset
   176
end
4220ffb87b22 net.http, net.http.server, mod_c2s, mod_s2s, mod_component, mod_admin_telnet, mod_net_multiplex: Add ondetach to release connection from 'sessions' table (or equivalent)
Matthew Wild <mwild1@gmail.com>
parents: 6311
diff changeset
   177
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   178
-- Console commands --
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   179
-- These are simple commands, not valid standalone in Lua
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   180
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   181
function commands.bye(session)
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   182
	session.print("See you! :)");
5278
f79be67e5666 mod_admin_telnet: Stop processing lines when session is closed
Kim Alvefur <zash@zash.se>
parents: 5270
diff changeset
   183
	session.closed = true;
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   184
	session.disconnect();
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   185
end
1503
5970e06d9335 mod_console: Add quit and exit as aliases for 'bye' command
Matthew Wild <mwild1@gmail.com>
parents: 1502
diff changeset
   186
commands.quit, commands.exit = commands.bye, commands.bye;
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   187
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   188
commands["!"] = function (session, data)
3614
8b436cc88c0e mod_console: Don't allow bang bang as the first command in a session, or when the last command is unknown (fixes #218)
Matthew Wild <mwild1@gmail.com>
parents: 3557
diff changeset
   189
	if data:match("^!!") and session.env._ then
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   190
		session.print("!> "..session.env._);
2512
d04b0eeeb954 mod_console: Update !! shortcut for new connection API
Matthew Wild <mwild1@gmail.com>
parents: 2296
diff changeset
   191
		return console_listener.onincoming(session.conn, session.env._);
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   192
	end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   193
	local old, new = data:match("^!(.-[^\\])!(.-)!$");
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   194
	if old and new then
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   195
		local ok, res = pcall(string.gsub, session.env._, old, new);
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   196
		if not ok then
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   197
			session.print(res)
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   198
			return;
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   199
		end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   200
		session.print("!> "..res);
2512
d04b0eeeb954 mod_console: Update !! shortcut for new connection API
Matthew Wild <mwild1@gmail.com>
parents: 2296
diff changeset
   201
		return console_listener.onincoming(session.conn, res);
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   202
	end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   203
	session.print("Sorry, not sure what you want");
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   204
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   205
3452
2d1a5d8893c2 mod_console: Add host:* commands to help (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents: 3407
diff changeset
   206
1616
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   207
function commands.help(session, data)
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   208
	local print = session.print;
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   209
	local section = data:match("^help (%w+)");
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   210
	if not section then
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   211
		print [[Commands are divided into multiple sections. For help on a particular section, ]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   212
		print [[type: help SECTION (for example, 'help c2s'). Sections are: ]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   213
		print [[]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   214
		print [[c2s - Commands to manage local client-to-server sessions]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   215
		print [[s2s - Commands to manage sessions between this server and others]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   216
		print [[module - Commands to load/reload/unload modules/plugins]]
3452
2d1a5d8893c2 mod_console: Add host:* commands to help (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents: 3407
diff changeset
   217
		print [[host - Commands to activate, deactivate and list virtual hosts]]
4974
1574f18b0ca4 mod_admin_telnet: Add info about user management commands to the help
Kim Alvefur <zash@zash.se>
parents: 4973
diff changeset
   218
		print [[user - Commands to create and delete users, and change their passwords]]
1616
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   219
		print [[server - Uptime, version, shutting down, etc.]]
5270
20e14961f630 mod_admin_telnet: Add info about port commands to help
Kim Alvefur <zash@zash.se>
parents: 5227
diff changeset
   220
		print [[port - Commands to manage ports the server is listening on]]
5567
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
   221
		print [[dns - Commands to manage and inspect the internal DNS resolver]]
2009
3f9cce29c57d mod_console: Added help text for config:reload().
Waqas Hussain <waqas20@gmail.com>
parents: 2007
diff changeset
   222
		print [[config - Reloading the configuration, etc.]]
1616
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   223
		print [[console - Help regarding the console itself]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   224
	elseif section == "c2s" then
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   225
		print [[c2s:show(jid) - Show all client sessions with the specified JID (or all if no JID given)]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   226
		print [[c2s:show_insecure() - Show all unencrypted client connections]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   227
		print [[c2s:show_secure() - Show all encrypted client connections]]
6174
513ea94761b2 mod_admin_telnet: Add c2s:show_tls(), behaves like s2s:show_tls()
Kim Alvefur <zash@zash.se>
parents: 6173
diff changeset
   228
		print [[c2s:show_tls() - Show TLS cipher info for encrypted sessions]]
1616
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   229
		print [[c2s:close(jid) - Close all sessions for the specified JID]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   230
	elseif section == "s2s" then
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   231
		print [[s2s:show(domain) - Show all s2s connections for the given domain (or all if no domain given)]]
6172
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   232
		print [[s2s:show_tls(domain) - Show TLS cipher info for encrypted sessions]]
1616
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   233
		print [[s2s:close(from, to) - Close a connection from one domain to another]]
4978
0b9e86302de4 mod_admin_telnet: add s2s:closeall command and relative help entry.
Marco Cirillo <maranda@lightwitch.org>
parents: 4913
diff changeset
   234
		print [[s2s:closeall(host) - Close all the incoming/outgoing s2s sessions to specified host]]
1616
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   235
	elseif section == "module" then
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   236
		print [[module:load(module, host) - Load the specified module on the specified host (or all hosts if none given)]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   237
		print [[module:reload(module, host) - The same, but unloads and loads the module (saving state if the module supports it)]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   238
		print [[module:unload(module, host) - The same, but just unloads the module from memory]]
1907
1dd4443e7d93 mod_console: Add module:list() to help
Matthew Wild <mwild1@gmail.com>
parents: 1906
diff changeset
   239
		print [[module:list(host) - List the modules loaded on the specified host]]
3452
2d1a5d8893c2 mod_console: Add host:* commands to help (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents: 3407
diff changeset
   240
	elseif section == "host" then
2d1a5d8893c2 mod_console: Add host:* commands to help (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents: 3407
diff changeset
   241
		print [[host:activate(hostname) - Activates the specified host]]
2d1a5d8893c2 mod_console: Add host:* commands to help (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents: 3407
diff changeset
   242
		print [[host:deactivate(hostname) - Disconnects all clients on this host and deactivates]]
2d1a5d8893c2 mod_console: Add host:* commands to help (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents: 3407
diff changeset
   243
		print [[host:list() - List the currently-activated hosts]]
4974
1574f18b0ca4 mod_admin_telnet: Add info about user management commands to the help
Kim Alvefur <zash@zash.se>
parents: 4973
diff changeset
   244
	elseif section == "user" then
1574f18b0ca4 mod_admin_telnet: Add info about user management commands to the help
Kim Alvefur <zash@zash.se>
parents: 4973
diff changeset
   245
		print [[user:create(jid, password) - Create the specified user account]]
1574f18b0ca4 mod_admin_telnet: Add info about user management commands to the help
Kim Alvefur <zash@zash.se>
parents: 4973
diff changeset
   246
		print [[user:password(jid, password) - Set the password for the specified user account]]
5128
834ab74585ec mod_admin_telnet: Fix user:*, correct names, docs, do validation
Kim Alvefur <zash@zash.se>
parents: 5030
diff changeset
   247
		print [[user:delete(jid) - Permanently remove the specified user account]]
5168
46fc0eff10b4 mod_admin_telnet: user:list(): Allow filtering the set of users
Kim Alvefur <zash@zash.se>
parents: 5167
diff changeset
   248
		print [[user:list(hostname, pattern) - List users on the specified host, optionally filtering with a pattern]]
1616
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   249
	elseif section == "server" then
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   250
		print [[server:version() - Show the server's version number]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   251
		print [[server:uptime() - Show how long the server has been running]]
5672
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   252
		print [[server:memory() - Show details about the server's memory usage]]
2870
471c3acffb2a mod_console: Uncomment the help for server:shutdown() - thanks darkrain
Matthew Wild <mwild1@gmail.com>
parents: 2087
diff changeset
   253
		print [[server:shutdown(reason) - Shut down the server, with an optional reason to be broadcast to all connections]]
5270
20e14961f630 mod_admin_telnet: Add info about port commands to help
Kim Alvefur <zash@zash.se>
parents: 5227
diff changeset
   254
	elseif section == "port" then
20e14961f630 mod_admin_telnet: Add info about port commands to help
Kim Alvefur <zash@zash.se>
parents: 5227
diff changeset
   255
		print [[port:list() - Lists all network ports prosody currently listens on]]
20e14961f630 mod_admin_telnet: Add info about port commands to help
Kim Alvefur <zash@zash.se>
parents: 5227
diff changeset
   256
		print [[port:close(port, interface) - Close a port]]
5567
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
   257
	elseif section == "dns" then
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
   258
		print [[dns:lookup(name, type, class) - Do a DNS lookup]]
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
   259
		print [[dns:addnameserver(nameserver) - Add a nameserver to the list]]
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
   260
		print [[dns:setnameserver(nameserver) - Replace the list of name servers with the supplied one]]
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
   261
		print [[dns:purge() - Clear the DNS cache]]
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
   262
		print [[dns:cache() - Show cached records]]
2009
3f9cce29c57d mod_console: Added help text for config:reload().
Waqas Hussain <waqas20@gmail.com>
parents: 2007
diff changeset
   263
	elseif section == "config" then
3f9cce29c57d mod_console: Added help text for config:reload().
Waqas Hussain <waqas20@gmail.com>
parents: 2007
diff changeset
   264
		print [[config:reload() - Reload the server configuration. Modules may need to be reloaded for changes to take effect.]]
1616
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   265
	elseif section == "console" then
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   266
		print [[Hey! Welcome to Prosody's admin console.]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   267
		print [[First thing, if you're ever wondering how to get out, simply type 'quit'.]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   268
		print [[Secondly, note that we don't support the full telnet protocol yet (it's coming)]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   269
		print [[so you may have trouble using the arrow keys, etc. depending on your system.]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   270
		print [[]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   271
		print [[For now we offer a couple of handy shortcuts:]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   272
		print [[!! - Repeat the last command]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   273
		print [[!old!new! - repeat the last command, but with 'old' replaced by 'new']]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   274
		print [[]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   275
		print [[For those well-versed in Prosody's internals, or taking instruction from those who are,]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   276
		print [[you can prefix a command with > to escape the console sandbox, and access everything in]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   277
		print [[the running server. Great fun, but be careful not to break anything :)]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   278
	end
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   279
	print [[]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   280
end
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   281
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   282
-- Session environment --
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   283
-- Anything in def_env will be accessible within the session as a global variable
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   284
6990
06696882d972 mod_admin_telnet: Add http:list() command to get info about current HTTP endpoints on the server
Matthew Wild <mwild1@gmail.com>
parents: 6930
diff changeset
   285
--luacheck: ignore 212/self
06696882d972 mod_admin_telnet: Add http:list() command to get info about current HTTP endpoints on the server
Matthew Wild <mwild1@gmail.com>
parents: 6930
diff changeset
   286
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   287
def_env.server = {};
1558
e15917530285 mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents: 1556
diff changeset
   288
1556
8154aa1fbe6c mod_console: Rename server:reload() to server:insane_reload() (basically no-one should use it except me...)
Matthew Wild <mwild1@gmail.com>
parents: 1523
diff changeset
   289
function def_env.server:insane_reload()
1316
28ae044f1aaf mod_console: Some "improvements" to the useless server:reload() command :)
Matthew Wild <mwild1@gmail.com>
parents: 1315
diff changeset
   290
	prosody.unlock_globals();
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   291
	dofile "prosody"
1316
28ae044f1aaf mod_console: Some "improvements" to the useless server:reload() command :)
Matthew Wild <mwild1@gmail.com>
parents: 1315
diff changeset
   292
	prosody = _G.prosody;
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   293
	return true, "Server reloaded";
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   294
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   295
1496
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   296
function def_env.server:version()
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   297
	return true, tostring(prosody.version or "unknown");
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   298
end
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   299
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   300
function def_env.server:uptime()
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   301
	local t = os.time()-prosody.start_time;
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   302
	local seconds = t%60;
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   303
	t = (t - seconds)/60;
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   304
	local minutes = t%60;
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   305
	t = (t - minutes)/60;
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   306
	local hours = t%24;
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   307
	t = (t - hours)/24;
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   308
	local days = t;
3540
bc139431830b Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents: 3452
diff changeset
   309
	return true, string.format("This server has been running for %d day%s, %d hour%s and %d minute%s (since %s)",
bc139431830b Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents: 3452
diff changeset
   310
		days, (days ~= 1 and "s") or "", hours, (hours ~= 1 and "s") or "",
1496
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   311
		minutes, (minutes ~= 1 and "s") or "", os.date("%c", prosody.start_time));
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   312
end
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   313
1559
831649bb1922 mod_console: Add server:shutdown() command
Matthew Wild <mwild1@gmail.com>
parents: 1558
diff changeset
   314
function def_env.server:shutdown(reason)
831649bb1922 mod_console: Add server:shutdown() command
Matthew Wild <mwild1@gmail.com>
parents: 1558
diff changeset
   315
	prosody.shutdown(reason);
831649bb1922 mod_console: Add server:shutdown() command
Matthew Wild <mwild1@gmail.com>
parents: 1558
diff changeset
   316
	return true, "Shutdown initiated";
831649bb1922 mod_console: Add server:shutdown() command
Matthew Wild <mwild1@gmail.com>
parents: 1558
diff changeset
   317
end
831649bb1922 mod_console: Add server:shutdown() command
Matthew Wild <mwild1@gmail.com>
parents: 1558
diff changeset
   318
5672
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   319
local function human(kb)
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   320
	local unit = "K";
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   321
	if kb > 1024 then
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   322
		kb, unit = kb/1024, "M";
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   323
	end
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   324
	return ("%0.2f%sB"):format(kb, unit);
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   325
end
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   326
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   327
function def_env.server:memory()
6506
8437058c4226 mod_admin_telnet: Soft-reqire util.pposix for server:memory()
Kim Alvefur <zash@zash.se>
parents: 6382
diff changeset
   328
	if not has_pposix or not pposix.meminfo then
8129
60f6f7ddd2ce mod_admin_telnet: Output human-friendly memory usage when meminfo is unavailable (thanks nbastin)
Kim Alvefur <zash@zash.se>
parents: 7980
diff changeset
   329
		return true, "Lua is using "..human(collectgarbage("count"));
5672
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   330
	end
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   331
	local mem, lua_mem = pposix.meminfo(), collectgarbage("count");
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   332
	local print = self.session.print;
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   333
	print("Process: "..human((mem.allocated+mem.allocated_mmap)/1024));
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   334
	print("   Used: "..human(mem.used/1024).." ("..human(lua_mem).." by Lua)");
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   335
	print("   Free: "..human(mem.unused/1024).." ("..human(mem.returnable/1024).." returnable)");
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   336
	return true, "OK";
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   337
end
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   338
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   339
def_env.module = {};
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   340
1433
e7bd00e70973 mod_console: Reload/unload a module on a component host if it is loaded there
Matthew Wild <mwild1@gmail.com>
parents: 1342
diff changeset
   341
local function get_hosts_set(hosts, module)
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   342
	if type(hosts) == "table" then
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   343
		if hosts[1] then
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   344
			return set.new(hosts);
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   345
		elseif hosts._items then
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   346
			return hosts;
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   347
		end
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   348
	elseif type(hosts) == "string" then
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   349
		return set.new { hosts };
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   350
	elseif hosts == nil then
4644
fb067c8a8d2e mod_admin_telnet: get_host_set(): Include '*' in the set if no specific hosts are specified and the module is loaded there
Matthew Wild <mwild1@gmail.com>
parents: 4623
diff changeset
   351
		local hosts_set = set.new(array.collect(keys(prosody.hosts)))
6784
05cd80ec107c mod_admin_telnet: Remove now broken importing of modulemanager from various commands, use upvalue defined at top of file (thanks daurnimator)
Kim Alvefur <zash@zash.se>
parents: 6583
diff changeset
   352
			/ function (host) return (prosody.hosts[host].type == "local" or module and modulemanager.is_loaded(host, module)) and host or nil; end;
05cd80ec107c mod_admin_telnet: Remove now broken importing of modulemanager from various commands, use upvalue defined at top of file (thanks daurnimator)
Kim Alvefur <zash@zash.se>
parents: 6583
diff changeset
   353
		if module and modulemanager.get_module("*", module) then
4644
fb067c8a8d2e mod_admin_telnet: get_host_set(): Include '*' in the set if no specific hosts are specified and the module is loaded there
Matthew Wild <mwild1@gmail.com>
parents: 4623
diff changeset
   354
			hosts_set:add("*");
fb067c8a8d2e mod_admin_telnet: get_host_set(): Include '*' in the set if no specific hosts are specified and the module is loaded there
Matthew Wild <mwild1@gmail.com>
parents: 4623
diff changeset
   355
		end
fb067c8a8d2e mod_admin_telnet: get_host_set(): Include '*' in the set if no specific hosts are specified and the module is loaded there
Matthew Wild <mwild1@gmail.com>
parents: 4623
diff changeset
   356
		return hosts_set;
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   357
	end
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   358
end
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   359
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   360
function def_env.module:load(name, hosts, config)
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   361
	hosts = get_hosts_set(hosts);
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   362
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   363
	-- Load the module for each host
4647
57a4f863e48f mod_admin_telnet: module:load(): Fix 'global-module-already-loaded' errors when successfully loading a global module (fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4646
diff changeset
   364
	local ok, err, count, mod = true, nil, 0, nil;
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   365
	for host in hosts do
6784
05cd80ec107c mod_admin_telnet: Remove now broken importing of modulemanager from various commands, use upvalue defined at top of file (thanks daurnimator)
Kim Alvefur <zash@zash.se>
parents: 6583
diff changeset
   366
		if (not modulemanager.is_loaded(host, name)) then
05cd80ec107c mod_admin_telnet: Remove now broken importing of modulemanager from various commands, use upvalue defined at top of file (thanks daurnimator)
Kim Alvefur <zash@zash.se>
parents: 6583
diff changeset
   367
			mod, err = modulemanager.load(host, name, config);
4647
57a4f863e48f mod_admin_telnet: module:load(): Fix 'global-module-already-loaded' errors when successfully loading a global module (fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4646
diff changeset
   368
			if not mod then
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   369
				ok = false;
4647
57a4f863e48f mod_admin_telnet: module:load(): Fix 'global-module-already-loaded' errors when successfully loading a global module (fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4646
diff changeset
   370
				if err == "global-module-already-loaded" then
57a4f863e48f mod_admin_telnet: module:load(): Fix 'global-module-already-loaded' errors when successfully loading a global module (fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4646
diff changeset
   371
					if count > 0 then
57a4f863e48f mod_admin_telnet: module:load(): Fix 'global-module-already-loaded' errors when successfully loading a global module (fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4646
diff changeset
   372
						ok, err, count = true, nil, 1;
57a4f863e48f mod_admin_telnet: module:load(): Fix 'global-module-already-loaded' errors when successfully loading a global module (fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4646
diff changeset
   373
					end
57a4f863e48f mod_admin_telnet: module:load(): Fix 'global-module-already-loaded' errors when successfully loading a global module (fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4646
diff changeset
   374
					break;
57a4f863e48f mod_admin_telnet: module:load(): Fix 'global-module-already-loaded' errors when successfully loading a global module (fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4646
diff changeset
   375
				end
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   376
				self.session.print(err or "Unknown error loading module");
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   377
			else
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   378
				count = count + 1;
4647
57a4f863e48f mod_admin_telnet: module:load(): Fix 'global-module-already-loaded' errors when successfully loading a global module (fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4646
diff changeset
   379
				self.session.print("Loaded for "..mod.module.host);
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   380
			end
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   381
		end
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   382
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   383
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   384
	return ok, (ok and "Module loaded onto "..count.." host"..(count ~= 1 and "s" or "")) or ("Last error: "..tostring(err));
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   385
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   386
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   387
function def_env.module:unload(name, hosts)
1433
e7bd00e70973 mod_console: Reload/unload a module on a component host if it is loaded there
Matthew Wild <mwild1@gmail.com>
parents: 1342
diff changeset
   388
	hosts = get_hosts_set(hosts, name);
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   389
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   390
	-- Unload the module for each host
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   391
	local ok, err, count = true, nil, 0;
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   392
	for host in hosts do
6784
05cd80ec107c mod_admin_telnet: Remove now broken importing of modulemanager from various commands, use upvalue defined at top of file (thanks daurnimator)
Kim Alvefur <zash@zash.se>
parents: 6583
diff changeset
   393
		if modulemanager.is_loaded(host, name) then
05cd80ec107c mod_admin_telnet: Remove now broken importing of modulemanager from various commands, use upvalue defined at top of file (thanks daurnimator)
Kim Alvefur <zash@zash.se>
parents: 6583
diff changeset
   394
			ok, err = modulemanager.unload(host, name);
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   395
			if not ok then
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   396
				ok = false;
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   397
				self.session.print(err or "Unknown error unloading module");
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   398
			else
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   399
				count = count + 1;
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   400
				self.session.print("Unloaded from "..host);
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   401
			end
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   402
		end
712
56410c0cd846 mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents: 669
diff changeset
   403
	end
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   404
	return ok, (ok and "Module unloaded from "..count.." host"..(count ~= 1 and "s" or "")) or ("Last error: "..tostring(err));
712
56410c0cd846 mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents: 669
diff changeset
   405
end
56410c0cd846 mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents: 669
diff changeset
   406
9335
048389a9bbd4 mod_admin_telnet: Split out sort function for clarity
Matthew Wild <mwild1@gmail.com>
parents: 9333
diff changeset
   407
local function _sort_hosts(a, b)
048389a9bbd4 mod_admin_telnet: Split out sort function for clarity
Matthew Wild <mwild1@gmail.com>
parents: 9333
diff changeset
   408
	if a == "*" then return true
048389a9bbd4 mod_admin_telnet: Split out sort function for clarity
Matthew Wild <mwild1@gmail.com>
parents: 9333
diff changeset
   409
	elseif b == "*" then return false
048389a9bbd4 mod_admin_telnet: Split out sort function for clarity
Matthew Wild <mwild1@gmail.com>
parents: 9333
diff changeset
   410
	else return a < b; end
048389a9bbd4 mod_admin_telnet: Split out sort function for clarity
Matthew Wild <mwild1@gmail.com>
parents: 9333
diff changeset
   411
end
048389a9bbd4 mod_admin_telnet: Split out sort function for clarity
Matthew Wild <mwild1@gmail.com>
parents: 9333
diff changeset
   412
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   413
function def_env.module:reload(name, hosts)
9335
048389a9bbd4 mod_admin_telnet: Split out sort function for clarity
Matthew Wild <mwild1@gmail.com>
parents: 9333
diff changeset
   414
	hosts = array.collect(get_hosts_set(hosts, name)):sort(_sort_hosts)
4645
4539e99be743 mod_admin_telnet: module:reload(): If module is loaded on *, reload it there first (ensuring shared module code is reloaded before per-host children of that module)
Matthew Wild <mwild1@gmail.com>
parents: 4644
diff changeset
   415
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   416
	-- Reload the module for each host
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   417
	local ok, err, count = true, nil, 0;
4645
4539e99be743 mod_admin_telnet: module:reload(): If module is loaded on *, reload it there first (ensuring shared module code is reloaded before per-host children of that module)
Matthew Wild <mwild1@gmail.com>
parents: 4644
diff changeset
   418
	for _, host in ipairs(hosts) do
6784
05cd80ec107c mod_admin_telnet: Remove now broken importing of modulemanager from various commands, use upvalue defined at top of file (thanks daurnimator)
Kim Alvefur <zash@zash.se>
parents: 6583
diff changeset
   419
		if modulemanager.is_loaded(host, name) then
05cd80ec107c mod_admin_telnet: Remove now broken importing of modulemanager from various commands, use upvalue defined at top of file (thanks daurnimator)
Kim Alvefur <zash@zash.se>
parents: 6583
diff changeset
   420
			ok, err = modulemanager.reload(host, name);
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   421
			if not ok then
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   422
				ok = false;
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   423
				self.session.print(err or "Unknown error reloading module");
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   424
			else
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   425
				count = count + 1;
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   426
				if ok == nil then
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   427
					ok = true;
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   428
				end
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   429
				self.session.print("Reloaded on "..host);
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   430
			end
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   431
		end
712
56410c0cd846 mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents: 669
diff changeset
   432
	end
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   433
	return ok, (ok and "Module reloaded on "..count.." host"..(count ~= 1 and "s" or "")) or ("Last error: "..tostring(err));
712
56410c0cd846 mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents: 669
diff changeset
   434
end
56410c0cd846 mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents: 669
diff changeset
   435
1906
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   436
function def_env.module:list(hosts)
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   437
	if hosts == nil then
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   438
		hosts = array.collect(keys(prosody.hosts));
4646
e0bd8587f2fb mod_admin_telnet: module:list(): List global modules (part-fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4645
diff changeset
   439
		table.insert(hosts, 1, "*");
1906
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   440
	end
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   441
	if type(hosts) == "string" then
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   442
		hosts = { hosts };
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   443
	end
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   444
	if type(hosts) ~= "table" then
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   445
		return false, "Please supply a host or a list of hosts you would like to see";
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   446
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   447
1906
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   448
	local print = self.session.print;
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   449
	for _, host in ipairs(hosts) do
4646
e0bd8587f2fb mod_admin_telnet: module:list(): List global modules (part-fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4645
diff changeset
   450
		print((host == "*" and "Global" or host)..":");
e0bd8587f2fb mod_admin_telnet: module:list(): List global modules (part-fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4645
diff changeset
   451
		local modules = array.collect(keys(modulemanager.get_modules(host) or {})):sort();
1906
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   452
		if #modules == 0 then
2010
1a4f14ea39b6 mod_console: Fixed traceback occuring on using module:list on unknown hosts.
Waqas Hussain <waqas20@gmail.com>
parents: 2009
diff changeset
   453
			if prosody.hosts[host] then
1a4f14ea39b6 mod_console: Fixed traceback occuring on using module:list on unknown hosts.
Waqas Hussain <waqas20@gmail.com>
parents: 2009
diff changeset
   454
				print("    No modules loaded");
1a4f14ea39b6 mod_console: Fixed traceback occuring on using module:list on unknown hosts.
Waqas Hussain <waqas20@gmail.com>
parents: 2009
diff changeset
   455
			else
1a4f14ea39b6 mod_console: Fixed traceback occuring on using module:list on unknown hosts.
Waqas Hussain <waqas20@gmail.com>
parents: 2009
diff changeset
   456
				print("    Host not found");
1a4f14ea39b6 mod_console: Fixed traceback occuring on using module:list on unknown hosts.
Waqas Hussain <waqas20@gmail.com>
parents: 2009
diff changeset
   457
			end
1906
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   458
		else
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   459
			for _, name in ipairs(modules) do
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   460
				print("    "..name);
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   461
			end
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   462
		end
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   463
	end
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   464
end
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   465
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   466
def_env.config = {};
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   467
function def_env.config:load(filename, format)
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   468
	local config_load = require "core.configmanager".load;
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   469
	local ok, err = config_load(filename, format);
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   470
	if not ok then
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   471
		return false, err or "Unknown error loading config";
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   472
	end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   473
	return true, "Config loaded";
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   474
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   475
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   476
function def_env.config:get(host, section, key)
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   477
	local config_get = require "core.configmanager".get
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   478
	return true, tostring(config_get(host, section, key));
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   479
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   480
1558
e15917530285 mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents: 1556
diff changeset
   481
function def_env.config:reload()
e15917530285 mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents: 1556
diff changeset
   482
	local ok, err = prosody.reload_config();
e15917530285 mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents: 1556
diff changeset
   483
	return ok, (ok and "Config reloaded (you may need to reload modules to take effect)") or tostring(err);
e15917530285 mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents: 1556
diff changeset
   484
end
e15917530285 mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents: 1556
diff changeset
   485
6173
1600438c0c14 mod_admin_telnet: Move generation of log tag for s2s:show() (adds it to c2s:show() too)
Kim Alvefur <zash@zash.se>
parents: 6172
diff changeset
   486
local function common_info(session, line)
1600438c0c14 mod_admin_telnet: Move generation of log tag for s2s:show() (adds it to c2s:show() too)
Kim Alvefur <zash@zash.se>
parents: 6172
diff changeset
   487
	if session.id then
1600438c0c14 mod_admin_telnet: Move generation of log tag for s2s:show() (adds it to c2s:show() too)
Kim Alvefur <zash@zash.se>
parents: 6172
diff changeset
   488
		line[#line+1] = "["..session.id.."]"
1600438c0c14 mod_admin_telnet: Move generation of log tag for s2s:show() (adds it to c2s:show() too)
Kim Alvefur <zash@zash.se>
parents: 6172
diff changeset
   489
	else
1600438c0c14 mod_admin_telnet: Move generation of log tag for s2s:show() (adds it to c2s:show() too)
Kim Alvefur <zash@zash.se>
parents: 6172
diff changeset
   490
		line[#line+1] = "["..session.type..(tostring(session):match("%x*$")).."]"
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   491
	end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   492
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   493
5586
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   494
local function session_flags(session, line)
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   495
	line = line or {};
6173
1600438c0c14 mod_admin_telnet: Move generation of log tag for s2s:show() (adds it to c2s:show() too)
Kim Alvefur <zash@zash.se>
parents: 6172
diff changeset
   496
	common_info(session, line);
6171
c69fca37f338 mod_admin_telnet: Move extraction of c2s presence info into session_flags()
Kim Alvefur <zash@zash.se>
parents: 6170
diff changeset
   497
	if session.type == "c2s" then
c69fca37f338 mod_admin_telnet: Move extraction of c2s presence info into session_flags()
Kim Alvefur <zash@zash.se>
parents: 6170
diff changeset
   498
		local status, priority = "unavailable", tostring(session.priority or "-");
c69fca37f338 mod_admin_telnet: Move extraction of c2s presence info into session_flags()
Kim Alvefur <zash@zash.se>
parents: 6170
diff changeset
   499
		if session.presence then
c69fca37f338 mod_admin_telnet: Move extraction of c2s presence info into session_flags()
Kim Alvefur <zash@zash.se>
parents: 6170
diff changeset
   500
			status = session.presence:get_child_text("show") or "available";
c69fca37f338 mod_admin_telnet: Move extraction of c2s presence info into session_flags()
Kim Alvefur <zash@zash.se>
parents: 6170
diff changeset
   501
		end
c69fca37f338 mod_admin_telnet: Move extraction of c2s presence info into session_flags()
Kim Alvefur <zash@zash.se>
parents: 6170
diff changeset
   502
		line[#line+1] = status.."("..priority..")";
c69fca37f338 mod_admin_telnet: Move extraction of c2s presence info into session_flags()
Kim Alvefur <zash@zash.se>
parents: 6170
diff changeset
   503
	end
5586
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   504
	if session.cert_identity_status == "valid" then
6170
1dff425ffe84 mod_admin_telnet: Split (secure) into (authenticated) + (secure)
Kim Alvefur <zash@zash.se>
parents: 6169
diff changeset
   505
		line[#line+1] = "(authenticated)";
1dff425ffe84 mod_admin_telnet: Split (secure) into (authenticated) + (secure)
Kim Alvefur <zash@zash.se>
parents: 6169
diff changeset
   506
	end
1dff425ffe84 mod_admin_telnet: Split (secure) into (authenticated) + (secure)
Kim Alvefur <zash@zash.se>
parents: 6169
diff changeset
   507
	if session.secure then
5586
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   508
		line[#line+1] = "(encrypted)";
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   509
	end
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   510
	if session.compressed then
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   511
		line[#line+1] = "(compressed)";
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   512
	end
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   513
	if session.smacks then
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   514
		line[#line+1] = "(sm)";
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   515
	end
5662
685d46ec352b mod_admin_telnet: Simplify IPv6 detection, fixes rare traceback
Kim Alvefur <zash@zash.se>
parents: 5645
diff changeset
   516
	if session.ip and session.ip:match(":") then
5586
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   517
		line[#line+1] = "(IPv6)";
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   518
	end
6930
566e1cfcb814 mod_admin_telnet: c2s:show(): Add flag to indicate remote sessions
Matthew Wild <mwild1@gmail.com>
parents: 6841
diff changeset
   519
	if session.remote then
566e1cfcb814 mod_admin_telnet: c2s:show(): Add flag to indicate remote sessions
Matthew Wild <mwild1@gmail.com>
parents: 6841
diff changeset
   520
		line[#line+1] = "(remote)";
566e1cfcb814 mod_admin_telnet: c2s:show(): Add flag to indicate remote sessions
Matthew Wild <mwild1@gmail.com>
parents: 6841
diff changeset
   521
	end
5586
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   522
	return table.concat(line, " ");
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   523
end
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   524
6172
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   525
local function tls_info(session, line)
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   526
	line = line or {};
6173
1600438c0c14 mod_admin_telnet: Move generation of log tag for s2s:show() (adds it to c2s:show() too)
Kim Alvefur <zash@zash.se>
parents: 6172
diff changeset
   527
	common_info(session, line);
6172
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   528
	if session.secure then
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   529
		local sock = session.conn and session.conn.socket and session.conn:socket();
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   530
		if sock and sock.info then
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   531
			local info = sock:info();
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   532
			line[#line+1] = ("(%s with %s)"):format(info.protocol, info.cipher);
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   533
		else
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   534
			line[#line+1] = "(cipher info unavailable)";
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   535
		end
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   536
	else
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   537
		line[#line+1] = "(insecure)";
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   538
	end
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   539
	return table.concat(line, " ");
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   540
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   541
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   542
def_env.c2s = {};
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   543
7071
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   544
local function get_jid(session)
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   545
	if session.username then
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   546
		return session.full_jid or jid_join(session.username, session.host, session.resource);
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   547
	end
7072
eae5d2f1311d mod_admin_telnet: Show unauthenticated clients identified by local/remote IP and port
Kim Alvefur <zash@zash.se>
parents: 7071
diff changeset
   548
eae5d2f1311d mod_admin_telnet: Show unauthenticated clients identified by local/remote IP and port
Kim Alvefur <zash@zash.se>
parents: 7071
diff changeset
   549
	local conn = session.conn;
eae5d2f1311d mod_admin_telnet: Show unauthenticated clients identified by local/remote IP and port
Kim Alvefur <zash@zash.se>
parents: 7071
diff changeset
   550
	local ip = session.ip or "?";
eae5d2f1311d mod_admin_telnet: Show unauthenticated clients identified by local/remote IP and port
Kim Alvefur <zash@zash.se>
parents: 7071
diff changeset
   551
	local clientport = conn and conn:clientport() or "?";
eae5d2f1311d mod_admin_telnet: Show unauthenticated clients identified by local/remote IP and port
Kim Alvefur <zash@zash.se>
parents: 7071
diff changeset
   552
	local serverip = conn and conn.server and conn:server():ip() or "?";
eae5d2f1311d mod_admin_telnet: Show unauthenticated clients identified by local/remote IP and port
Kim Alvefur <zash@zash.se>
parents: 7071
diff changeset
   553
	local serverport = conn and conn:serverport() or "?"
eae5d2f1311d mod_admin_telnet: Show unauthenticated clients identified by local/remote IP and port
Kim Alvefur <zash@zash.se>
parents: 7071
diff changeset
   554
	return jid_join("["..ip.."]:"..clientport, session.host or "["..serverip.."]:"..serverport);
7071
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   555
end
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   556
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   557
local function show_c2s(callback)
7071
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   558
	local c2s = array.collect(values(module:shared"/*/c2s/sessions"));
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   559
	c2s:sort(function(a, b)
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   560
		if a.host == b.host then
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   561
			if a.username == b.username then
7093
7aa37d70944b mod_admin_telnet: Fix sorting of JIDs in c2s:show() family of functions (thanks lookshe and Zash)
Matthew Wild <mwild1@gmail.com>
parents: 7073
diff changeset
   562
				return (a.resource or "") > (b.resource or "");
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   563
			end
7093
7aa37d70944b mod_admin_telnet: Fix sorting of JIDs in c2s:show() family of functions (thanks lookshe and Zash)
Matthew Wild <mwild1@gmail.com>
parents: 7073
diff changeset
   564
			return (a.username or "") > (b.username or "");
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   565
		end
7093
7aa37d70944b mod_admin_telnet: Fix sorting of JIDs in c2s:show() family of functions (thanks lookshe and Zash)
Matthew Wild <mwild1@gmail.com>
parents: 7073
diff changeset
   566
		return (a.host or "") > (b.host or "");
7071
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   567
	end):map(function (session)
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   568
		callback(get_jid(session), session)
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   569
	end);
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   570
end
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   571
4779
9f2639b3d9b1 mod_admin_telnet: Add c2s:count() which shows number of connected users.
Kim Alvefur <zash@zash.se>
parents: 4684
diff changeset
   572
function def_env.c2s:count(match_jid)
7073
aab022cb8e29 mod_admin_telnet: c2s:count in less lines
Kim Alvefur <zash@zash.se>
parents: 7072
diff changeset
   573
	return true, "Total: "..  iterators.count(values(module:shared"/*/c2s/sessions")) .." clients";
4779
9f2639b3d9b1 mod_admin_telnet: Add c2s:count() which shows number of connected users.
Kim Alvefur <zash@zash.se>
parents: 4684
diff changeset
   574
end
9f2639b3d9b1 mod_admin_telnet: Add c2s:count() which shows number of connected users.
Kim Alvefur <zash@zash.se>
parents: 4684
diff changeset
   575
6174
513ea94761b2 mod_admin_telnet: Add c2s:show_tls(), behaves like s2s:show_tls()
Kim Alvefur <zash@zash.se>
parents: 6173
diff changeset
   576
function def_env.c2s:show(match_jid, annotate)
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   577
	local print, count = self.session.print, 0;
6174
513ea94761b2 mod_admin_telnet: Add c2s:show_tls(), behaves like s2s:show_tls()
Kim Alvefur <zash@zash.se>
parents: 6173
diff changeset
   578
	annotate = annotate or session_flags;
7071
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   579
	local curr_host = false;
1798
4c8f3fa9d926 mod_console: Show status and priority of clients
Matthew Wild <mwild1@gmail.com>
parents: 1616
diff changeset
   580
	show_c2s(function (jid, session)
1763
9e4ff3b66ed1 mod_console: c2s:show(): Group listed clients by host
Matthew Wild <mwild1@gmail.com>
parents: 1623
diff changeset
   581
		if curr_host ~= session.host then
9e4ff3b66ed1 mod_console: c2s:show(): Group listed clients by host
Matthew Wild <mwild1@gmail.com>
parents: 1623
diff changeset
   582
			curr_host = session.host;
7071
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   583
			print(curr_host or "(not connected to any host yet)");
1763
9e4ff3b66ed1 mod_console: c2s:show(): Group listed clients by host
Matthew Wild <mwild1@gmail.com>
parents: 1623
diff changeset
   584
		end
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   585
		if (not match_jid) or jid:match(match_jid) then
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   586
			count = count + 1;
6174
513ea94761b2 mod_admin_telnet: Add c2s:show_tls(), behaves like s2s:show_tls()
Kim Alvefur <zash@zash.se>
parents: 6173
diff changeset
   587
			print(annotate(session, { "  ", jid }));
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   588
		end
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   589
	end);
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   590
	return true, "Total: "..count.." clients";
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   591
end
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   592
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   593
function def_env.c2s:show_insecure(match_jid)
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   594
	local print, count = self.session.print, 0;
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   595
	show_c2s(function (jid, session)
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   596
		if ((not match_jid) or jid:match(match_jid)) and not session.secure then
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   597
			count = count + 1;
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   598
			print(jid);
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   599
		end
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   600
	end);
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   601
	return true, "Total: "..count.." insecure client connections";
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   602
end
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   603
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   604
function def_env.c2s:show_secure(match_jid)
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   605
	local print, count = self.session.print, 0;
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   606
	show_c2s(function (jid, session)
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   607
		if ((not match_jid) or jid:match(match_jid)) and session.secure then
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   608
			count = count + 1;
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   609
			print(jid);
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   610
		end
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   611
	end);
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   612
	return true, "Total: "..count.." secure client connections";
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   613
end
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   614
6174
513ea94761b2 mod_admin_telnet: Add c2s:show_tls(), behaves like s2s:show_tls()
Kim Alvefur <zash@zash.se>
parents: 6173
diff changeset
   615
function def_env.c2s:show_tls(match_jid)
513ea94761b2 mod_admin_telnet: Add c2s:show_tls(), behaves like s2s:show_tls()
Kim Alvefur <zash@zash.se>
parents: 6173
diff changeset
   616
	return self:show(match_jid, tls_info);
513ea94761b2 mod_admin_telnet: Add c2s:show_tls(), behaves like s2s:show_tls()
Kim Alvefur <zash@zash.se>
parents: 6173
diff changeset
   617
end
513ea94761b2 mod_admin_telnet: Add c2s:show_tls(), behaves like s2s:show_tls()
Kim Alvefur <zash@zash.se>
parents: 6173
diff changeset
   618
1491
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   619
function def_env.c2s:close(match_jid)
5028
10a69a7e4545 mod_admin_telnet: Remove unused variable
Matthew Wild <mwild1@gmail.com>
parents: 5027
diff changeset
   620
	local count = 0;
1491
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   621
	show_c2s(function (jid, session)
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   622
		if jid == match_jid or jid_bare(jid) == match_jid then
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   623
			count = count + 1;
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   624
			session:close();
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   625
		end
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   626
	end);
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   627
	return true, "Total: "..count.." sessions closed";
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   628
end
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   629
4514
ae48e0abc233 mod_admin_telnet: Commond and flexible way to show stream properties.
Kim Alvefur <zash@zash.se>
parents: 4328
diff changeset
   630
1085
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   631
def_env.s2s = {};
6172
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   632
function def_env.s2s:show(match_jid, annotate)
1085
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   633
	local print = self.session.print;
6172
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   634
	annotate = annotate or session_flags;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   635
1322
33d103b0283f mod_console: Show total incoming/outgoing s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1317
diff changeset
   636
	local count_in, count_out = 0,0;
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   637
	local s2s_list = { };
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   638
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   639
	local s2s_sessions = module:shared"/*/s2s/sessions";
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   640
	for _, session in pairs(s2s_sessions) do
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   641
		local remotehost, localhost, direction;
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   642
		if session.direction == "outgoing" then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   643
			direction = "->";
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   644
			count_out = count_out + 1;
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   645
			remotehost, localhost = session.to_host or "?", session.from_host or "?";
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   646
		else
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   647
			direction = "<-";
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   648
			count_in = count_in + 1;
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   649
			remotehost, localhost = session.from_host or "?", session.to_host or "?";
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   650
		end
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   651
		local sess_lines = { l = localhost, r = remotehost,
6173
1600438c0c14 mod_admin_telnet: Move generation of log tag for s2s:show() (adds it to c2s:show() too)
Kim Alvefur <zash@zash.se>
parents: 6172
diff changeset
   652
			annotate(session, { "", direction, remotehost or "?" })};
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   653
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   654
		if (not match_jid) or remotehost:match(match_jid) or localhost:match(match_jid) then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   655
			table.insert(s2s_list, sess_lines);
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   656
			local print = function (s) table.insert(sess_lines, "        "..s); end
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   657
			if session.sendq then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   658
				print("There are "..#session.sendq.." queued outgoing stanzas for this connection");
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   659
			end
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   660
			if session.type == "s2sout_unauthed" then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   661
				if session.connecting then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   662
					print("Connection not yet established");
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   663
					if not session.srv_hosts then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   664
						if not session.conn then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   665
							print("We do not yet have a DNS answer for this host's SRV records");
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   666
						else
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   667
							print("This host has no SRV records, using A record instead");
1085
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   668
						end
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   669
					elseif session.srv_choice then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   670
						print("We are on SRV record "..session.srv_choice.." of "..#session.srv_hosts);
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   671
						local srv_choice = session.srv_hosts[session.srv_choice];
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   672
						print("Using "..(srv_choice.target or ".")..":"..(srv_choice.port or 5269));
1085
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   673
					end
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   674
				elseif session.notopen then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   675
					print("The <stream> has not yet been opened");
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   676
				elseif not session.dialback_key then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   677
					print("Dialback has not been initiated yet");
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   678
				elseif session.dialback_key then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   679
					print("Dialback has been requested, but no result received");
1085
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   680
				end
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   681
			end
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   682
			if session.type == "s2sin_unauthed" then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   683
				print("Connection not yet authenticated");
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   684
			elseif session.type == "s2sin" then
1085
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   685
				for name in pairs(session.hosts) do
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   686
					if name ~= session.from_host then
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   687
						print("also hosts "..tostring(name));
1085
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   688
					end
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   689
				end
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   690
			end
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   691
		end
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   692
	end
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   693
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   694
	-- Sort by local host, then remote host
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   695
	table.sort(s2s_list, function(a,b)
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   696
		if a.l == b.l then return a.r < b.r; end
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   697
		return a.l < b.l;
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   698
	end);
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   699
	local lasthost;
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   700
	for _, sess_lines in ipairs(s2s_list) do
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   701
		if sess_lines.l ~= lasthost then print(sess_lines.l); lasthost=sess_lines.l end
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   702
		for _, line in ipairs(sess_lines) do print(line); end
1085
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   703
	end
1322
33d103b0283f mod_console: Show total incoming/outgoing s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1317
diff changeset
   704
	return true, "Total: "..count_out.." outgoing, "..count_in.." incoming connections";
1085
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   705
end
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   706
6172
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   707
function def_env.s2s:show_tls(match_jid)
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   708
	return self:show(match_jid, tls_info);
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   709
end
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   710
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   711
local function print_subject(print, subject)
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   712
	for _, entry in ipairs(subject) do
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   713
		print(
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   714
			("    %s: %q"):format(
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   715
				entry.name or entry.oid,
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   716
				entry.value:gsub("[\r\n%z%c]", " ")
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   717
			)
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   718
		);
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   719
	end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   720
end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   721
4328
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   722
-- As much as it pains me to use the 0-based depths that OpenSSL does,
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   723
-- I think there's going to be more confusion among operators if we
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   724
-- break from that.
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   725
local function print_errors(print, errors)
5769
f6ea5b3739c9 mod_admin_telnet, mod_s2s: Fix reporting of certificate chain validation details
Kim Alvefur <zash@zash.se>
parents: 5672
diff changeset
   726
	for depth, t in pairs(errors) do
4328
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   727
		print(
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   728
			("    %d: %s"):format(
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   729
				depth-1,
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   730
				table.concat(t, "\n|        ")
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   731
			)
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   732
		);
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   733
	end
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   734
end
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   735
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   736
function def_env.s2s:showcert(domain)
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   737
	local print = self.session.print;
5706
896094da72e4 mod_admin_telnet: Refactor s2s:showcert()
Kim Alvefur <zash@zash.se>
parents: 5674
diff changeset
   738
	local s2s_sessions = module:shared"/*/s2s/sessions";
896094da72e4 mod_admin_telnet: Refactor s2s:showcert()
Kim Alvefur <zash@zash.se>
parents: 5674
diff changeset
   739
	local domain_sessions = set.new(array.collect(values(s2s_sessions)))
896094da72e4 mod_admin_telnet: Refactor s2s:showcert()
Kim Alvefur <zash@zash.se>
parents: 5674
diff changeset
   740
		/function(session) return (session.to_host == domain or session.from_host == domain) and session or nil; end;
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   741
	local cert_set = {};
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   742
	for session in domain_sessions do
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   743
		local conn = session.conn;
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   744
		conn = conn and conn:socket();
4328
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   745
		if not conn.getpeerchain then
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   746
			if conn.dohandshake then
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   747
				error("This version of LuaSec does not support certificate viewing");
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   748
			end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   749
		else
5596
73fea1a87afd mod_admin_telnet: Don't rely on getpeerchain returning an empty list
Kim Alvefur <zash@zash.se>
parents: 5567
diff changeset
   750
			local cert = conn:getpeercertificate();
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   751
			if cert then
5596
73fea1a87afd mod_admin_telnet: Don't rely on getpeerchain returning an empty list
Kim Alvefur <zash@zash.se>
parents: 5567
diff changeset
   752
				local certs = conn:getpeerchain();
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   753
				local digest = cert:digest("sha1");
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   754
				if not cert_set[digest] then
4328
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   755
					local chain_valid, chain_errors = conn:getpeerverification();
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   756
					cert_set[digest] = {
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   757
						{
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   758
						  from = session.from_host,
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   759
						  to = session.to_host,
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   760
						  direction = session.direction
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   761
						};
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   762
						chain_valid = chain_valid;
4328
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   763
						chain_errors = chain_errors;
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   764
						certs = certs;
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   765
					};
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   766
				else
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   767
					table.insert(cert_set[digest], {
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   768
						from = session.from_host,
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   769
						to = session.to_host,
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   770
						direction = session.direction
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   771
					});
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   772
				end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   773
			end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   774
		end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   775
	end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   776
	local domain_certs = array.collect(values(cert_set));
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   777
	-- Phew. We now have a array of unique certificates presented by domain.
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   778
	local n_certs = #domain_certs;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   779
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   780
	if n_certs == 0 then
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   781
		return "No certificates found for "..domain;
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   782
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   783
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   784
	local function _capitalize_and_colon(byte)
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   785
		return string.upper(byte)..":";
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   786
	end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   787
	local function pretty_fingerprint(hash)
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   788
		return hash:gsub("..", _capitalize_and_colon):sub(1, -2);
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   789
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   790
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   791
	for cert_info in values(domain_certs) do
4328
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   792
		local certs = cert_info.certs;
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   793
		local cert = certs[1];
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   794
		print("---")
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   795
		print("Fingerprint (SHA1): "..pretty_fingerprint(cert:digest("sha1")));
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   796
		print("");
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   797
		local n_streams = #cert_info;
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   798
		print("Currently used on "..n_streams.." stream"..(n_streams==1 and "" or "s")..":");
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   799
		for _, stream in ipairs(cert_info) do
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   800
			if stream.direction == "incoming" then
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   801
				print("    "..stream.to.." <- "..stream.from);
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   802
			else
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   803
				print("    "..stream.from.." -> "..stream.to);
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   804
			end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   805
		end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   806
		print("");
4328
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   807
		local chain_valid, errors = cert_info.chain_valid, cert_info.chain_errors;
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   808
		local valid_identity = cert_verify_identity(domain, "xmpp-server", cert);
4328
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   809
		if chain_valid then
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   810
			print("Trusted certificate: Yes");
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   811
		else
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   812
			print("Trusted certificate: No");
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   813
			print_errors(print, errors);
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   814
		end
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   815
		print("");
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   816
		print("Issuer: ");
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   817
		print_subject(print, cert:issuer());
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   818
		print("");
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   819
		print("Valid for "..domain..": "..(valid_identity and "Yes" or "No"));
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   820
		print("Subject:");
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   821
		print_subject(print, cert:subject());
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   822
	end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   823
	print("---");
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   824
	return ("Showing "..n_certs.." certificate"
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   825
		..(n_certs==1 and "" or "s")
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   826
		.." presented by "..domain..".");
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   827
end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   828
1340
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   829
function def_env.s2s:close(from, to)
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   830
	local print, count = self.session.print, 0;
5708
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   831
	local s2s_sessions = module:shared"/*/s2s/sessions";
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   832
5708
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   833
	local match_id;
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   834
	if from and not to then
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   835
		match_id, from = from;
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   836
	elseif not to then
1340
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   837
		return false, "Syntax: s2s:close('from', 'to') - Closes all s2s sessions from 'from' to 'to'";
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   838
	elseif from == to then
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   839
		return false, "Both from and to are the same... you can't do that :)";
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   840
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   841
5708
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   842
	for _, session in pairs(s2s_sessions) do
5709
5557b4a4cb49 mod_admin_telnet: Generate session names the same way as in s2smanager
Kim Alvefur <zash@zash.se>
parents: 5708
diff changeset
   843
		local id = session.type..tostring(session):match("[a-f0-9]+$");
5708
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   844
		if (match_id and match_id == id)
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   845
		or (session.from_host == from and session.to_host == to) then
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   846
			print(("Closing connection from %s to %s [%s]"):format(session.from_host, session.to_host, id));
1821
05ed826da89b mod_console: s2s:close: Use session:close() if that exists, otherwise just destroy the session
Matthew Wild <mwild1@gmail.com>
parents: 1798
diff changeset
   847
			(session.close or s2smanager.destroy_session)(session);
5708
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   848
			count = count + 1 ;
1340
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   849
		end
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   850
	end
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   851
	return true, "Closed "..count.." s2s session"..((count == 1 and "") or "s");
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   852
end
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   853
4978
0b9e86302de4 mod_admin_telnet: add s2s:closeall command and relative help entry.
Marco Cirillo <maranda@lightwitch.org>
parents: 4913
diff changeset
   854
function def_env.s2s:closeall(host)
6841
229e95aecf41 mod_admin_telnet: Fix indentation
Kim Alvefur <zash@zash.se>
parents: 6784
diff changeset
   855
	local count = 0;
5708
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   856
	local s2s_sessions = module:shared"/*/s2s/sessions";
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   857
	for _,session in pairs(s2s_sessions) do
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   858
		if not host or session.from_host == host or session.to_host == host then
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   859
			session:close();
6841
229e95aecf41 mod_admin_telnet: Fix indentation
Kim Alvefur <zash@zash.se>
parents: 6784
diff changeset
   860
			count = count + 1;
4978
0b9e86302de4 mod_admin_telnet: add s2s:closeall command and relative help entry.
Marco Cirillo <maranda@lightwitch.org>
parents: 4913
diff changeset
   861
		end
6841
229e95aecf41 mod_admin_telnet: Fix indentation
Kim Alvefur <zash@zash.se>
parents: 6784
diff changeset
   862
	end
4978
0b9e86302de4 mod_admin_telnet: add s2s:closeall command and relative help entry.
Marco Cirillo <maranda@lightwitch.org>
parents: 4913
diff changeset
   863
	if count == 0 then return false, "No sessions to close.";
0b9e86302de4 mod_admin_telnet: add s2s:closeall command and relative help entry.
Marco Cirillo <maranda@lightwitch.org>
parents: 4913
diff changeset
   864
	else return true, "Closed "..count.." s2s session"..((count == 1 and "") or "s"); end
0b9e86302de4 mod_admin_telnet: add s2s:closeall command and relative help entry.
Marco Cirillo <maranda@lightwitch.org>
parents: 4913
diff changeset
   865
end
0b9e86302de4 mod_admin_telnet: add s2s:closeall command and relative help entry.
Marco Cirillo <maranda@lightwitch.org>
parents: 4913
diff changeset
   866
1977
325a49f8edab mod_console: Add commands host:activate(host, config) and host:deactivate(host, reason) to add/remove hosts at runtime
Matthew Wild <mwild1@gmail.com>
parents: 1927
diff changeset
   867
def_env.host = {}; def_env.hosts = def_env.host;
3840
abcbce5e4240 mod_console: Removed redundant code for host:activate() and host:deactivate(), now that hostmanager has error checking.
Waqas Hussain <waqas20@gmail.com>
parents: 3614
diff changeset
   868
1977
325a49f8edab mod_console: Add commands host:activate(host, config) and host:deactivate(host, reason) to add/remove hosts at runtime
Matthew Wild <mwild1@gmail.com>
parents: 1927
diff changeset
   869
function def_env.host:activate(hostname, config)
3840
abcbce5e4240 mod_console: Removed redundant code for host:activate() and host:deactivate(), now that hostmanager has error checking.
Waqas Hussain <waqas20@gmail.com>
parents: 3614
diff changeset
   870
	return hostmanager.activate(hostname, config);
1977
325a49f8edab mod_console: Add commands host:activate(host, config) and host:deactivate(host, reason) to add/remove hosts at runtime
Matthew Wild <mwild1@gmail.com>
parents: 1927
diff changeset
   871
end
325a49f8edab mod_console: Add commands host:activate(host, config) and host:deactivate(host, reason) to add/remove hosts at runtime
Matthew Wild <mwild1@gmail.com>
parents: 1927
diff changeset
   872
function def_env.host:deactivate(hostname, reason)
3840
abcbce5e4240 mod_console: Removed redundant code for host:activate() and host:deactivate(), now that hostmanager has error checking.
Waqas Hussain <waqas20@gmail.com>
parents: 3614
diff changeset
   873
	return hostmanager.deactivate(hostname, reason);
1977
325a49f8edab mod_console: Add commands host:activate(host, config) and host:deactivate(host, reason) to add/remove hosts at runtime
Matthew Wild <mwild1@gmail.com>
parents: 1927
diff changeset
   874
end
325a49f8edab mod_console: Add commands host:activate(host, config) and host:deactivate(host, reason) to add/remove hosts at runtime
Matthew Wild <mwild1@gmail.com>
parents: 1927
diff changeset
   875
2007
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
   876
function def_env.host:list()
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
   877
	local print = self.session.print;
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
   878
	local i = 0;
6175
50ddaec11f2a mod_admin_telnet: Show which hosts are components and what type of component in host:list()
Kim Alvefur <zash@zash.se>
parents: 6174
diff changeset
   879
	local type;
9333
36badabc85ce mod_admin_telnet: Make use of util.iterators.sorted_pairs()
Matthew Wild <mwild1@gmail.com>
parents: 9012
diff changeset
   880
	for host, host_session in it.sorted_pairs(prosody.hosts) do
2007
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
   881
		i = i + 1;
9333
36badabc85ce mod_admin_telnet: Make use of util.iterators.sorted_pairs()
Matthew Wild <mwild1@gmail.com>
parents: 9012
diff changeset
   882
		type = host_session.type;
6175
50ddaec11f2a mod_admin_telnet: Show which hosts are components and what type of component in host:list()
Kim Alvefur <zash@zash.se>
parents: 6174
diff changeset
   883
		if type == "local" then
50ddaec11f2a mod_admin_telnet: Show which hosts are components and what type of component in host:list()
Kim Alvefur <zash@zash.se>
parents: 6174
diff changeset
   884
			print(host);
50ddaec11f2a mod_admin_telnet: Show which hosts are components and what type of component in host:list()
Kim Alvefur <zash@zash.se>
parents: 6174
diff changeset
   885
		else
50ddaec11f2a mod_admin_telnet: Show which hosts are components and what type of component in host:list()
Kim Alvefur <zash@zash.se>
parents: 6174
diff changeset
   886
			type = module:context(host):get_option_string("component_module", type);
50ddaec11f2a mod_admin_telnet: Show which hosts are components and what type of component in host:list()
Kim Alvefur <zash@zash.se>
parents: 6174
diff changeset
   887
			if type ~= "component" then
50ddaec11f2a mod_admin_telnet: Show which hosts are components and what type of component in host:list()
Kim Alvefur <zash@zash.se>
parents: 6174
diff changeset
   888
				type = type .. " component";
50ddaec11f2a mod_admin_telnet: Show which hosts are components and what type of component in host:list()
Kim Alvefur <zash@zash.se>
parents: 6174
diff changeset
   889
			end
50ddaec11f2a mod_admin_telnet: Show which hosts are components and what type of component in host:list()
Kim Alvefur <zash@zash.se>
parents: 6174
diff changeset
   890
			print(("%s (%s)"):format(host, type));
50ddaec11f2a mod_admin_telnet: Show which hosts are components and what type of component in host:list()
Kim Alvefur <zash@zash.se>
parents: 6174
diff changeset
   891
		end
2007
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
   892
	end
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
   893
	return true, i.." hosts";
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
   894
end
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
   895
4674
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   896
def_env.port = {};
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   897
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   898
function def_env.port:list()
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   899
	local print = self.session.print;
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   900
	local services = portmanager.get_active_services().data;
9333
36badabc85ce mod_admin_telnet: Make use of util.iterators.sorted_pairs()
Matthew Wild <mwild1@gmail.com>
parents: 9012
diff changeset
   901
	local n_services, n_ports = 0, 0;
36badabc85ce mod_admin_telnet: Make use of util.iterators.sorted_pairs()
Matthew Wild <mwild1@gmail.com>
parents: 9012
diff changeset
   902
	for service, interfaces in it.sorted_pairs(services) do
36badabc85ce mod_admin_telnet: Make use of util.iterators.sorted_pairs()
Matthew Wild <mwild1@gmail.com>
parents: 9012
diff changeset
   903
		n_services = n_services + 1;
4674
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   904
		local ports_list = {};
9333
36badabc85ce mod_admin_telnet: Make use of util.iterators.sorted_pairs()
Matthew Wild <mwild1@gmail.com>
parents: 9012
diff changeset
   905
		for interface, ports in pairs(interfaces) do
4674
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   906
			for port in pairs(ports) do
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   907
				table.insert(ports_list, "["..interface.."]:"..port);
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   908
			end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   909
		end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   910
		n_ports = n_ports + #ports_list;
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   911
		print(service..": "..table.concat(ports_list, ", "));
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   912
	end
9333
36badabc85ce mod_admin_telnet: Make use of util.iterators.sorted_pairs()
Matthew Wild <mwild1@gmail.com>
parents: 9012
diff changeset
   913
	return true, n_services.." services listening on "..n_ports.." ports";
4674
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   914
end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   915
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   916
function def_env.port:close(close_port, close_interface)
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   917
	close_port = assert(tonumber(close_port), "Invalid port number");
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   918
	local n_closed = 0;
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   919
	local services = portmanager.get_active_services().data;
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   920
	for service, interfaces in pairs(services) do
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   921
		for interface, ports in pairs(interfaces) do
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   922
			if not close_interface or close_interface == interface then
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   923
				if ports[close_port] then
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   924
					self.session.print("Closing ["..interface.."]:"..close_port.."...");
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   925
					local ok, err = portmanager.close(interface, close_port)
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   926
					if not ok then
5029
7bcd79631492 mod_admin_telnet: Fix usage of incorrect variable
Matthew Wild <mwild1@gmail.com>
parents: 5028
diff changeset
   927
						self.session.print("Failed to close "..interface.." "..close_port..": "..err);
4674
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   928
					else
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   929
						n_closed = n_closed + 1;
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   930
					end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   931
				end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   932
			end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   933
		end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   934
	end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   935
	return true, "Closed "..n_closed.." ports";
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   936
end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   937
4807
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   938
def_env.muc = {};
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   939
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   940
local console_room_mt = {
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   941
	__index = function (self, k) return self.room[k]; end;
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   942
	__tostring = function (self)
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   943
		return "MUC room <"..self.room.jid..">";
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   944
	end;
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   945
};
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   946
5520
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
   947
local function check_muc(jid)
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
   948
	local room_name, host = jid_split(jid);
4807
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   949
	if not hosts[host] then
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   950
		return nil, "No such host: "..host;
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   951
	elseif not hosts[host].modules.muc then
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   952
		return nil, "Host '"..host.."' is not a MUC service";
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   953
	end
5520
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
   954
	return room_name, host;
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
   955
end
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
   956
8879
9e72e63819dc console: Allow passing a config when creating a room
Kim Alvefur <zash@zash.se>
parents: 8594
diff changeset
   957
function def_env.muc:create(room_jid, config)
7474
3631d259bb85 mod_admin_telnet: rename variable to make it defined (room -> room_name)
Anton Shestakov <av6@dwimlabs.net>
parents: 7093
diff changeset
   958
	local room_name, host = check_muc(room_jid);
6064
c4a3222165c4 mod_admin_telnet: muc:*: Fix nil index error when a room JID is passed with a non-existent host
Matthew Wild <mwild1@gmail.com>
parents: 6016
diff changeset
   959
	if not room_name then
c4a3222165c4 mod_admin_telnet: muc:*: Fix nil index error when a room JID is passed with a non-existent host
Matthew Wild <mwild1@gmail.com>
parents: 6016
diff changeset
   960
		return room_name, host;
c4a3222165c4 mod_admin_telnet: muc:*: Fix nil index error when a room JID is passed with a non-existent host
Matthew Wild <mwild1@gmail.com>
parents: 6016
diff changeset
   961
	end
7474
3631d259bb85 mod_admin_telnet: rename variable to make it defined (room -> room_name)
Anton Shestakov <av6@dwimlabs.net>
parents: 7093
diff changeset
   962
	if not room_name then return nil, host end
8879
9e72e63819dc console: Allow passing a config when creating a room
Kim Alvefur <zash@zash.se>
parents: 8594
diff changeset
   963
	if config ~= nil and type(config) ~= "table" then return nil, "Config must be a table"; end
7643
279f348e9a92 mod_admin_telnet: Fix to use modern way to fetch a MUC room
Kim Alvefur <zash@zash.se>
parents: 7480
diff changeset
   964
	if hosts[host].modules.muc.get_room_from_jid(room_jid) then return nil, "Room exists already" end
8879
9e72e63819dc console: Allow passing a config when creating a room
Kim Alvefur <zash@zash.se>
parents: 8594
diff changeset
   965
	return hosts[host].modules.muc.create_room(room_jid, config);
5520
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
   966
end
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
   967
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
   968
function def_env.muc:room(room_jid)
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
   969
	local room_name, host = check_muc(room_jid);
6064
c4a3222165c4 mod_admin_telnet: muc:*: Fix nil index error when a room JID is passed with a non-existent host
Matthew Wild <mwild1@gmail.com>
parents: 6016
diff changeset
   970
	if not room_name then
c4a3222165c4 mod_admin_telnet: muc:*: Fix nil index error when a room JID is passed with a non-existent host
Matthew Wild <mwild1@gmail.com>
parents: 6016
diff changeset
   971
		return room_name, host;
c4a3222165c4 mod_admin_telnet: muc:*: Fix nil index error when a room JID is passed with a non-existent host
Matthew Wild <mwild1@gmail.com>
parents: 6016
diff changeset
   972
	end
6270
ee2d5b2a263d mod_admin_telnet: Update muc:room(jid) and muc:list(host) to use the new MUC API
Waqas Hussain <waqas20@gmail.com>
parents: 6260
diff changeset
   973
	local room_obj = hosts[host].modules.muc.get_room_from_jid(room_jid);
4807
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   974
	if not room_obj then
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   975
		return nil, "No such room: "..room_jid;
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   976
	end
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   977
	return setmetatable({ room = room_obj }, console_room_mt);
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   978
end
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   979
6260
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
   980
function def_env.muc:list(host)
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
   981
	local host_session = hosts[host];
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
   982
	if not host_session or not host_session.modules.muc then
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
   983
		return nil, "Please supply the address of a local MUC component";
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
   984
	end
6536
5da544e97bea mod_admin_telnet: Use the session-specific print function
Kim Alvefur <zash@zash.se>
parents: 6506
diff changeset
   985
	local print = self.session.print;
6260
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
   986
	local c = 0;
6270
ee2d5b2a263d mod_admin_telnet: Update muc:room(jid) and muc:list(host) to use the new MUC API
Waqas Hussain <waqas20@gmail.com>
parents: 6260
diff changeset
   987
	for room in host_session.modules.muc.each_room() do
ee2d5b2a263d mod_admin_telnet: Update muc:room(jid) and muc:list(host) to use the new MUC API
Waqas Hussain <waqas20@gmail.com>
parents: 6260
diff changeset
   988
		print(room.jid);
6260
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
   989
		c = c + 1;
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
   990
	end
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
   991
	return true, c.." rooms";
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
   992
end
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
   993
5006
af7e563cf453 mod_admin_telnet: Add missing import of usermanager
Kim Alvefur <zash@zash.se>
parents: 5005
diff changeset
   994
local um = require"core.usermanager";
af7e563cf453 mod_admin_telnet: Add missing import of usermanager
Kim Alvefur <zash@zash.se>
parents: 5005
diff changeset
   995
4973
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
   996
def_env.user = {};
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
   997
function def_env.user:create(jid, password)
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
   998
	local username, host = jid_split(jid);
5598
3bb8aefd8ce0 mod_admin_telnet: Verify that the host exists in user commands (Thanks SkyBlue)
Kim Alvefur <zash@zash.se>
parents: 5596
diff changeset
   999
	if not hosts[host] then
3bb8aefd8ce0 mod_admin_telnet: Verify that the host exists in user commands (Thanks SkyBlue)
Kim Alvefur <zash@zash.se>
parents: 5596
diff changeset
  1000
		return nil, "No such host: "..host;
3bb8aefd8ce0 mod_admin_telnet: Verify that the host exists in user commands (Thanks SkyBlue)
Kim Alvefur <zash@zash.se>
parents: 5596
diff changeset
  1001
	elseif um.user_exists(username, host) then
5128
834ab74585ec mod_admin_telnet: Fix user:*, correct names, docs, do validation
Kim Alvefur <zash@zash.se>
parents: 5030
diff changeset
  1002
		return nil, "User exists";
834ab74585ec mod_admin_telnet: Fix user:*, correct names, docs, do validation
Kim Alvefur <zash@zash.se>
parents: 5030
diff changeset
  1003
	end
4973
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1004
	local ok, err = um.create_user(username, password, host);
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1005
	if ok then
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1006
		return true, "User created";
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1007
	else
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1008
		return nil, "Could not create user: "..err;
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1009
	end
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1010
end
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1011
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1012
function def_env.user:delete(jid)
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1013
	local username, host = jid_split(jid);
5598
3bb8aefd8ce0 mod_admin_telnet: Verify that the host exists in user commands (Thanks SkyBlue)
Kim Alvefur <zash@zash.se>
parents: 5596
diff changeset
  1014
	if not hosts[host] then
3bb8aefd8ce0 mod_admin_telnet: Verify that the host exists in user commands (Thanks SkyBlue)
Kim Alvefur <zash@zash.se>
parents: 5596
diff changeset
  1015
		return nil, "No such host: "..host;
5643
e612e1887e39 mod_admin_telnet: Fix inverted boolean logic
Kim Alvefur <zash@zash.se>
parents: 5630
diff changeset
  1016
	elseif not um.user_exists(username, host) then
5128
834ab74585ec mod_admin_telnet: Fix user:*, correct names, docs, do validation
Kim Alvefur <zash@zash.se>
parents: 5030
diff changeset
  1017
		return nil, "No such user";
834ab74585ec mod_admin_telnet: Fix user:*, correct names, docs, do validation
Kim Alvefur <zash@zash.se>
parents: 5030
diff changeset
  1018
	end
4973
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1019
	local ok, err = um.delete_user(username, host);
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1020
	if ok then
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1021
		return true, "User deleted";
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1022
	else
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1023
		return nil, "Could not delete user: "..err;
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1024
	end
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1025
end
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1026
5128
834ab74585ec mod_admin_telnet: Fix user:*, correct names, docs, do validation
Kim Alvefur <zash@zash.se>
parents: 5030
diff changeset
  1027
function def_env.user:password(jid, password)
4973
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1028
	local username, host = jid_split(jid);
5598
3bb8aefd8ce0 mod_admin_telnet: Verify that the host exists in user commands (Thanks SkyBlue)
Kim Alvefur <zash@zash.se>
parents: 5596
diff changeset
  1029
	if not hosts[host] then
3bb8aefd8ce0 mod_admin_telnet: Verify that the host exists in user commands (Thanks SkyBlue)
Kim Alvefur <zash@zash.se>
parents: 5596
diff changeset
  1030
		return nil, "No such host: "..host;
5665
da1881e1b35b mod_admin_telnet: Fix another wrong boolean expression
Kim Alvefur <zash@zash.se>
parents: 5643
diff changeset
  1031
	elseif not um.user_exists(username, host) then
5128
834ab74585ec mod_admin_telnet: Fix user:*, correct names, docs, do validation
Kim Alvefur <zash@zash.se>
parents: 5030
diff changeset
  1032
		return nil, "No such user";
834ab74585ec mod_admin_telnet: Fix user:*, correct names, docs, do validation
Kim Alvefur <zash@zash.se>
parents: 5030
diff changeset
  1033
	end
8195
4354f556c5db core.usermanager, various modules: Disconnect other resources on password change (thanks waqas) (fixes #512)
Kim Alvefur <zash@zash.se>
parents: 8129
diff changeset
  1034
	local ok, err = um.set_password(username, password, host, nil);
4973
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1035
	if ok then
5128
834ab74585ec mod_admin_telnet: Fix user:*, correct names, docs, do validation
Kim Alvefur <zash@zash.se>
parents: 5030
diff changeset
  1036
		return true, "User password changed";
4973
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1037
	else
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1038
		return nil, "Could not change password for user: "..err;
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1039
	end
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1040
end
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1041
5168
46fc0eff10b4 mod_admin_telnet: user:list(): Allow filtering the set of users
Kim Alvefur <zash@zash.se>
parents: 5167
diff changeset
  1042
function def_env.user:list(host, pat)
5158
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1043
	if not host then
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1044
		return nil, "No host given";
5167
ecd9e300ec94 mod_admin_telnet: user:list() check that the given host exists
Kim Alvefur <zash@zash.se>
parents: 5159
diff changeset
  1045
	elseif not hosts[host] then
ecd9e300ec94 mod_admin_telnet: user:list() check that the given host exists
Kim Alvefur <zash@zash.se>
parents: 5159
diff changeset
  1046
		return nil, "No such host";
5158
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1047
	end
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1048
	local print = self.session.print;
5227
97f395938028 mod_admin_telnet: Improve wording when listing users
Kim Alvefur <zash@zash.se>
parents: 5186
diff changeset
  1049
	local total, matches = 0, 0;
5158
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1050
	for user in um.users(host) do
5168
46fc0eff10b4 mod_admin_telnet: user:list(): Allow filtering the set of users
Kim Alvefur <zash@zash.se>
parents: 5167
diff changeset
  1051
		if not pat or user:match(pat) then
46fc0eff10b4 mod_admin_telnet: user:list(): Allow filtering the set of users
Kim Alvefur <zash@zash.se>
parents: 5167
diff changeset
  1052
			print(user.."@"..host);
5227
97f395938028 mod_admin_telnet: Improve wording when listing users
Kim Alvefur <zash@zash.se>
parents: 5186
diff changeset
  1053
			matches = matches + 1;
5168
46fc0eff10b4 mod_admin_telnet: user:list(): Allow filtering the set of users
Kim Alvefur <zash@zash.se>
parents: 5167
diff changeset
  1054
		end
5227
97f395938028 mod_admin_telnet: Improve wording when listing users
Kim Alvefur <zash@zash.se>
parents: 5186
diff changeset
  1055
		total = total + 1;
5158
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1056
	end
5227
97f395938028 mod_admin_telnet: Improve wording when listing users
Kim Alvefur <zash@zash.se>
parents: 5186
diff changeset
  1057
	return true, "Showing "..(pat and (matches.." of ") or "all " )..total.." users";
5158
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1058
end
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1059
5011
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1060
def_env.xmpp = {};
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1061
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1062
local st = require "util.stanza";
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1063
function def_env.xmpp:ping(localhost, remotehost)
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1064
	if hosts[localhost] then
7725
82333dfdfaff mod_admin_telnet: Use the module:send() API for xmpp:ping command
Kim Alvefur <zash@zash.se>
parents: 7477
diff changeset
  1065
		module:send(st.iq{ from=localhost, to=remotehost, type="get", id="ping" }
82333dfdfaff mod_admin_telnet: Use the module:send() API for xmpp:ping command
Kim Alvefur <zash@zash.se>
parents: 7477
diff changeset
  1066
				:tag("ping", {xmlns="urn:xmpp:ping"}), hosts[localhost]);
5011
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1067
		return true, "Sent ping";
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1068
	else
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1069
		return nil, "No such host";
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1070
	end
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1071
end
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1072
5567
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1073
def_env.dns = {};
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1074
local adns = require"net.adns";
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1075
local dns = require"net.dns";
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1076
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1077
function def_env.dns:lookup(name, typ, class)
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1078
	local ret = "Query sent";
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1079
	local print = self.session.print;
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1080
	local function handler(...)
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1081
		ret = "Got response";
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1082
		print(...);
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1083
	end
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1084
	adns.lookup(handler, name, typ, class);
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1085
	return true, ret;
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1086
end
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1087
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1088
function def_env.dns:addnameserver(...)
6311
f44876548487 mod_admin_telnet: Fix dns:(add,set)nameservers()
Kim Alvefur <zash@zash.se>
parents: 6064
diff changeset
  1089
	dns._resolver:addnameserver(...)
5567
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1090
	return true
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1091
end
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1092
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1093
function def_env.dns:setnameserver(...)
6311
f44876548487 mod_admin_telnet: Fix dns:(add,set)nameservers()
Kim Alvefur <zash@zash.se>
parents: 6064
diff changeset
  1094
	dns._resolver:setnameserver(...)
5567
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1095
	return true
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1096
end
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1097
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1098
function def_env.dns:purge()
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1099
	dns.purge()
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1100
	return true
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1101
end
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1102
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1103
function def_env.dns:cache()
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1104
	return true, "Cache:\n"..tostring(dns.cache())
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1105
end
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1106
7032
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1107
def_env.http = {};
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1108
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1109
function def_env.http:list()
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1110
	local print = self.session.print;
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1111
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1112
	for host in pairs(prosody.hosts) do
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1113
		local http_apps = modulemanager.get_items("http-provider", host);
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1114
		if #http_apps > 0 then
7980
01d6298de991 plugins/various: Use type-specific config API
Kim Alvefur <zash@zash.se>
parents: 7914
diff changeset
  1115
			local http_host = module:context(host):get_option_string("http_host");
7032
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1116
			print("HTTP endpoints on "..host..(http_host and (" (using "..http_host.."):") or ":"));
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1117
			for _, provider in ipairs(http_apps) do
8592
4e475ef4b569 mod_admin_telnet: Include the default path property in URL calculation (fixes #1099)
Kim Alvefur <zash@zash.se>
parents: 7032
diff changeset
  1118
				local url = module:context(host):http_url(provider.name, provider.default_path);
7032
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1119
				print("", url);
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1120
			end
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1121
			print("");
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1122
		end
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1123
	end
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1124
7980
01d6298de991 plugins/various: Use type-specific config API
Kim Alvefur <zash@zash.se>
parents: 7914
diff changeset
  1125
	local default_host = module:get_option_string("http_default_host");
7032
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1126
	if not default_host then
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1127
		print("HTTP requests to unknown hosts will return 404 Not Found");
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1128
	else
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1129
		print("HTTP requests to unknown hosts will be handled by "..default_host);
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1130
	end
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1131
	return true;
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1132
end
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1133
8924
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1134
def_env.debug = {};
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1135
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1136
function def_env.debug:logevents(host)
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1137
	helpers.log_host_events(host);
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1138
	return true;
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1139
end
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1140
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1141
function def_env.debug:events(host, event)
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1142
	local events_obj;
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1143
	if host and host ~= "*" then
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1144
		if not hosts[host] then
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1145
			return false, "Unknown host: "..host;
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1146
		end
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1147
		events_obj = hosts[host].events;
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1148
	else
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1149
		events_obj = prosody.events;
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1150
	end
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1151
	return true, helpers.show_events(events_obj, event);
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1152
end
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1153
9012
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1154
function def_env.debug:timers(filter)
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1155
	local socket = require "socket";
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1156
	local print = self.session.print;
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1157
	local add_task = require"util.timer".add_task;
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1158
	local h, params = add_task.h, add_task.params;
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1159
	if h then
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1160
		print("-- util.timer");
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1161
		for i, id in ipairs(h.ids) do
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1162
			if not params[id] then
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1163
				print(os.date("%F %T", h.priorities[i]), h.items[id]);
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1164
			elseif not params[id].callback then
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1165
				print(os.date("%F %T", h.priorities[i]), h.items[id], unpack(params[id]));
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1166
			else
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1167
				print(os.date("%F %T", h.priorities[i]), params[id].callback, unpack(params[id]));
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1168
			end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1169
		end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1170
	end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1171
	if server.event_base then
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1172
		local count = 0;
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1173
		for k, v in pairs(debug.getregistry()) do
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1174
			if type(v) == "function" and v.callback and v.callback == add_task._on_timer then
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1175
				count = count + 1;
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1176
			end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1177
		end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1178
		print(count .. " libevent callbacks");
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1179
	end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1180
	if h then
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1181
		local next_time = h:peek();
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1182
		if next_time then
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1183
			return true, os.date("Next event at %F %T (in %%.6fs)", next_time):format(next_time - socket.gettime());
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1184
		end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1185
	end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1186
	return true;
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1187
end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1188
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1189
-- COMPAT: debug:timers() was timer:info() for some time in trunk
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1190
def_env.timer = { info = def_env.debug.timers };
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1191
7914
e528d848a185 mod_admin_telnet: Print a message to open sessions when shutting down, including the reason
Kim Alvefur <zash@zash.se>
parents: 7725
diff changeset
  1192
module:hook("server-stopping", function(event)
e528d848a185 mod_admin_telnet: Print a message to open sessions when shutting down, including the reason
Kim Alvefur <zash@zash.se>
parents: 7725
diff changeset
  1193
	for conn, session in pairs(sessions) do
e528d848a185 mod_admin_telnet: Print a message to open sessions when shutting down, including the reason
Kim Alvefur <zash@zash.se>
parents: 7725
diff changeset
  1194
		session.print("Shutting down: "..(event.reason or "unknown reason"));
e528d848a185 mod_admin_telnet: Print a message to open sessions when shutting down, including the reason
Kim Alvefur <zash@zash.se>
parents: 7725
diff changeset
  1195
	end
e528d848a185 mod_admin_telnet: Print a message to open sessions when shutting down, including the reason
Kim Alvefur <zash@zash.se>
parents: 7725
diff changeset
  1196
end);
e528d848a185 mod_admin_telnet: Print a message to open sessions when shutting down, including the reason
Kim Alvefur <zash@zash.se>
parents: 7725
diff changeset
  1197
8967
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1198
def_env.stats = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1199
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1200
local function format_stat(type, value, ref_value)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1201
	ref_value = ref_value or value;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1202
	--do return tostring(value) end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1203
	if type == "duration" then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1204
		if ref_value < 0.001 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1205
			return ("%d µs"):format(value*1000000);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1206
		elseif ref_value < 0.9 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1207
			return ("%0.2f ms"):format(value*1000);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1208
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1209
		return ("%0.2f"):format(value);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1210
	elseif type == "size" then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1211
		if ref_value > 1048576 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1212
			return ("%d MB"):format(value/1048576);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1213
		elseif ref_value > 1024 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1214
			return ("%d KB"):format(value/1024);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1215
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1216
		return ("%d bytes"):format(value);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1217
	elseif type == "rate" then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1218
		if ref_value < 0.9 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1219
			return ("%0.2f/min"):format(value*60);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1220
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1221
		return ("%0.2f/sec"):format(value);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1222
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1223
	return tostring(value);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1224
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1225
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1226
local stats_methods = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1227
function stats_methods:bounds(_lower, _upper)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1228
	local statistics = require "util.statistics";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1229
	for _, stat_info in ipairs(self) do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1230
		local data = stat_info[4];
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1231
		if data then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1232
			local lower = _lower or data.min;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1233
			local upper = _upper or data.max;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1234
			local new_data = {
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1235
				min = lower;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1236
				max = upper;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1237
				samples = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1238
				sample_count = 0;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1239
				count = data.count;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1240
				units = data.units;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1241
			};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1242
			local sum = 0;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1243
			for i, v in ipairs(data.samples) do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1244
				if v > upper then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1245
					break;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1246
				elseif v>=lower then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1247
					table.insert(new_data.samples, v);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1248
					sum = sum + v;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1249
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1250
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1251
			new_data.sample_count = #new_data.samples;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1252
			stat_info[4] = new_data;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1253
			stat_info[3] = sum/new_data.sample_count;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1254
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1255
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1256
	return self;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1257
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1258
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1259
function stats_methods:trim(lower, upper)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1260
	upper = upper or (100-lower);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1261
	local statistics = require "util.statistics";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1262
	for _, stat_info in ipairs(self) do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1263
		-- Strip outliers
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1264
		local data = stat_info[4];
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1265
		if data then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1266
			local new_data = {
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1267
				min = statistics.get_percentile(data, lower);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1268
				max = statistics.get_percentile(data, upper);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1269
				samples = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1270
				sample_count = 0;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1271
				count = data.count;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1272
				units = data.units;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1273
			};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1274
			local sum = 0;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1275
			for i, v in ipairs(data.samples) do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1276
				if v > new_data.max then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1277
					break;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1278
				elseif v>=new_data.min then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1279
					table.insert(new_data.samples, v);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1280
					sum = sum + v;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1281
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1282
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1283
			new_data.sample_count = #new_data.samples;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1284
			stat_info[4] = new_data;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1285
			stat_info[3] = sum/new_data.sample_count;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1286
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1287
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1288
	return self;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1289
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1290
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1291
function stats_methods:max(upper)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1292
	return self:bounds(nil, upper);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1293
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1294
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1295
function stats_methods:min(lower)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1296
	return self:bounds(lower, nil);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1297
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1298
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1299
function stats_methods:summary()
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1300
	local statistics = require "util.statistics";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1301
	for _, stat_info in ipairs(self) do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1302
		local name, type, value, data = stat_info[1], stat_info[2], stat_info[3], stat_info[4];
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1303
		if data and data.samples then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1304
			table.insert(stat_info.output, string.format("Count: %d (%d captured)",
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1305
				data.count,
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1306
				data.sample_count
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1307
			));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1308
			table.insert(stat_info.output, string.format("Min: %s  Mean: %s  Max: %s",
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1309
				format_stat(type, data.min),
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1310
				format_stat(type, value),
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1311
				format_stat(type, data.max)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1312
			));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1313
			table.insert(stat_info.output, string.format("Q1: %s  Median: %s  Q3: %s",
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1314
				format_stat(type, statistics.get_percentile(data, 25)),
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1315
				format_stat(type, statistics.get_percentile(data, 50)),
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1316
				format_stat(type, statistics.get_percentile(data, 75))
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1317
			));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1318
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1319
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1320
	return self;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1321
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1322
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1323
function stats_methods:cfgraph()
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1324
	for _, stat_info in ipairs(self) do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1325
		local name, type, value, data = unpack(stat_info, 1, 4);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1326
		local function print(s)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1327
			table.insert(stat_info.output, s);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1328
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1329
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1330
		if data and data.sample_count > 0 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1331
			local raw_histogram = require "util.statistics".get_histogram(data);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1332
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1333
			local graph_width, graph_height = 50, 10;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1334
			local eighth_chars = "   ▁▂▃▄▅▆▇█";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1335
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1336
			local range = data.max - data.min;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1337
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1338
			if range > 0 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1339
				local x_scaling = #raw_histogram/graph_width;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1340
				local histogram = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1341
				for i = 1, graph_width do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1342
					histogram[i] = math.max(raw_histogram[i*x_scaling-1] or 0, raw_histogram[i*x_scaling] or 0);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1343
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1344
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1345
				print("");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1346
				print(("_"):rep(52)..format_stat(type, data.max));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1347
				for row = graph_height, 1, -1 do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1348
					local row_chars = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1349
					local min_eighths, max_eighths = 8, 0;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1350
					for i = 1, #histogram do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1351
						local char_eighths = math.ceil(math.max(math.min((graph_height/(data.max/histogram[i]))-(row-1), 1), 0)*8);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1352
						if char_eighths < min_eighths then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1353
							min_eighths = char_eighths;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1354
						end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1355
						if char_eighths > max_eighths then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1356
							max_eighths = char_eighths;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1357
						end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1358
						if char_eighths == 0 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1359
							row_chars[i] = "-";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1360
						else
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1361
							local char = eighth_chars:sub(char_eighths*3+1, char_eighths*3+3);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1362
							row_chars[i] = char;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1363
						end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1364
					end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1365
					print(table.concat(row_chars).."|-"..format_stat(type, data.max/(graph_height/(row-0.5))));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1366
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1367
				print(("\\    "):rep(11));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1368
				local x_labels = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1369
				for i = 1, 11 do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1370
					local s = ("%-4s"):format((i-1)*10);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1371
					if #s > 4 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1372
						s = s:sub(1, 3).."…";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1373
					end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1374
					x_labels[i] = s;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1375
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1376
				print(" "..table.concat(x_labels, " "));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1377
				local units = "%";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1378
				local margin = math.floor((graph_width-#units)/2);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1379
				print((" "):rep(margin)..units);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1380
			else
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1381
				print("[range too small to graph]");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1382
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1383
			print("");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1384
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1385
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1386
	return self;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1387
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1388
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1389
function stats_methods:histogram()
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1390
	for _, stat_info in ipairs(self) do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1391
		local name, type, value, data = unpack(stat_info, 1, 4);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1392
		local function print(s)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1393
			table.insert(stat_info.output, s);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1394
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1395
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1396
		if not data then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1397
			print("[no data]");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1398
			return self;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1399
		elseif not data.sample_count then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1400
			print("[not a sampled metric type]");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1401
			return self;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1402
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1403
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1404
		local raw_histogram = require "util.statistics".get_histogram(data);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1405
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1406
		local graph_width, graph_height = 50, 10;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1407
		local eighth_chars = "   ▁▂▃▄▅▆▇█";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1408
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1409
		local range = data.max - data.min;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1410
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1411
		if range > 0 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1412
			local n_buckets = graph_width;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1413
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1414
			local histogram = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1415
			for i = 1, n_buckets do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1416
				histogram[i] = 0;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1417
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1418
			local max_bin_samples = 0;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1419
			for i, d in ipairs(data.samples) do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1420
				local bucket = math.floor(1+(n_buckets-1)/(range/(d-data.min)));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1421
				histogram[bucket] = histogram[bucket] + 1;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1422
				if histogram[bucket] > max_bin_samples then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1423
					max_bin_samples = histogram[bucket];
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1424
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1425
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1426
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1427
			print("");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1428
			print(("_"):rep(52)..max_bin_samples);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1429
			for row = graph_height, 1, -1 do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1430
				local row_chars = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1431
				local min_eighths, max_eighths = 8, 0;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1432
				for i = 1, #histogram do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1433
					local char_eighths = math.ceil(math.max(math.min((graph_height/(max_bin_samples/histogram[i]))-(row-1), 1), 0)*8);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1434
					if char_eighths < min_eighths then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1435
						min_eighths = char_eighths;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1436
					end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1437
					if char_eighths > max_eighths then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1438
						max_eighths = char_eighths;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1439
					end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1440
					if char_eighths == 0 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1441
						row_chars[i] = "-";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1442
					else
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1443
						local char = eighth_chars:sub(char_eighths*3+1, char_eighths*3+3);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1444
						row_chars[i] = char;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1445
					end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1446
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1447
				print(table.concat(row_chars).."|-"..math.ceil((max_bin_samples/graph_height)*(row-0.5)));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1448
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1449
			print(("\\    "):rep(11));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1450
			local x_labels = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1451
			for i = 1, 11 do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1452
				local s = ("%-4s"):format(format_stat(type, data.min+range*i/11, data.min):match("^%S+"));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1453
				if #s > 4 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1454
					s = s:sub(1, 3).."…";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1455
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1456
				x_labels[i] = s;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1457
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1458
			print(" "..table.concat(x_labels, " "));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1459
			local units = format_stat(type, data.min):match("%s+(.+)$") or data.units or "";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1460
			local margin = math.floor((graph_width-#units)/2);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1461
			print((" "):rep(margin)..units);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1462
		else
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1463
			print("[range too small to graph]");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1464
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1465
		print("");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1466
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1467
	return self;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1468
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1469
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1470
local function stats_tostring(stats)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1471
	local print = stats.session.print;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1472
	for _, stat_info in ipairs(stats) do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1473
		if #stat_info.output > 0 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1474
			print("\n#"..stat_info[1]);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1475
			print("");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1476
			for i, v in ipairs(stat_info.output) do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1477
				print(v);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1478
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1479
			print("");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1480
		else
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1481
			print(("%-50s %s"):format(stat_info[1], format_stat(stat_info[2], stat_info[3])));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1482
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1483
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1484
	return #stats.." statistics displayed";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1485
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1486
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1487
local function new_stats_context(self)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1488
	return setmetatable({ session = self.session, stats = true }, {__index = stats_methods, __tostring = stats_tostring });
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1489
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1490
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1491
function def_env.stats:show(filter)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1492
	local print = self.session.print;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1493
	local stats, changed, extra = require "core.statsmanager".get_stats();
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1494
	local available, displayed = 0, 0;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1495
	local displayed_stats = new_stats_context(self);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1496
	for name, value in pairs(stats) do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1497
		available = available + 1;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1498
		if not filter or name:match(filter) then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1499
			displayed = displayed + 1;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1500
			local type = name:match(":(%a+)$");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1501
			table.insert(displayed_stats, {
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1502
				name, type, value, extra[name];
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1503
				output = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1504
			});
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1505
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1506
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1507
	return displayed_stats;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1508
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1509
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1510
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1511
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1512
-------------
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1513
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1514
function printbanner(session)
7070
4c0ec9bd5168 mod_admin_telnet: Remove compat warning about 'console_banner' as a function
Kim Alvefur <zash@zash.se>
parents: 7034
diff changeset
  1515
	local option = module:get_option_string("console_banner", "full");
4c0ec9bd5168 mod_admin_telnet: Remove compat warning about 'console_banner' as a function
Kim Alvefur <zash@zash.se>
parents: 7034
diff changeset
  1516
	if option == "full" or option == "graphic" then
5026
c86a14414922 mod_admin_telnet: Fix broken indentation
Matthew Wild <mwild1@gmail.com>
parents: 5025
diff changeset
  1517
		session.print [[
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
  1518
                   ____                \   /     _
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
  1519
                    |  _ \ _ __ ___  ___  _-_   __| |_   _
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1520
                    | |_) | '__/ _ \/ __|/ _ \ / _` | | | |
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1521
                    |  __/| | | (_) \__ \ |_| | (_| | |_| |
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1522
                    |_|   |_|  \___/|___/\___/ \__,_|\__, |
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
  1523
                    A study in simplicity            |___/
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1524
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1525
]]
5026
c86a14414922 mod_admin_telnet: Fix broken indentation
Matthew Wild <mwild1@gmail.com>
parents: 5025
diff changeset
  1526
	end
7070
4c0ec9bd5168 mod_admin_telnet: Remove compat warning about 'console_banner' as a function
Kim Alvefur <zash@zash.se>
parents: 7034
diff changeset
  1527
	if option == "short" or option == "full" then
5026
c86a14414922 mod_admin_telnet: Fix broken indentation
Matthew Wild <mwild1@gmail.com>
parents: 5025
diff changeset
  1528
	session.print("Welcome to the Prosody administration console. For a list of commands, type: help");
c86a14414922 mod_admin_telnet: Fix broken indentation
Matthew Wild <mwild1@gmail.com>
parents: 5025
diff changeset
  1529
	session.print("You may find more help on using this console in our online documentation at ");
7362
a5a080c12c96 Update every link to the documentation to use HTTPS
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 7094
diff changeset
  1530
	session.print("https://prosody.im/doc/console\n");
1483
efd19cdda6ca mod_console: Allow customisation/suppression of the banner
Matthew Wild <mwild1@gmail.com>
parents: 1433
diff changeset
  1531
	end
7070
4c0ec9bd5168 mod_admin_telnet: Remove compat warning about 'console_banner' as a function
Kim Alvefur <zash@zash.se>
parents: 7034
diff changeset
  1532
	if option ~= "short" and option ~= "full" and option ~= "graphic" then
4c0ec9bd5168 mod_admin_telnet: Remove compat warning about 'console_banner' as a function
Kim Alvefur <zash@zash.se>
parents: 7034
diff changeset
  1533
		session.print(option);
5026
c86a14414922 mod_admin_telnet: Fix broken indentation
Matthew Wild <mwild1@gmail.com>
parents: 5025
diff changeset
  1534
	end
1483
efd19cdda6ca mod_console: Allow customisation/suppression of the banner
Matthew Wild <mwild1@gmail.com>
parents: 1433
diff changeset
  1535
end
2087
5efd79871205 mod_console: Moved activation of the console port from the main file to mod_console.
Waqas Hussain <waqas20@gmail.com>
parents: 2054
diff changeset
  1536
5120
bcabea740c00 mod_{admin_telnet,c2s,component,http,net_multiplex,s2s}: Use module:provides() instead of module:add_item().
Waqas Hussain <waqas20@gmail.com>
parents: 5030
diff changeset
  1537
module:provides("net", {
4674
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1538
	name = "console";
4550
1c41e4a846a2 mod_admin_telnet: Port to portmanager
Matthew Wild <mwild1@gmail.com>
parents: 4540
diff changeset
  1539
	listener = console_listener;
1c41e4a846a2 mod_admin_telnet: Port to portmanager
Matthew Wild <mwild1@gmail.com>
parents: 4540
diff changeset
  1540
	default_port = 5582;
4571
32d532b95dc7 mod_admin_telnet: make service private.
Marco Cirillo <maranda@lightwitch.org>
parents: 4550
diff changeset
  1541
	private = true;
4550
1c41e4a846a2 mod_admin_telnet: Port to portmanager
Matthew Wild <mwild1@gmail.com>
parents: 4540
diff changeset
  1542
});