Mercurial > prosody-hg
annotate plugins/mod_admin_shell.lua @ 13076:f4e33d17eaa8
mod_tls: Drop request for client certificates on outgoing connections
It is the other end who should request client certificates for these
connections, we only need to send ours. Hopefully this was treated as a
noop, so probably no harm in keeping it. But hey, spring cleaning? :)
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Wed, 19 Apr 2023 11:14:11 +0200 |
| parents | 7fcf41b541e0 |
| children | e7a5e5a0dc02 |
| rev | line source |
|---|---|
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 -- Prosody IM |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 -- |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 -- COPYING file in the source package for more information. |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 -- |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 -- luacheck: ignore 212/self |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 module:set_global(); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 module:depends("admin_socket"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 |
|
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
13 local hostmanager = require "prosody.core.hostmanager"; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
14 local modulemanager = require "prosody.core.modulemanager"; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
15 local s2smanager = require "prosody.core.s2smanager"; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
16 local portmanager = require "prosody.core.portmanager"; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
17 local helpers = require "prosody.util.helpers"; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
18 local server = require "prosody.net.server"; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
19 local st = require "prosody.util.stanza"; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 local _G = _G; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 local prosody = _G.prosody; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 |
|
12589
39ae08180c81
compat: Remove handling of Lua 5.1 location of 'unpack' function
Kim Alvefur <zash@zash.se>
parents:
12551
diff
changeset
|
25 local unpack = table.unpack; |
|
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
26 local iterators = require "prosody.util.iterators"; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 local keys, values = iterators.keys, iterators.values; |
|
13013
430333198e4c
mod_admin_shell: Allow matching on host or bare JID in c2s:show
Kim Alvefur <zash@zash.se>
parents:
12993
diff
changeset
|
28 local jid_bare, jid_split, jid_join, jid_resource, jid_compare = import("prosody.util.jid", "bare", "prepped_split", "join", "resource", "compare"); |
|
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
29 local set, array = require "prosody.util.set", require "prosody.util.array"; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
30 local cert_verify_identity = require "prosody.util.x509".verify_identity; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
31 local envload = require "prosody.util.envload".envload; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
32 local envloadfile = require "prosody.util.envload".envloadfile; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
33 local has_pposix, pposix = pcall(require, "prosody.util.pposix"); |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
34 local async = require "prosody.util.async"; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
35 local serialization = require "prosody.util.serialization"; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 local serialize_config = serialization.new ({ fatal = false, unquoted = true}); |
|
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
37 local time = require "prosody.util.time"; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
38 local promise = require "prosody.util.promise"; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
39 local logger = require "prosody.util.logger"; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 |
|
11523
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
41 local t_insert = table.insert; |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
42 local t_concat = table.concat; |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
43 |
|
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
44 local format_number = require "prosody.util.human.units".format; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
45 local format_table = require "prosody.util.human.io".table; |
|
10887
3debe04a6162
mod_admin_shell: Format stats with util.human.units
Kim Alvefur <zash@zash.se>
parents:
10878
diff
changeset
|
46 |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
47 local function capitalize(s) |
|
11892
e712133b4de1
util.human.io: Pass nil to cell mapper to signal missing value
Kim Alvefur <zash@zash.se>
parents:
11891
diff
changeset
|
48 if not s then return end |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
49 return (s:gsub("^%a", string.upper):gsub("_", " ")); |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
50 end |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
51 |
|
11931
c65d5da8e99a
mod_admin_shell: List collected metrics in module:info
Kim Alvefur <zash@zash.se>
parents:
11930
diff
changeset
|
52 local function pre(prefix, str, alt) |
|
12505
604bb5b8362d
mod_admin_shell: Tighten up type checks to fix #1754 (thanks clouded)
Kim Alvefur <zash@zash.se>
parents:
12304
diff
changeset
|
53 if type(str) ~= "string" or str == "" then return alt or ""; end |
|
11931
c65d5da8e99a
mod_admin_shell: List collected metrics in module:info
Kim Alvefur <zash@zash.se>
parents:
11930
diff
changeset
|
54 return prefix .. str; |
|
c65d5da8e99a
mod_admin_shell: List collected metrics in module:info
Kim Alvefur <zash@zash.se>
parents:
11930
diff
changeset
|
55 end |
|
c65d5da8e99a
mod_admin_shell: List collected metrics in module:info
Kim Alvefur <zash@zash.se>
parents:
11930
diff
changeset
|
56 |
|
c65d5da8e99a
mod_admin_shell: List collected metrics in module:info
Kim Alvefur <zash@zash.se>
parents:
11930
diff
changeset
|
57 local function suf(str, suffix, alt) |
|
12505
604bb5b8362d
mod_admin_shell: Tighten up type checks to fix #1754 (thanks clouded)
Kim Alvefur <zash@zash.se>
parents:
12304
diff
changeset
|
58 if type(str) ~= "string" or str == "" then return alt or ""; end |
|
11931
c65d5da8e99a
mod_admin_shell: List collected metrics in module:info
Kim Alvefur <zash@zash.se>
parents:
11930
diff
changeset
|
59 return str .. suffix; |
|
c65d5da8e99a
mod_admin_shell: List collected metrics in module:info
Kim Alvefur <zash@zash.se>
parents:
11930
diff
changeset
|
60 end |
|
c65d5da8e99a
mod_admin_shell: List collected metrics in module:info
Kim Alvefur <zash@zash.se>
parents:
11930
diff
changeset
|
61 |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 local commands = module:shared("commands") |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 local def_env = module:shared("env"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 local default_env_mt = { __index = def_env }; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 local function redirect_output(target, session) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 local env = setmetatable({ print = session.print }, { __index = function (_, k) return rawget(target, k); end }); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 env.dofile = function(name) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 local f, err = envloadfile(name, env); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 if not f then return f, err; end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 return f(); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 end; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 return env; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 console = {}; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 local runner_callbacks = {}; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 function runner_callbacks:error(err) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
81 module:log("error", "Traceback[shell]: %s", err); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
83 self.data.print("Fatal error while running command, it did not complete"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 self.data.print("Error: "..tostring(err)); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
85 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 |
|
12397
ddf02f2a3354
mod_admin_shell: Add session.write() method to write data to client with no \n
Matthew Wild <mwild1@gmail.com>
parents:
12304
diff
changeset
|
87 local function send_repl_output(session, line, attr) |
|
ddf02f2a3354
mod_admin_shell: Add session.write() method to write data to client with no \n
Matthew Wild <mwild1@gmail.com>
parents:
12304
diff
changeset
|
88 return session.send(st.stanza("repl-output", attr):text(tostring(line))); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
90 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
91 function console:new_session(admin_session) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
92 local session = { |
|
11950
d2a9e95fd27b
mod_admin_shell: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
11949
diff
changeset
|
93 send = function (t) |
|
d2a9e95fd27b
mod_admin_shell: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
11949
diff
changeset
|
94 return send_repl_output(admin_session, t); |
|
d2a9e95fd27b
mod_admin_shell: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
11949
diff
changeset
|
95 end; |
|
d2a9e95fd27b
mod_admin_shell: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
11949
diff
changeset
|
96 print = function (...) |
|
d2a9e95fd27b
mod_admin_shell: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
11949
diff
changeset
|
97 local t = {}; |
|
d2a9e95fd27b
mod_admin_shell: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
11949
diff
changeset
|
98 for i=1,select("#", ...) do |
|
d2a9e95fd27b
mod_admin_shell: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
11949
diff
changeset
|
99 t[i] = tostring(select(i, ...)); |
|
d2a9e95fd27b
mod_admin_shell: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
11949
diff
changeset
|
100 end |
|
d2a9e95fd27b
mod_admin_shell: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
11949
diff
changeset
|
101 return send_repl_output(admin_session, table.concat(t, "\t")); |
|
d2a9e95fd27b
mod_admin_shell: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
11949
diff
changeset
|
102 end; |
|
12397
ddf02f2a3354
mod_admin_shell: Add session.write() method to write data to client with no \n
Matthew Wild <mwild1@gmail.com>
parents:
12304
diff
changeset
|
103 write = function (t) |
|
ddf02f2a3354
mod_admin_shell: Add session.write() method to write data to client with no \n
Matthew Wild <mwild1@gmail.com>
parents:
12304
diff
changeset
|
104 return send_repl_output(admin_session, t, { eol = "0" }); |
|
ddf02f2a3354
mod_admin_shell: Add session.write() method to write data to client with no \n
Matthew Wild <mwild1@gmail.com>
parents:
12304
diff
changeset
|
105 end; |
|
11950
d2a9e95fd27b
mod_admin_shell: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
11949
diff
changeset
|
106 serialize = tostring; |
|
d2a9e95fd27b
mod_admin_shell: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
11949
diff
changeset
|
107 disconnect = function () admin_session:close(); end; |
|
12398
478fff93ac37
mod_admin_shell: Add session.is_connected() method
Matthew Wild <mwild1@gmail.com>
parents:
12397
diff
changeset
|
108 is_connected = function () |
|
478fff93ac37
mod_admin_shell: Add session.is_connected() method
Matthew Wild <mwild1@gmail.com>
parents:
12397
diff
changeset
|
109 return not not admin_session.conn; |
|
478fff93ac37
mod_admin_shell: Add session.is_connected() method
Matthew Wild <mwild1@gmail.com>
parents:
12397
diff
changeset
|
110 end |
|
11950
d2a9e95fd27b
mod_admin_shell: Fix indentation
Kim Alvefur <zash@zash.se>
parents:
11949
diff
changeset
|
111 }; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
112 session.env = setmetatable({}, default_env_mt); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
113 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
114 session.thread = async.runner(function (line) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
115 console:process_line(session, line); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
116 end, runner_callbacks, session); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
117 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
118 -- Load up environment with helper objects |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
119 for name, t in pairs(def_env) do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
120 if type(t) == "table" then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
121 session.env[name] = setmetatable({ session = session }, { __index = t }); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
122 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
123 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
124 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
125 session.env.output:configure(); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
126 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
127 return session; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
128 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
129 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
130 local function handle_line(event) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
131 local session = event.origin.shell_session; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
132 if not session then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
133 session = console:new_session(event.origin); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
134 event.origin.shell_session = session; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
135 end |
|
12529
7dae6d29b71d
prosodyctl shell: Communicate width of terminal to mod_admin_shell
Kim Alvefur <zash@zash.se>
parents:
12506
diff
changeset
|
136 |
|
7dae6d29b71d
prosodyctl shell: Communicate width of terminal to mod_admin_shell
Kim Alvefur <zash@zash.se>
parents:
12506
diff
changeset
|
137 local default_width = 132; -- The common default of 80 is a bit too narrow for e.g. s2s:show(), 132 was another common width for hardware terminals |
|
7dae6d29b71d
prosodyctl shell: Communicate width of terminal to mod_admin_shell
Kim Alvefur <zash@zash.se>
parents:
12506
diff
changeset
|
138 local margin = 2; -- To account for '| ' when lines are printed |
|
7dae6d29b71d
prosodyctl shell: Communicate width of terminal to mod_admin_shell
Kim Alvefur <zash@zash.se>
parents:
12506
diff
changeset
|
139 session.width = (tonumber(event.stanza.attr.width) or default_width)-margin; |
|
7dae6d29b71d
prosodyctl shell: Communicate width of terminal to mod_admin_shell
Kim Alvefur <zash@zash.se>
parents:
12506
diff
changeset
|
140 |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
141 local line = event.stanza:get_text(); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
142 local useglobalenv; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
143 |
|
10859
8de0057b4279
mod_admin_shell, mod_admin_telnet, util.prosodyctl.shell: Separate output from final result
Matthew Wild <mwild1@gmail.com>
parents:
10856
diff
changeset
|
144 local result = st.stanza("repl-result"); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
145 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
146 if line:match("^>") then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
147 line = line:gsub("^>", ""); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
148 useglobalenv = true; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
149 else |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
150 local command = line:match("^%w+") or line:match("%p"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
151 if commands[command] then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
152 commands[command](session, line); |
|
10859
8de0057b4279
mod_admin_shell, mod_admin_telnet, util.prosodyctl.shell: Separate output from final result
Matthew Wild <mwild1@gmail.com>
parents:
10856
diff
changeset
|
153 event.origin.send(result); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
154 return; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
155 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
156 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
157 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
158 session.env._ = line; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
159 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
160 if not useglobalenv and commands[line:lower()] then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
161 commands[line:lower()](session, line); |
|
10859
8de0057b4279
mod_admin_shell, mod_admin_telnet, util.prosodyctl.shell: Separate output from final result
Matthew Wild <mwild1@gmail.com>
parents:
10856
diff
changeset
|
162 event.origin.send(result); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
163 return; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
164 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
165 |
|
11736
ddb87df3de30
mod_admin_shell: Keep unrestricted environment for session lifetime
Kim Alvefur <zash@zash.se>
parents:
11607
diff
changeset
|
166 if useglobalenv and not session.globalenv then |
|
ddb87df3de30
mod_admin_shell: Keep unrestricted environment for session lifetime
Kim Alvefur <zash@zash.se>
parents:
11607
diff
changeset
|
167 session.globalenv = redirect_output(_G, session); |
|
ddb87df3de30
mod_admin_shell: Keep unrestricted environment for session lifetime
Kim Alvefur <zash@zash.se>
parents:
11607
diff
changeset
|
168 end |
|
ddb87df3de30
mod_admin_shell: Keep unrestricted environment for session lifetime
Kim Alvefur <zash@zash.se>
parents:
11607
diff
changeset
|
169 |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
170 local chunkname = "=console"; |
|
11736
ddb87df3de30
mod_admin_shell: Keep unrestricted environment for session lifetime
Kim Alvefur <zash@zash.se>
parents:
11607
diff
changeset
|
171 local env = (useglobalenv and session.globalenv) or session.env or nil |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
172 -- luacheck: ignore 311/err |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
173 local chunk, err = envload("return "..line, chunkname, env); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
174 if not chunk then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
175 chunk, err = envload(line, chunkname, env); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
176 if not chunk then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
177 err = err:gsub("^%[string .-%]:%d+: ", ""); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
178 err = err:gsub("^:%d+: ", ""); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
179 err = err:gsub("'<eof>'", "the end of the line"); |
|
10859
8de0057b4279
mod_admin_shell, mod_admin_telnet, util.prosodyctl.shell: Separate output from final result
Matthew Wild <mwild1@gmail.com>
parents:
10856
diff
changeset
|
180 result.attr.type = "error"; |
|
8de0057b4279
mod_admin_shell, mod_admin_telnet, util.prosodyctl.shell: Separate output from final result
Matthew Wild <mwild1@gmail.com>
parents:
10856
diff
changeset
|
181 result:text("Sorry, I couldn't understand that... "..err); |
|
8de0057b4279
mod_admin_shell, mod_admin_telnet, util.prosodyctl.shell: Separate output from final result
Matthew Wild <mwild1@gmail.com>
parents:
10856
diff
changeset
|
182 event.origin.send(result); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
183 return; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
184 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
185 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
186 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
187 local taskok, message = chunk(); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
188 |
|
11949
ae4bc56f18e0
mod_admin_shell: Wait for promises
Kim Alvefur <zash@zash.se>
parents:
11946
diff
changeset
|
189 if promise.is_promise(taskok) then |
|
ae4bc56f18e0
mod_admin_shell: Wait for promises
Kim Alvefur <zash@zash.se>
parents:
11946
diff
changeset
|
190 taskok, message = async.wait_for(taskok); |
|
ae4bc56f18e0
mod_admin_shell: Wait for promises
Kim Alvefur <zash@zash.se>
parents:
11946
diff
changeset
|
191 end |
|
ae4bc56f18e0
mod_admin_shell: Wait for promises
Kim Alvefur <zash@zash.se>
parents:
11946
diff
changeset
|
192 |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
193 if not message then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
194 if type(taskok) ~= "string" and useglobalenv then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
195 taskok = session.serialize(taskok); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
196 end |
|
10859
8de0057b4279
mod_admin_shell, mod_admin_telnet, util.prosodyctl.shell: Separate output from final result
Matthew Wild <mwild1@gmail.com>
parents:
10856
diff
changeset
|
197 result:text("Result: "..tostring(taskok)); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
198 elseif (not taskok) and message then |
|
10859
8de0057b4279
mod_admin_shell, mod_admin_telnet, util.prosodyctl.shell: Separate output from final result
Matthew Wild <mwild1@gmail.com>
parents:
10856
diff
changeset
|
199 result.attr.type = "error"; |
|
8de0057b4279
mod_admin_shell, mod_admin_telnet, util.prosodyctl.shell: Separate output from final result
Matthew Wild <mwild1@gmail.com>
parents:
10856
diff
changeset
|
200 result:text("Error: "..tostring(message)); |
|
8de0057b4279
mod_admin_shell, mod_admin_telnet, util.prosodyctl.shell: Separate output from final result
Matthew Wild <mwild1@gmail.com>
parents:
10856
diff
changeset
|
201 else |
|
8de0057b4279
mod_admin_shell, mod_admin_telnet, util.prosodyctl.shell: Separate output from final result
Matthew Wild <mwild1@gmail.com>
parents:
10856
diff
changeset
|
202 result:text("OK: "..tostring(message)); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
203 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
204 |
|
10859
8de0057b4279
mod_admin_shell, mod_admin_telnet, util.prosodyctl.shell: Separate output from final result
Matthew Wild <mwild1@gmail.com>
parents:
10856
diff
changeset
|
205 event.origin.send(result); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
206 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
207 |
|
10859
8de0057b4279
mod_admin_shell, mod_admin_telnet, util.prosodyctl.shell: Separate output from final result
Matthew Wild <mwild1@gmail.com>
parents:
10856
diff
changeset
|
208 module:hook("admin/repl-input", function (event) |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
209 local ok, err = pcall(handle_line, event); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
210 if not ok then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
211 event.origin.send(st.stanza("repl-result", { type = "error" }):text(err)); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
212 end |
|
12887
68df46926c26
mod_admin_socket: Return error on unhandled input to prevent apparent freeze
Kim Alvefur <zash@zash.se>
parents:
12788
diff
changeset
|
213 return true; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
214 end); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
215 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
216 -- Console commands -- |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
217 -- These are simple commands, not valid standalone in Lua |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
218 |
|
12224
2b348d65cd69
mod_admin_shell: Add help section about customizing table columns
Kim Alvefur <zash@zash.se>
parents:
12209
diff
changeset
|
219 local available_columns; --forward declaration so it is reachable from the help |
|
2b348d65cd69
mod_admin_shell: Add help section about customizing table columns
Kim Alvefur <zash@zash.se>
parents:
12209
diff
changeset
|
220 |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
221 function commands.help(session, data) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
222 local print = session.print; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
223 local section = data:match("^help (%w+)"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
224 if not section then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
225 print [[Commands are divided into multiple sections. For help on a particular section, ]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
226 print [[type: help SECTION (for example, 'help c2s'). Sections are: ]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
227 print [[]] |
|
12529
7dae6d29b71d
prosodyctl shell: Communicate width of terminal to mod_admin_shell
Kim Alvefur <zash@zash.se>
parents:
12506
diff
changeset
|
228 local row = format_table({ { title = "Section", width = 7 }, { title = "Description", width = "100%" } }, session.width) |
|
12304
8210c2a52e9c
mod_admin_shell: Use a table to show help sections
Kim Alvefur <zash@zash.se>
parents:
12293
diff
changeset
|
229 print(row()) |
|
8210c2a52e9c
mod_admin_shell: Use a table to show help sections
Kim Alvefur <zash@zash.se>
parents:
12293
diff
changeset
|
230 print(row { "c2s"; "Commands to manage local client-to-server sessions" }) |
|
8210c2a52e9c
mod_admin_shell: Use a table to show help sections
Kim Alvefur <zash@zash.se>
parents:
12293
diff
changeset
|
231 print(row { "s2s"; "Commands to manage sessions between this server and others" }) |
|
8210c2a52e9c
mod_admin_shell: Use a table to show help sections
Kim Alvefur <zash@zash.se>
parents:
12293
diff
changeset
|
232 print(row { "http"; "Commands to inspect HTTP services" }) -- XXX plural but there is only one so far |
|
8210c2a52e9c
mod_admin_shell: Use a table to show help sections
Kim Alvefur <zash@zash.se>
parents:
12293
diff
changeset
|
233 print(row { "module"; "Commands to load/reload/unload modules/plugins" }) |
|
8210c2a52e9c
mod_admin_shell: Use a table to show help sections
Kim Alvefur <zash@zash.se>
parents:
12293
diff
changeset
|
234 print(row { "host"; "Commands to activate, deactivate and list virtual hosts" }) |
|
8210c2a52e9c
mod_admin_shell: Use a table to show help sections
Kim Alvefur <zash@zash.se>
parents:
12293
diff
changeset
|
235 print(row { "user"; "Commands to create and delete users, and change their passwords" }) |
|
8210c2a52e9c
mod_admin_shell: Use a table to show help sections
Kim Alvefur <zash@zash.se>
parents:
12293
diff
changeset
|
236 print(row { "roles"; "Show information about user roles" }) |
|
8210c2a52e9c
mod_admin_shell: Use a table to show help sections
Kim Alvefur <zash@zash.se>
parents:
12293
diff
changeset
|
237 print(row { "muc"; "Commands to create, list and manage chat rooms" }) |
|
8210c2a52e9c
mod_admin_shell: Use a table to show help sections
Kim Alvefur <zash@zash.se>
parents:
12293
diff
changeset
|
238 print(row { "stats"; "Commands to show internal statistics" }) |
|
8210c2a52e9c
mod_admin_shell: Use a table to show help sections
Kim Alvefur <zash@zash.se>
parents:
12293
diff
changeset
|
239 print(row { "server"; "Uptime, version, shutting down, etc." }) |
|
8210c2a52e9c
mod_admin_shell: Use a table to show help sections
Kim Alvefur <zash@zash.se>
parents:
12293
diff
changeset
|
240 print(row { "port"; "Commands to manage ports the server is listening on" }) |
|
8210c2a52e9c
mod_admin_shell: Use a table to show help sections
Kim Alvefur <zash@zash.se>
parents:
12293
diff
changeset
|
241 print(row { "dns"; "Commands to manage and inspect the internal DNS resolver" }) |
|
8210c2a52e9c
mod_admin_shell: Use a table to show help sections
Kim Alvefur <zash@zash.se>
parents:
12293
diff
changeset
|
242 print(row { "xmpp"; "Commands for sending XMPP stanzas" }) |
|
8210c2a52e9c
mod_admin_shell: Use a table to show help sections
Kim Alvefur <zash@zash.se>
parents:
12293
diff
changeset
|
243 print(row { "debug"; "Commands for debugging the server" }) |
|
12536
a8cb1d7a98db
mod_admin_shell: Document the 'watch' section in the built-in help
Kim Alvefur <zash@zash.se>
parents:
12529
diff
changeset
|
244 print(row { "watch"; "Commands for watching live logs from the server" }) |
|
12304
8210c2a52e9c
mod_admin_shell: Use a table to show help sections
Kim Alvefur <zash@zash.se>
parents:
12293
diff
changeset
|
245 print(row { "config"; "Reloading the configuration, etc." }) |
|
8210c2a52e9c
mod_admin_shell: Use a table to show help sections
Kim Alvefur <zash@zash.se>
parents:
12293
diff
changeset
|
246 print(row { "columns"; "Information about customizing session listings" }) |
|
8210c2a52e9c
mod_admin_shell: Use a table to show help sections
Kim Alvefur <zash@zash.se>
parents:
12293
diff
changeset
|
247 print(row { "console"; "Help regarding the console itself" }) |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
248 elseif section == "c2s" then |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
249 print [[c2s:show(jid, columns) - Show all client sessions with the specified JID (or all if no JID given)]] |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
250 print [[c2s:show_tls(jid) - Show TLS cipher info for encrypted sessions]] |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
251 print [[c2s:count() - Count sessions without listing them]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
252 print [[c2s:close(jid) - Close all sessions for the specified JID]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
253 print [[c2s:closeall() - Close all active c2s connections ]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
254 elseif section == "s2s" then |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
255 print [[s2s:show(domain, columns) - Show all s2s connections for the given domain (or all if no domain given)]] |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
256 print [[s2s:show_tls(domain) - Show TLS cipher info for encrypted sessions]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
257 print [[s2s:close(from, to) - Close a connection from one domain to another]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
258 print [[s2s:closeall(host) - Close all the incoming/outgoing s2s sessions to specified host]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
259 elseif section == "http" then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
260 print [[http:list(hosts) - Show HTTP endpoints]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
261 elseif section == "module" then |
|
11601
9483728f890f
mod_admin_shell: Add basic command that shows more info about loaded modules
Kim Alvefur <zash@zash.se>
parents:
11523
diff
changeset
|
262 print [[module:info(module, host) - Show information about a loaded module]] |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
263 print [[module:load(module, host) - Load the specified module on the specified host (or all hosts if none given)]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
264 print [[module:reload(module, host) - The same, but unloads and loads the module (saving state if the module supports it)]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
265 print [[module:unload(module, host) - The same, but just unloads the module from memory]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
266 print [[module:list(host) - List the modules loaded on the specified host]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
267 elseif section == "host" then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
268 print [[host:activate(hostname) - Activates the specified host]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
269 print [[host:deactivate(hostname) - Disconnects all clients on this host and deactivates]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
270 print [[host:list() - List the currently-activated hosts]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
271 elseif section == "user" then |
|
12670
4a00c8811ea8
mod_admin_shell: Update help for user:create to reflect singular role argument
Kim Alvefur <zash@zash.se>
parents:
12668
diff
changeset
|
272 print [[user:create(jid, password, role) - Create the specified user account]] |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
273 print [[user:password(jid, password) - Set the password for the specified user account]] |
|
12637
2200f0c6b3f1
mod_admin_shell: Switch names for user role management commands
Kim Alvefur <zash@zash.se>
parents:
12505
diff
changeset
|
274 print [[user:roles(jid, host) - Show current roles for an user]] |
|
12668
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
275 print [[user:setrole(jid, host, role) - Set primary role of a user (see 'help roles')]] |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
276 print [[user:addrole(jid, host, role) - Add a secondary role to a user]] |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
277 print [[user:delrole(jid, host, role) - Remove a secondary role from a user]] |
|
12908
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
278 print [[user:disable(jid) - Disable the specified user account, preventing login]] |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
279 print [[user:enable(jid) - Enable the specified user account, restoring login access]] |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
280 print [[user:delete(jid) - Permanently remove the specified user account]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
281 print [[user:list(hostname, pattern) - List users on the specified host, optionally filtering with a pattern]] |
|
12208
3edf1a38fb15
mod_admin_shell: Add help section about roles
Kim Alvefur <zash@zash.se>
parents:
12126
diff
changeset
|
282 elseif section == "roles" then |
|
3edf1a38fb15
mod_admin_shell: Add help section about roles
Kim Alvefur <zash@zash.se>
parents:
12126
diff
changeset
|
283 print [[Roles may grant access or restrict users from certain operations]] |
|
3edf1a38fb15
mod_admin_shell: Add help section about roles
Kim Alvefur <zash@zash.se>
parents:
12126
diff
changeset
|
284 print [[Built-in roles are:]] |
|
12668
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
285 print [[ prosody:user - Normal user (default)]] |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
286 print [[ prosody:admin - Host administrator]] |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
287 print [[ prosody:operator - Server administrator]] |
|
12208
3edf1a38fb15
mod_admin_shell: Add help section about roles
Kim Alvefur <zash@zash.se>
parents:
12126
diff
changeset
|
288 print [[]] |
|
12668
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
289 print [[Roles can be assigned using the user management commands (see 'help user').]] |
|
11365
5eb817cdd5cd
mod_admin_shell: Add help section with (top level) MUC commands
Kim Alvefur <zash@zash.se>
parents:
11364
diff
changeset
|
290 elseif section == "muc" then |
|
5eb817cdd5cd
mod_admin_shell: Add help section with (top level) MUC commands
Kim Alvefur <zash@zash.se>
parents:
11364
diff
changeset
|
291 -- TODO `muc:room():foo()` commands |
|
5eb817cdd5cd
mod_admin_shell: Add help section with (top level) MUC commands
Kim Alvefur <zash@zash.se>
parents:
11364
diff
changeset
|
292 print [[muc:create(roomjid, { config }) - Create the specified MUC room with the given config]] |
|
5eb817cdd5cd
mod_admin_shell: Add help section with (top level) MUC commands
Kim Alvefur <zash@zash.se>
parents:
11364
diff
changeset
|
293 print [[muc:list(host) - List rooms on the specified MUC component]] |
|
12291
ec16fb706247
mod_admin_shell: Fix description of muc:room() (thanks Link Mauve)
Kim Alvefur <zash@zash.se>
parents:
12281
diff
changeset
|
294 print [[muc:room(roomjid) - Reference the specified MUC room to access MUC API methods]] |
|
12865
e6324117f124
mod_admin_shell: Add muc:occupants(room) command to list occupants
Kim Alvefur <zash@zash.se>
parents:
12789
diff
changeset
|
295 print [[muc:occupants(roomjid, filter) - List room occupants, optionally filtered on substring or role]] |
|
12866
54aea2622459
mod_admin_shell: Add muc:affiliations(room) command to list memberships
Kim Alvefur <zash@zash.se>
parents:
12865
diff
changeset
|
296 print [[muc:affiliations(roomjid, filter) - List affiliated members of the room, optionally filtered on substring or affiliation]] |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
297 elseif section == "server" then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
298 print [[server:version() - Show the server's version number]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
299 print [[server:uptime() - Show how long the server has been running]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
300 print [[server:memory() - Show details about the server's memory usage]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
301 print [[server:shutdown(reason) - Shut down the server, with an optional reason to be broadcast to all connections]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
302 elseif section == "port" then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
303 print [[port:list() - Lists all network ports prosody currently listens on]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
304 print [[port:close(port, interface) - Close a port]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
305 elseif section == "dns" then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
306 print [[dns:lookup(name, type, class) - Do a DNS lookup]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
307 print [[dns:addnameserver(nameserver) - Add a nameserver to the list]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
308 print [[dns:setnameserver(nameserver) - Replace the list of name servers with the supplied one]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
309 print [[dns:purge() - Clear the DNS cache]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
310 print [[dns:cache() - Show cached records]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
311 elseif section == "xmpp" then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
312 print [[xmpp:ping(localhost, remotehost) -- Sends a ping to a remote XMPP server and reports the response]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
313 elseif section == "config" then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
314 print [[config:reload() - Reload the server configuration. Modules may need to be reloaded for changes to take effect.]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
315 print [[config:get([host,] option) - Show the value of a config option.]] |
|
13062
da51c36ed1e7
mod_admin_shell: Add config:set([host,] key, value) because why not
Kim Alvefur <zash@zash.se>
parents:
13061
diff
changeset
|
316 print [[config:set([host,] option, value) - Update the value of a config option without writing to the config file.]] |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
317 elseif section == "stats" then -- luacheck: ignore 542 |
|
12225
e9f34a04067e
mod_admin_shell: Add help section about stats
Kim Alvefur <zash@zash.se>
parents:
12224
diff
changeset
|
318 print [[stats:show(pattern) - Show internal statistics, optionally filtering by name with a pattern]] |
|
e9f34a04067e
mod_admin_shell: Add help section about stats
Kim Alvefur <zash@zash.se>
parents:
12224
diff
changeset
|
319 print [[stats:show():cfgraph() - Show a cumulative frequency graph]] |
|
e9f34a04067e
mod_admin_shell: Add help section about stats
Kim Alvefur <zash@zash.se>
parents:
12224
diff
changeset
|
320 print [[stats:show():histogram() - Show a histogram of selected metric]] |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
321 elseif section == "debug" then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
322 print [[debug:logevents(host) - Enable logging of fired events on host]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
323 print [[debug:events(host, event) - Show registered event handlers]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
324 print [[debug:timers() - Show information about scheduled timers]] |
|
12536
a8cb1d7a98db
mod_admin_shell: Document the 'watch' section in the built-in help
Kim Alvefur <zash@zash.se>
parents:
12529
diff
changeset
|
325 elseif section == "watch" then |
|
a8cb1d7a98db
mod_admin_shell: Document the 'watch' section in the built-in help
Kim Alvefur <zash@zash.se>
parents:
12529
diff
changeset
|
326 print [[watch:log() - Follow debug logs]] |
|
a8cb1d7a98db
mod_admin_shell: Document the 'watch' section in the built-in help
Kim Alvefur <zash@zash.se>
parents:
12529
diff
changeset
|
327 print [[watch:stanzas(target, filter) - Watch live stanzas matching the specified target and filter]] |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
328 elseif section == "console" then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
329 print [[Hey! Welcome to Prosody's admin console.]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
330 print [[First thing, if you're ever wondering how to get out, simply type 'quit'.]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
331 print [[Secondly, note that we don't support the full telnet protocol yet (it's coming)]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
332 print [[so you may have trouble using the arrow keys, etc. depending on your system.]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
333 print [[]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
334 print [[For now we offer a couple of handy shortcuts:]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
335 print [[!! - Repeat the last command]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
336 print [[!old!new! - repeat the last command, but with 'old' replaced by 'new']] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
337 print [[]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
338 print [[For those well-versed in Prosody's internals, or taking instruction from those who are,]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
339 print [[you can prefix a command with > to escape the console sandbox, and access everything in]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
340 print [[the running server. Great fun, but be careful not to break anything :)]] |
|
12224
2b348d65cd69
mod_admin_shell: Add help section about customizing table columns
Kim Alvefur <zash@zash.se>
parents:
12209
diff
changeset
|
341 elseif section == "columns" then |
|
2b348d65cd69
mod_admin_shell: Add help section about customizing table columns
Kim Alvefur <zash@zash.se>
parents:
12209
diff
changeset
|
342 print [[The columns shown by c2s:show() and s2s:show() can be customizied via the]] |
|
2b348d65cd69
mod_admin_shell: Add help section about customizing table columns
Kim Alvefur <zash@zash.se>
parents:
12209
diff
changeset
|
343 print [['columns' argument as described here.]] |
|
2b348d65cd69
mod_admin_shell: Add help section about customizing table columns
Kim Alvefur <zash@zash.se>
parents:
12209
diff
changeset
|
344 print [[]] |
|
2b348d65cd69
mod_admin_shell: Add help section about customizing table columns
Kim Alvefur <zash@zash.se>
parents:
12209
diff
changeset
|
345 print [[Columns can be specified either as "id jid ipv" or as {"id", "jid", "ipv"}.]] |
|
2b348d65cd69
mod_admin_shell: Add help section about customizing table columns
Kim Alvefur <zash@zash.se>
parents:
12209
diff
changeset
|
346 print [[Available columns are:]] |
|
12229
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
347 local meta_columns = { |
|
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
348 { title = "ID"; width = 5 }; |
|
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
349 { title = "Column Title"; width = 12 }; |
|
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
350 { title = "Description"; width = 12 }; |
|
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
351 }; |
|
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
352 -- auto-adjust widths |
|
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
353 for column, spec in pairs(available_columns) do |
|
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
354 meta_columns[1].width = math.max(meta_columns[1].width or 0, #column); |
|
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
355 meta_columns[2].width = math.max(meta_columns[2].width or 0, #(spec.title or "")); |
|
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
356 meta_columns[3].width = math.max(meta_columns[3].width or 0, #(spec.description or "")); |
|
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
357 end |
|
12529
7dae6d29b71d
prosodyctl shell: Communicate width of terminal to mod_admin_shell
Kim Alvefur <zash@zash.se>
parents:
12506
diff
changeset
|
358 local row = format_table(meta_columns, session.width) |
|
12229
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
359 print(row()); |
|
12224
2b348d65cd69
mod_admin_shell: Add help section about customizing table columns
Kim Alvefur <zash@zash.se>
parents:
12209
diff
changeset
|
360 for column, spec in iterators.sorted_pairs(available_columns) do |
|
12229
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
361 print(row({ column, spec.title, spec.description })); |
|
12224
2b348d65cd69
mod_admin_shell: Add help section about customizing table columns
Kim Alvefur <zash@zash.se>
parents:
12209
diff
changeset
|
362 end |
|
2b348d65cd69
mod_admin_shell: Add help section about customizing table columns
Kim Alvefur <zash@zash.se>
parents:
12209
diff
changeset
|
363 print [[]] |
|
2b348d65cd69
mod_admin_shell: Add help section about customizing table columns
Kim Alvefur <zash@zash.se>
parents:
12209
diff
changeset
|
364 print [[Most fields on the internal session structures can also be used as columns]] |
|
12258
99560987ea19
mod_admin_shell: Fix typo in comment [codespell]
Kim Alvefur <zash@zash.se>
parents:
12229
diff
changeset
|
365 -- Also, you can pass a table column specification directly, with mapper callback and all |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
366 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
367 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
368 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
369 -- Session environment -- |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
370 -- Anything in def_env will be accessible within the session as a global variable |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
371 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
372 --luacheck: ignore 212/self |
|
11891
6a241e66eec5
mod_admin_shell: Respect metatables in output serialization
Kim Alvefur <zash@zash.se>
parents:
11889
diff
changeset
|
373 local serialize_defaults = module:get_option("console_prettyprint_settings", |
|
6a241e66eec5
mod_admin_shell: Respect metatables in output serialization
Kim Alvefur <zash@zash.se>
parents:
11889
diff
changeset
|
374 { fatal = false; unquoted = true; maxdepth = 2; table_iterator = "pairs" }) |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
375 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
376 def_env.output = {}; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
377 function def_env.output:configure(opts) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
378 if type(opts) ~= "table" then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
379 opts = { preset = opts }; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
380 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
381 if not opts.fallback then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
382 -- XXX Error message passed to fallback is lost, does it matter? |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
383 opts.fallback = tostring; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
384 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
385 for k,v in pairs(serialize_defaults) do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
386 if opts[k] == nil then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
387 opts[k] = v; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
388 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
389 end |
|
11891
6a241e66eec5
mod_admin_shell: Respect metatables in output serialization
Kim Alvefur <zash@zash.se>
parents:
11889
diff
changeset
|
390 if opts.table_iterator == "pairs" then |
|
6a241e66eec5
mod_admin_shell: Respect metatables in output serialization
Kim Alvefur <zash@zash.se>
parents:
11889
diff
changeset
|
391 opts.table_iterator = pairs; |
|
6a241e66eec5
mod_admin_shell: Respect metatables in output serialization
Kim Alvefur <zash@zash.se>
parents:
11889
diff
changeset
|
392 elseif type(opts.table_iterator) ~= "function" then |
|
6a241e66eec5
mod_admin_shell: Respect metatables in output serialization
Kim Alvefur <zash@zash.se>
parents:
11889
diff
changeset
|
393 opts.table_iterator = nil; -- rawpairs is the default |
|
6a241e66eec5
mod_admin_shell: Respect metatables in output serialization
Kim Alvefur <zash@zash.se>
parents:
11889
diff
changeset
|
394 end |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
395 self.session.serialize = serialization.new(opts); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
396 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
397 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
398 def_env.server = {}; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
399 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
400 function def_env.server:insane_reload() |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
401 prosody.unlock_globals(); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
402 dofile "prosody" |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
403 prosody = _G.prosody; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
404 return true, "Server reloaded"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
405 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
406 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
407 function def_env.server:version() |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
408 return true, tostring(prosody.version or "unknown"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
409 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
410 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
411 function def_env.server:uptime() |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
412 local t = os.time()-prosody.start_time; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
413 local seconds = t%60; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
414 t = (t - seconds)/60; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
415 local minutes = t%60; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
416 t = (t - minutes)/60; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
417 local hours = t%24; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
418 t = (t - hours)/24; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
419 local days = t; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
420 return true, string.format("This server has been running for %d day%s, %d hour%s and %d minute%s (since %s)", |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
421 days, (days ~= 1 and "s") or "", hours, (hours ~= 1 and "s") or "", |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
422 minutes, (minutes ~= 1 and "s") or "", os.date("%c", prosody.start_time)); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
423 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
424 |
|
11831
94cd363116a3
mod_admin_shell: Allow passing an exit code to server:shutdown()
Kim Alvefur <zash@zash.se>
parents:
11736
diff
changeset
|
425 function def_env.server:shutdown(reason, code) |
|
94cd363116a3
mod_admin_shell: Allow passing an exit code to server:shutdown()
Kim Alvefur <zash@zash.se>
parents:
11736
diff
changeset
|
426 prosody.shutdown(reason, code); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
427 return true, "Shutdown initiated"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
428 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
429 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
430 local function human(kb) |
|
10887
3debe04a6162
mod_admin_shell: Format stats with util.human.units
Kim Alvefur <zash@zash.se>
parents:
10878
diff
changeset
|
431 return format_number(kb*1024, "B", "b"); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
432 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
433 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
434 function def_env.server:memory() |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
435 if not has_pposix or not pposix.meminfo then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
436 return true, "Lua is using "..human(collectgarbage("count")); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
437 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
438 local mem, lua_mem = pposix.meminfo(), collectgarbage("count"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
439 local print = self.session.print; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
440 print("Process: "..human((mem.allocated+mem.allocated_mmap)/1024)); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
441 print(" Used: "..human(mem.used/1024).." ("..human(lua_mem).." by Lua)"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
442 print(" Free: "..human(mem.unused/1024).." ("..human(mem.returnable/1024).." returnable)"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
443 return true, "OK"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
444 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
445 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
446 def_env.module = {}; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
447 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
448 local function get_hosts_set(hosts) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
449 if type(hosts) == "table" then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
450 if hosts[1] then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
451 return set.new(hosts); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
452 elseif hosts._items then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
453 return hosts; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
454 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
455 elseif type(hosts) == "string" then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
456 return set.new { hosts }; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
457 elseif hosts == nil then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
458 return set.new(array.collect(keys(prosody.hosts))); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
459 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
460 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
461 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
462 -- Hosts with a module or all virtualhosts if no module given |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
463 -- matching modules_enabled in the global section |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
464 local function get_hosts_with_module(hosts, module) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
465 local hosts_set = get_hosts_set(hosts) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
466 / function (host) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
467 if module then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
468 -- Module given, filter in hosts with this module loaded |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
469 if modulemanager.is_loaded(host, module) then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
470 return host; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
471 else |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
472 return nil; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
473 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
474 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
475 if not hosts then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
476 -- No hosts given, filter in VirtualHosts |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
477 if prosody.hosts[host].type == "local" then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
478 return host; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
479 else |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
480 return nil |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
481 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
482 end; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
483 -- No module given, but hosts are, don't filter at all |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
484 return host; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
485 end; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
486 if module and modulemanager.get_module("*", module) then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
487 hosts_set:add("*"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
488 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
489 return hosts_set; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
490 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
491 |
|
11601
9483728f890f
mod_admin_shell: Add basic command that shows more info about loaded modules
Kim Alvefur <zash@zash.se>
parents:
11523
diff
changeset
|
492 function def_env.module:info(name, hosts) |
|
9483728f890f
mod_admin_shell: Add basic command that shows more info about loaded modules
Kim Alvefur <zash@zash.se>
parents:
11523
diff
changeset
|
493 if not name then |
|
9483728f890f
mod_admin_shell: Add basic command that shows more info about loaded modules
Kim Alvefur <zash@zash.se>
parents:
11523
diff
changeset
|
494 return nil, "module name expected"; |
|
9483728f890f
mod_admin_shell: Add basic command that shows more info about loaded modules
Kim Alvefur <zash@zash.se>
parents:
11523
diff
changeset
|
495 end |
|
9483728f890f
mod_admin_shell: Add basic command that shows more info about loaded modules
Kim Alvefur <zash@zash.se>
parents:
11523
diff
changeset
|
496 local print = self.session.print; |
|
9483728f890f
mod_admin_shell: Add basic command that shows more info about loaded modules
Kim Alvefur <zash@zash.se>
parents:
11523
diff
changeset
|
497 hosts = get_hosts_with_module(hosts, name); |
|
9483728f890f
mod_admin_shell: Add basic command that shows more info about loaded modules
Kim Alvefur <zash@zash.se>
parents:
11523
diff
changeset
|
498 if hosts:empty() then |
|
9483728f890f
mod_admin_shell: Add basic command that shows more info about loaded modules
Kim Alvefur <zash@zash.se>
parents:
11523
diff
changeset
|
499 return false, "mod_" .. name .. " does not appear to be loaded on the specified hosts"; |
|
9483728f890f
mod_admin_shell: Add basic command that shows more info about loaded modules
Kim Alvefur <zash@zash.se>
parents:
11523
diff
changeset
|
500 end |
|
9483728f890f
mod_admin_shell: Add basic command that shows more info about loaded modules
Kim Alvefur <zash@zash.se>
parents:
11523
diff
changeset
|
501 |
|
11932
92925f1320e7
mod_admin_shell: Factor out simple function in module:info for reuse
Kim Alvefur <zash@zash.se>
parents:
11931
diff
changeset
|
502 local function item_name(item) return item.name; end |
|
92925f1320e7
mod_admin_shell: Factor out simple function in module:info for reuse
Kim Alvefur <zash@zash.se>
parents:
11931
diff
changeset
|
503 |
|
12540
0684506c99d3
mod_admin_shell: Include last (mod_cron) task run time in module:info()
Kim Alvefur <zash@zash.se>
parents:
12538
diff
changeset
|
504 local function task_timefmt(t) |
|
0684506c99d3
mod_admin_shell: Include last (mod_cron) task run time in module:info()
Kim Alvefur <zash@zash.se>
parents:
12538
diff
changeset
|
505 if not t then |
|
0684506c99d3
mod_admin_shell: Include last (mod_cron) task run time in module:info()
Kim Alvefur <zash@zash.se>
parents:
12538
diff
changeset
|
506 return "no last run time" |
|
0684506c99d3
mod_admin_shell: Include last (mod_cron) task run time in module:info()
Kim Alvefur <zash@zash.se>
parents:
12538
diff
changeset
|
507 elseif os.difftime(os.time(), t) < 86400 then |
|
0684506c99d3
mod_admin_shell: Include last (mod_cron) task run time in module:info()
Kim Alvefur <zash@zash.se>
parents:
12538
diff
changeset
|
508 return os.date("last run today at %H:%M", t); |
|
0684506c99d3
mod_admin_shell: Include last (mod_cron) task run time in module:info()
Kim Alvefur <zash@zash.se>
parents:
12538
diff
changeset
|
509 else |
|
0684506c99d3
mod_admin_shell: Include last (mod_cron) task run time in module:info()
Kim Alvefur <zash@zash.se>
parents:
12538
diff
changeset
|
510 return os.date("last run %A at %H:%M", t); |
|
0684506c99d3
mod_admin_shell: Include last (mod_cron) task run time in module:info()
Kim Alvefur <zash@zash.se>
parents:
12538
diff
changeset
|
511 end |
|
0684506c99d3
mod_admin_shell: Include last (mod_cron) task run time in module:info()
Kim Alvefur <zash@zash.se>
parents:
12538
diff
changeset
|
512 end |
|
0684506c99d3
mod_admin_shell: Include last (mod_cron) task run time in module:info()
Kim Alvefur <zash@zash.se>
parents:
12538
diff
changeset
|
513 |
|
11606
0b65d43f4da4
mod_admin_shell: module:info: Show friendlier name for known 'items'
Kim Alvefur <zash@zash.se>
parents:
11605
diff
changeset
|
514 local friendly_descriptions = { |
|
0b65d43f4da4
mod_admin_shell: module:info: Show friendlier name for known 'items'
Kim Alvefur <zash@zash.se>
parents:
11605
diff
changeset
|
515 ["adhoc-provider"] = "Ad-hoc commands", |
|
0b65d43f4da4
mod_admin_shell: module:info: Show friendlier name for known 'items'
Kim Alvefur <zash@zash.se>
parents:
11605
diff
changeset
|
516 ["auth-provider"] = "Authentication provider", |
|
0b65d43f4da4
mod_admin_shell: module:info: Show friendlier name for known 'items'
Kim Alvefur <zash@zash.se>
parents:
11605
diff
changeset
|
517 ["http-provider"] = "HTTP services", |
|
0b65d43f4da4
mod_admin_shell: module:info: Show friendlier name for known 'items'
Kim Alvefur <zash@zash.se>
parents:
11605
diff
changeset
|
518 ["net-provider"] = "Network service", |
|
0b65d43f4da4
mod_admin_shell: module:info: Show friendlier name for known 'items'
Kim Alvefur <zash@zash.se>
parents:
11605
diff
changeset
|
519 ["storage-provider"] = "Storage driver", |
|
11931
c65d5da8e99a
mod_admin_shell: List collected metrics in module:info
Kim Alvefur <zash@zash.se>
parents:
11930
diff
changeset
|
520 ["measure"] = "Legacy metrics", |
|
c65d5da8e99a
mod_admin_shell: List collected metrics in module:info
Kim Alvefur <zash@zash.se>
parents:
11930
diff
changeset
|
521 ["metric"] = "Metrics", |
|
11991
bef2a59b00d1
mod_admin_shell: List periodic tasks in module:info
Kim Alvefur <zash@zash.se>
parents:
11954
diff
changeset
|
522 ["task"] = "Periodic task", |
|
11606
0b65d43f4da4
mod_admin_shell: module:info: Show friendlier name for known 'items'
Kim Alvefur <zash@zash.se>
parents:
11605
diff
changeset
|
523 }; |
|
11607
03eb4c0dca27
mod_admin_shell: module:info: List 'items' that can be formatted easily
Kim Alvefur <zash@zash.se>
parents:
11606
diff
changeset
|
524 local item_formatters = { |
|
03eb4c0dca27
mod_admin_shell: module:info: List 'items' that can be formatted easily
Kim Alvefur <zash@zash.se>
parents:
11606
diff
changeset
|
525 ["feature"] = tostring, |
|
03eb4c0dca27
mod_admin_shell: module:info: List 'items' that can be formatted easily
Kim Alvefur <zash@zash.se>
parents:
11606
diff
changeset
|
526 ["identity"] = function(ident) return ident.type .. "/" .. ident.category; end, |
|
11932
92925f1320e7
mod_admin_shell: Factor out simple function in module:info for reuse
Kim Alvefur <zash@zash.se>
parents:
11931
diff
changeset
|
527 ["adhoc-provider"] = item_name, |
|
92925f1320e7
mod_admin_shell: Factor out simple function in module:info for reuse
Kim Alvefur <zash@zash.se>
parents:
11931
diff
changeset
|
528 ["auth-provider"] = item_name, |
|
92925f1320e7
mod_admin_shell: Factor out simple function in module:info for reuse
Kim Alvefur <zash@zash.se>
parents:
11931
diff
changeset
|
529 ["storage-provider"] = item_name, |
|
11943
cf47834d3698
mod_admin_shell: Fix showing default HTTP path in module:info
Kim Alvefur <zash@zash.se>
parents:
11932
diff
changeset
|
530 ["http-provider"] = function(item, mod) return mod:http_url(item.name, item.default_path); end, |
|
12538
0f56587bb37f
mod_admin_shell: Drop unused argument [luacheck]
Kim Alvefur <zash@zash.se>
parents:
12537
diff
changeset
|
531 ["net-provider"] = function(item) |
|
12537
74418f8096b0
mod_admin_shell: Show bound ports in module:info
Kim Alvefur <zash@zash.se>
parents:
12536
diff
changeset
|
532 local service_name = item.name; |
|
74418f8096b0
mod_admin_shell: Show bound ports in module:info
Kim Alvefur <zash@zash.se>
parents:
12536
diff
changeset
|
533 local ports_list = {}; |
|
74418f8096b0
mod_admin_shell: Show bound ports in module:info
Kim Alvefur <zash@zash.se>
parents:
12536
diff
changeset
|
534 for _, interface, port in portmanager.get_active_services():iter(service_name, nil, nil) do |
|
74418f8096b0
mod_admin_shell: Show bound ports in module:info
Kim Alvefur <zash@zash.se>
parents:
12536
diff
changeset
|
535 table.insert(ports_list, "["..interface.."]:"..port); |
|
74418f8096b0
mod_admin_shell: Show bound ports in module:info
Kim Alvefur <zash@zash.se>
parents:
12536
diff
changeset
|
536 end |
|
74418f8096b0
mod_admin_shell: Show bound ports in module:info
Kim Alvefur <zash@zash.se>
parents:
12536
diff
changeset
|
537 if not ports_list[1] then |
|
74418f8096b0
mod_admin_shell: Show bound ports in module:info
Kim Alvefur <zash@zash.se>
parents:
12536
diff
changeset
|
538 return service_name..": not listening on any ports"; |
|
74418f8096b0
mod_admin_shell: Show bound ports in module:info
Kim Alvefur <zash@zash.se>
parents:
12536
diff
changeset
|
539 end |
|
74418f8096b0
mod_admin_shell: Show bound ports in module:info
Kim Alvefur <zash@zash.se>
parents:
12536
diff
changeset
|
540 return service_name..": "..table.concat(ports_list, ", "); |
|
74418f8096b0
mod_admin_shell: Show bound ports in module:info
Kim Alvefur <zash@zash.se>
parents:
12536
diff
changeset
|
541 end, |
|
11931
c65d5da8e99a
mod_admin_shell: List collected metrics in module:info
Kim Alvefur <zash@zash.se>
parents:
11930
diff
changeset
|
542 ["measure"] = function(item) return item.name .. " (" .. suf(item.conf and item.conf.unit, " ") .. item.type .. ")"; end, |
|
c65d5da8e99a
mod_admin_shell: List collected metrics in module:info
Kim Alvefur <zash@zash.se>
parents:
11930
diff
changeset
|
543 ["metric"] = function(item) |
|
c65d5da8e99a
mod_admin_shell: List collected metrics in module:info
Kim Alvefur <zash@zash.se>
parents:
11930
diff
changeset
|
544 return ("%s (%s%s)%s"):format(item.name, suf(item.mf.unit, " "), item.mf.type_, pre(": ", item.mf.description)); |
|
c65d5da8e99a
mod_admin_shell: List collected metrics in module:info
Kim Alvefur <zash@zash.se>
parents:
11930
diff
changeset
|
545 end, |
|
12540
0684506c99d3
mod_admin_shell: Include last (mod_cron) task run time in module:info()
Kim Alvefur <zash@zash.se>
parents:
12538
diff
changeset
|
546 ["task"] = function (item) return string.format("%s (%s, %s)", item.name or item.id, item.when, task_timefmt(item.last)); end |
|
11607
03eb4c0dca27
mod_admin_shell: module:info: List 'items' that can be formatted easily
Kim Alvefur <zash@zash.se>
parents:
11606
diff
changeset
|
547 }; |
|
03eb4c0dca27
mod_admin_shell: module:info: List 'items' that can be formatted easily
Kim Alvefur <zash@zash.se>
parents:
11606
diff
changeset
|
548 |
|
11601
9483728f890f
mod_admin_shell: Add basic command that shows more info about loaded modules
Kim Alvefur <zash@zash.se>
parents:
11523
diff
changeset
|
549 for host in hosts do |
|
9483728f890f
mod_admin_shell: Add basic command that shows more info about loaded modules
Kim Alvefur <zash@zash.se>
parents:
11523
diff
changeset
|
550 local mod = modulemanager.get_module(host, name); |
|
9483728f890f
mod_admin_shell: Add basic command that shows more info about loaded modules
Kim Alvefur <zash@zash.se>
parents:
11523
diff
changeset
|
551 if mod.module.host == "*" then |
|
9483728f890f
mod_admin_shell: Add basic command that shows more info about loaded modules
Kim Alvefur <zash@zash.se>
parents:
11523
diff
changeset
|
552 print("in global context"); |
|
11604
7466bf65d7c8
mod_admin_shell: module:info: Use existing host string representation
Kim Alvefur <zash@zash.se>
parents:
11603
diff
changeset
|
553 else |
|
7466bf65d7c8
mod_admin_shell: module:info: Use existing host string representation
Kim Alvefur <zash@zash.se>
parents:
11603
diff
changeset
|
554 print("on " .. tostring(prosody.hosts[mod.module.host])); |
|
11601
9483728f890f
mod_admin_shell: Add basic command that shows more info about loaded modules
Kim Alvefur <zash@zash.se>
parents:
11523
diff
changeset
|
555 end |
|
9483728f890f
mod_admin_shell: Add basic command that shows more info about loaded modules
Kim Alvefur <zash@zash.se>
parents:
11523
diff
changeset
|
556 print(" path: " .. (mod.module.path or "n/a")); |
|
11602
78ec0741c2bc
mod_admin_shell: module:info: Show module status
Kim Alvefur <zash@zash.se>
parents:
11601
diff
changeset
|
557 if mod.module.status_message then |
|
78ec0741c2bc
mod_admin_shell: module:info: Show module status
Kim Alvefur <zash@zash.se>
parents:
11601
diff
changeset
|
558 print(" status: [" .. mod.module.status_type .. "] " .. mod.module.status_message); |
|
78ec0741c2bc
mod_admin_shell: module:info: Show module status
Kim Alvefur <zash@zash.se>
parents:
11601
diff
changeset
|
559 end |
|
11605
225ef07f2bee
mod_admin_shell: module:info: List provided 'items'
Kim Alvefur <zash@zash.se>
parents:
11604
diff
changeset
|
560 if mod.module.items and next(mod.module.items) ~= nil then |
|
225ef07f2bee
mod_admin_shell: module:info: List provided 'items'
Kim Alvefur <zash@zash.se>
parents:
11604
diff
changeset
|
561 print(" provides:"); |
|
225ef07f2bee
mod_admin_shell: module:info: List provided 'items'
Kim Alvefur <zash@zash.se>
parents:
11604
diff
changeset
|
562 for kind, items in pairs(mod.module.items) do |
|
11606
0b65d43f4da4
mod_admin_shell: module:info: Show friendlier name for known 'items'
Kim Alvefur <zash@zash.se>
parents:
11605
diff
changeset
|
563 local label = friendly_descriptions[kind] or kind:gsub("%-", " "):gsub("^%a", string.upper); |
|
0b65d43f4da4
mod_admin_shell: module:info: Show friendlier name for known 'items'
Kim Alvefur <zash@zash.se>
parents:
11605
diff
changeset
|
564 print(string.format(" - %s (%d item%s)", label, #items, #items > 1 and "s" or "")); |
|
11607
03eb4c0dca27
mod_admin_shell: module:info: List 'items' that can be formatted easily
Kim Alvefur <zash@zash.se>
parents:
11606
diff
changeset
|
565 local formatter = item_formatters[kind]; |
|
03eb4c0dca27
mod_admin_shell: module:info: List 'items' that can be formatted easily
Kim Alvefur <zash@zash.se>
parents:
11606
diff
changeset
|
566 if formatter then |
|
03eb4c0dca27
mod_admin_shell: module:info: List 'items' that can be formatted easily
Kim Alvefur <zash@zash.se>
parents:
11606
diff
changeset
|
567 for _, item in ipairs(items) do |
|
11850
bfa85965106e
mod_admin_shell: Show HTTP base-URLs in module:info()
Kim Alvefur <zash@zash.se>
parents:
11831
diff
changeset
|
568 print(" - " .. formatter(item, mod.module)); |
|
11607
03eb4c0dca27
mod_admin_shell: module:info: List 'items' that can be formatted easily
Kim Alvefur <zash@zash.se>
parents:
11606
diff
changeset
|
569 end |
|
03eb4c0dca27
mod_admin_shell: module:info: List 'items' that can be formatted easily
Kim Alvefur <zash@zash.se>
parents:
11606
diff
changeset
|
570 end |
|
11605
225ef07f2bee
mod_admin_shell: module:info: List provided 'items'
Kim Alvefur <zash@zash.se>
parents:
11604
diff
changeset
|
571 end |
|
225ef07f2bee
mod_admin_shell: module:info: List provided 'items'
Kim Alvefur <zash@zash.se>
parents:
11604
diff
changeset
|
572 end |
|
11603
4e24408a3f57
mod_admin_shell: module:info: List dependencies
Kim Alvefur <zash@zash.se>
parents:
11602
diff
changeset
|
573 if mod.module.dependencies and next(mod.module.dependencies) ~= nil then |
|
4e24408a3f57
mod_admin_shell: module:info: List dependencies
Kim Alvefur <zash@zash.se>
parents:
11602
diff
changeset
|
574 print(" dependencies:"); |
|
4e24408a3f57
mod_admin_shell: module:info: List dependencies
Kim Alvefur <zash@zash.se>
parents:
11602
diff
changeset
|
575 for dep in pairs(mod.module.dependencies) do |
|
12927
918dfbb330fd
mod_admin_shell: Limit module dependency listings to loaded on current host
Kim Alvefur <zash@zash.se>
parents:
12922
diff
changeset
|
576 -- Dependencies are per module instance, not per host, so dependencies |
|
918dfbb330fd
mod_admin_shell: Limit module dependency listings to loaded on current host
Kim Alvefur <zash@zash.se>
parents:
12922
diff
changeset
|
577 -- of/on global modules may list modules not actually loaded on the |
|
918dfbb330fd
mod_admin_shell: Limit module dependency listings to loaded on current host
Kim Alvefur <zash@zash.se>
parents:
12922
diff
changeset
|
578 -- current host. |
|
918dfbb330fd
mod_admin_shell: Limit module dependency listings to loaded on current host
Kim Alvefur <zash@zash.se>
parents:
12922
diff
changeset
|
579 if modulemanager.is_loaded(host, dep) then |
|
918dfbb330fd
mod_admin_shell: Limit module dependency listings to loaded on current host
Kim Alvefur <zash@zash.se>
parents:
12922
diff
changeset
|
580 print(" - mod_" .. dep); |
|
918dfbb330fd
mod_admin_shell: Limit module dependency listings to loaded on current host
Kim Alvefur <zash@zash.se>
parents:
12922
diff
changeset
|
581 end |
|
11603
4e24408a3f57
mod_admin_shell: module:info: List dependencies
Kim Alvefur <zash@zash.se>
parents:
11602
diff
changeset
|
582 end |
|
4e24408a3f57
mod_admin_shell: module:info: List dependencies
Kim Alvefur <zash@zash.se>
parents:
11602
diff
changeset
|
583 end |
|
12922
aaf055d6fe7a
mod_admin_shell: Show reverse dependencies in module:info()
Kim Alvefur <zash@zash.se>
parents:
12908
diff
changeset
|
584 if mod.module.reverse_dependencies and next(mod.module.reverse_dependencies) ~= nil then |
|
aaf055d6fe7a
mod_admin_shell: Show reverse dependencies in module:info()
Kim Alvefur <zash@zash.se>
parents:
12908
diff
changeset
|
585 print(" reverse dependencies:"); |
|
aaf055d6fe7a
mod_admin_shell: Show reverse dependencies in module:info()
Kim Alvefur <zash@zash.se>
parents:
12908
diff
changeset
|
586 for dep in pairs(mod.module.reverse_dependencies) do |
|
12927
918dfbb330fd
mod_admin_shell: Limit module dependency listings to loaded on current host
Kim Alvefur <zash@zash.se>
parents:
12922
diff
changeset
|
587 if modulemanager.is_loaded(host, dep) then |
|
918dfbb330fd
mod_admin_shell: Limit module dependency listings to loaded on current host
Kim Alvefur <zash@zash.se>
parents:
12922
diff
changeset
|
588 print(" - mod_" .. dep); |
|
918dfbb330fd
mod_admin_shell: Limit module dependency listings to loaded on current host
Kim Alvefur <zash@zash.se>
parents:
12922
diff
changeset
|
589 end |
|
12922
aaf055d6fe7a
mod_admin_shell: Show reverse dependencies in module:info()
Kim Alvefur <zash@zash.se>
parents:
12908
diff
changeset
|
590 end |
|
aaf055d6fe7a
mod_admin_shell: Show reverse dependencies in module:info()
Kim Alvefur <zash@zash.se>
parents:
12908
diff
changeset
|
591 end |
|
11601
9483728f890f
mod_admin_shell: Add basic command that shows more info about loaded modules
Kim Alvefur <zash@zash.se>
parents:
11523
diff
changeset
|
592 end |
|
9483728f890f
mod_admin_shell: Add basic command that shows more info about loaded modules
Kim Alvefur <zash@zash.se>
parents:
11523
diff
changeset
|
593 return true; |
|
9483728f890f
mod_admin_shell: Add basic command that shows more info about loaded modules
Kim Alvefur <zash@zash.se>
parents:
11523
diff
changeset
|
594 end |
|
9483728f890f
mod_admin_shell: Add basic command that shows more info about loaded modules
Kim Alvefur <zash@zash.se>
parents:
11523
diff
changeset
|
595 |
|
12603
05ca75309fa0
mod_admin_shell: Remove obsolete module:load() argument from 0.8 time
Kim Alvefur <zash@zash.se>
parents:
12589
diff
changeset
|
596 function def_env.module:load(name, hosts) |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
597 hosts = get_hosts_with_module(hosts); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
598 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
599 -- Load the module for each host |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
600 local ok, err, count, mod = true, nil, 0; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
601 for host in hosts do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
602 if (not modulemanager.is_loaded(host, name)) then |
|
12603
05ca75309fa0
mod_admin_shell: Remove obsolete module:load() argument from 0.8 time
Kim Alvefur <zash@zash.se>
parents:
12589
diff
changeset
|
603 mod, err = modulemanager.load(host, name); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
604 if not mod then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
605 ok = false; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
606 if err == "global-module-already-loaded" then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
607 if count > 0 then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
608 ok, err, count = true, nil, 1; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
609 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
610 break; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
611 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
612 self.session.print(err or "Unknown error loading module"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
613 else |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
614 count = count + 1; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
615 self.session.print("Loaded for "..mod.module.host); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
616 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
617 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
618 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
619 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
620 return ok, (ok and "Module loaded onto "..count.." host"..(count ~= 1 and "s" or "")) or ("Last error: "..tostring(err)); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
621 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
622 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
623 function def_env.module:unload(name, hosts) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
624 hosts = get_hosts_with_module(hosts, name); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
625 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
626 -- Unload the module for each host |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
627 local ok, err, count = true, nil, 0; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
628 for host in hosts do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
629 if modulemanager.is_loaded(host, name) then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
630 ok, err = modulemanager.unload(host, name); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
631 if not ok then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
632 ok = false; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
633 self.session.print(err or "Unknown error unloading module"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
634 else |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
635 count = count + 1; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
636 self.session.print("Unloaded from "..host); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
637 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
638 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
639 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
640 return ok, (ok and "Module unloaded from "..count.." host"..(count ~= 1 and "s" or "")) or ("Last error: "..tostring(err)); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
641 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
642 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
643 local function _sort_hosts(a, b) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
644 if a == "*" then return true |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
645 elseif b == "*" then return false |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
646 else return a:gsub("[^.]+", string.reverse):reverse() < b:gsub("[^.]+", string.reverse):reverse(); end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
647 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
648 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
649 function def_env.module:reload(name, hosts) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
650 hosts = array.collect(get_hosts_with_module(hosts, name)):sort(_sort_hosts) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
651 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
652 -- Reload the module for each host |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
653 local ok, err, count = true, nil, 0; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
654 for _, host in ipairs(hosts) do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
655 if modulemanager.is_loaded(host, name) then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
656 ok, err = modulemanager.reload(host, name); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
657 if not ok then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
658 ok = false; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
659 self.session.print(err or "Unknown error reloading module"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
660 else |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
661 count = count + 1; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
662 if ok == nil then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
663 ok = true; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
664 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
665 self.session.print("Reloaded on "..host); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
666 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
667 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
668 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
669 return ok, (ok and "Module reloaded on "..count.." host"..(count ~= 1 and "s" or "")) or ("Last error: "..tostring(err)); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
670 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
671 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
672 function def_env.module:list(hosts) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
673 hosts = array.collect(set.new({ not hosts and "*" or nil }) + get_hosts_set(hosts)):sort(_sort_hosts); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
674 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
675 local print = self.session.print; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
676 for _, host in ipairs(hosts) do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
677 print((host == "*" and "Global" or host)..":"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
678 local modules = array.collect(keys(modulemanager.get_modules(host) or {})):sort(); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
679 if #modules == 0 then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
680 if prosody.hosts[host] then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
681 print(" No modules loaded"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
682 else |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
683 print(" Host not found"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
684 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
685 else |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
686 for _, name in ipairs(modules) do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
687 local status, status_text = modulemanager.get_module(host, name).module:get_status(); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
688 local status_summary = ""; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
689 if status == "warn" or status == "error" then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
690 status_summary = (" (%s: %s)"):format(status, status_text); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
691 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
692 print((" %s%s"):format(name, status_summary)); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
693 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
694 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
695 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
696 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
697 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
698 def_env.config = {}; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
699 function def_env.config:load(filename, format) |
|
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
700 local config_load = require "prosody.core.configmanager".load; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
701 local ok, err = config_load(filename, format); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
702 if not ok then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
703 return false, err or "Unknown error loading config"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
704 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
705 return true, "Config loaded"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
706 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
707 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
708 function def_env.config:get(host, key) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
709 if key == nil then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
710 host, key = "*", host; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
711 end |
|
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
712 local config_get = require "prosody.core.configmanager".get |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
713 return true, serialize_config(config_get(host, key)); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
714 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
715 |
|
13062
da51c36ed1e7
mod_admin_shell: Add config:set([host,] key, value) because why not
Kim Alvefur <zash@zash.se>
parents:
13061
diff
changeset
|
716 function def_env.config:set(host, key, value) |
|
da51c36ed1e7
mod_admin_shell: Add config:set([host,] key, value) because why not
Kim Alvefur <zash@zash.se>
parents:
13061
diff
changeset
|
717 if host ~= "*" and not prosody.hosts[host] then |
|
da51c36ed1e7
mod_admin_shell: Add config:set([host,] key, value) because why not
Kim Alvefur <zash@zash.se>
parents:
13061
diff
changeset
|
718 host, key, value = "*", host, key; |
|
da51c36ed1e7
mod_admin_shell: Add config:set([host,] key, value) because why not
Kim Alvefur <zash@zash.se>
parents:
13061
diff
changeset
|
719 end |
|
da51c36ed1e7
mod_admin_shell: Add config:set([host,] key, value) because why not
Kim Alvefur <zash@zash.se>
parents:
13061
diff
changeset
|
720 return require "prosody.core.configmanager".set(host, key, value); |
|
da51c36ed1e7
mod_admin_shell: Add config:set([host,] key, value) because why not
Kim Alvefur <zash@zash.se>
parents:
13061
diff
changeset
|
721 end |
|
da51c36ed1e7
mod_admin_shell: Add config:set([host,] key, value) because why not
Kim Alvefur <zash@zash.se>
parents:
13061
diff
changeset
|
722 |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
723 function def_env.config:reload() |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
724 local ok, err = prosody.reload_config(); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
725 return ok, (ok and "Config reloaded (you may need to reload modules to take effect)") or tostring(err); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
726 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
727 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
728 def_env.c2s = {}; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
729 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
730 local function get_jid(session) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
731 if session.username then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
732 return session.full_jid or jid_join(session.username, session.host, session.resource); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
733 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
734 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
735 local conn = session.conn; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
736 local ip = session.ip or "?"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
737 local clientport = conn and conn:clientport() or "?"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
738 local serverip = conn and conn.server and conn:server():ip() or "?"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
739 local serverport = conn and conn:serverport() or "?" |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
740 return jid_join("["..ip.."]:"..clientport, session.host or "["..serverip.."]:"..serverport); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
741 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
742 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
743 local function get_c2s() |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
744 local c2s = array.collect(values(prosody.full_sessions)); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
745 c2s:append(array.collect(values(module:shared"/*/c2s/sessions"))); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
746 c2s:append(array.collect(values(module:shared"/*/bosh/sessions"))); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
747 c2s:unique(); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
748 return c2s; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
749 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
750 |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
751 local function _sort_by_jid(a, b) |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
752 if a.host == b.host then |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
753 if a.username == b.username then return (a.resource or "") > (b.resource or ""); end |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
754 return (a.username or "") > (b.username or ""); |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
755 end |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
756 return _sort_hosts(a.host or "", b.host or ""); |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
757 end |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
758 |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
759 local function show_c2s(callback) |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
760 get_c2s():sort(_sort_by_jid):map(function (session) |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
761 callback(get_jid(session), session) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
762 end); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
763 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
764 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
765 function def_env.c2s:count() |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
766 local c2s = get_c2s(); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
767 return true, "Total: ".. #c2s .." clients"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
768 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
769 |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
770 local function get_s2s_hosts(session) --> local,remote |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
771 if session.direction == "outgoing" then |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
772 return session.host or session.from_host, session.to_host; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
773 elseif session.direction == "incoming" then |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
774 return session.host or session.to_host, session.from_host; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
775 end |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
776 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
777 |
|
12224
2b348d65cd69
mod_admin_shell: Add help section about customizing table columns
Kim Alvefur <zash@zash.se>
parents:
12209
diff
changeset
|
778 available_columns = { |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
779 jid = { |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
780 title = "JID"; |
|
12229
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
781 description = "Full JID of user session"; |
|
13037
635ed9a362ee
mod_admin_shell: Dynamically size JIDs and hosts
Kim Alvefur <zash@zash.se>
parents:
13036
diff
changeset
|
782 width = "3p"; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
783 key = "full_jid"; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
784 mapper = function(full_jid, session) return full_jid or get_jid(session) end; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
785 }; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
786 host = { |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
787 title = "Host"; |
|
12229
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
788 description = "Local hostname"; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
789 key = "host"; |
|
13037
635ed9a362ee
mod_admin_shell: Dynamically size JIDs and hosts
Kim Alvefur <zash@zash.se>
parents:
13036
diff
changeset
|
790 width = "1p"; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
791 mapper = function(host, session) |
|
11892
e712133b4de1
util.human.io: Pass nil to cell mapper to signal missing value
Kim Alvefur <zash@zash.se>
parents:
11891
diff
changeset
|
792 return host or get_s2s_hosts(session) or "?"; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
793 end; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
794 }; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
795 remote = { |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
796 title = "Remote"; |
|
12229
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
797 description = "Remote hostname"; |
|
13037
635ed9a362ee
mod_admin_shell: Dynamically size JIDs and hosts
Kim Alvefur <zash@zash.se>
parents:
13036
diff
changeset
|
798 width = "1p"; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
799 mapper = function(_, session) |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
800 return select(2, get_s2s_hosts(session)); |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
801 end; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
802 }; |
|
12023
5a3781a12285
mod_admin_shell: Add port as a c2s/s2s:show column definition
Kim Alvefur <zash@zash.se>
parents:
12019
diff
changeset
|
803 port = { |
|
5a3781a12285
mod_admin_shell: Add port as a c2s/s2s:show column definition
Kim Alvefur <zash@zash.se>
parents:
12019
diff
changeset
|
804 title = "Port"; |
|
12229
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
805 description = "Server port used"; |
|
13035
93c1590b5951
mod_admin_shell: Calculate widths of columns from example values
Kim Alvefur <zash@zash.se>
parents:
13034
diff
changeset
|
806 width = #string.format("%d", 0xffff); -- max 16 bit unsigned integer |
|
12023
5a3781a12285
mod_admin_shell: Add port as a c2s/s2s:show column definition
Kim Alvefur <zash@zash.se>
parents:
12019
diff
changeset
|
807 align = "right"; |
|
5a3781a12285
mod_admin_shell: Add port as a c2s/s2s:show column definition
Kim Alvefur <zash@zash.se>
parents:
12019
diff
changeset
|
808 key = "conn"; |
|
12787
3735ad8d6f8e
mod_admin_shell: Ensure connection exists to get port from (fixes #1777)
Kim Alvefur <zash@zash.se>
parents:
12637
diff
changeset
|
809 mapper = function(conn) |
|
3735ad8d6f8e
mod_admin_shell: Ensure connection exists to get port from (fixes #1777)
Kim Alvefur <zash@zash.se>
parents:
12637
diff
changeset
|
810 if conn then |
|
3735ad8d6f8e
mod_admin_shell: Ensure connection exists to get port from (fixes #1777)
Kim Alvefur <zash@zash.se>
parents:
12637
diff
changeset
|
811 return conn:serverport(); |
|
3735ad8d6f8e
mod_admin_shell: Ensure connection exists to get port from (fixes #1777)
Kim Alvefur <zash@zash.se>
parents:
12637
diff
changeset
|
812 end |
|
3735ad8d6f8e
mod_admin_shell: Ensure connection exists to get port from (fixes #1777)
Kim Alvefur <zash@zash.se>
parents:
12637
diff
changeset
|
813 end; |
|
12023
5a3781a12285
mod_admin_shell: Add port as a c2s/s2s:show column definition
Kim Alvefur <zash@zash.se>
parents:
12019
diff
changeset
|
814 }; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
815 dir = { |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
816 title = "Dir"; |
|
12229
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
817 description = "Direction of server-to-server connection"; |
|
13035
93c1590b5951
mod_admin_shell: Calculate widths of columns from example values
Kim Alvefur <zash@zash.se>
parents:
13034
diff
changeset
|
818 width = #"<->"; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
819 key = "direction"; |
|
11888
050c515fe9aa
mod_admin_shell: Indicate bi-directional s2s connections
Kim Alvefur <zash@zash.se>
parents:
11887
diff
changeset
|
820 mapper = function(dir, session) |
|
050c515fe9aa
mod_admin_shell: Indicate bi-directional s2s connections
Kim Alvefur <zash@zash.se>
parents:
11887
diff
changeset
|
821 if session.incoming and session.outgoing then return "<->"; end |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
822 if dir == "outgoing" then return "-->"; end |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
823 if dir == "incoming" then return "<--"; end |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
824 end; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
825 }; |
|
13036
1612c7f7dd55
mod_admin_shell: More dynamic widths calculations
Kim Alvefur <zash@zash.se>
parents:
13035
diff
changeset
|
826 id = { |
|
1612c7f7dd55
mod_admin_shell: More dynamic widths calculations
Kim Alvefur <zash@zash.se>
parents:
13035
diff
changeset
|
827 title = "Session ID"; |
|
1612c7f7dd55
mod_admin_shell: More dynamic widths calculations
Kim Alvefur <zash@zash.se>
parents:
13035
diff
changeset
|
828 description = "Internal session ID used in logging"; |
|
1612c7f7dd55
mod_admin_shell: More dynamic widths calculations
Kim Alvefur <zash@zash.se>
parents:
13035
diff
changeset
|
829 -- Depends on log16(?) of pointers which may vary over runtime, so + some margin |
|
1612c7f7dd55
mod_admin_shell: More dynamic widths calculations
Kim Alvefur <zash@zash.se>
parents:
13035
diff
changeset
|
830 width = math.max(#"c2s", #"s2sin", #"s2sout") + #(tostring({}):match("%x+$")) + 2; |
|
1612c7f7dd55
mod_admin_shell: More dynamic widths calculations
Kim Alvefur <zash@zash.se>
parents:
13035
diff
changeset
|
831 key = "id"; |
|
1612c7f7dd55
mod_admin_shell: More dynamic widths calculations
Kim Alvefur <zash@zash.se>
parents:
13035
diff
changeset
|
832 }; |
|
1612c7f7dd55
mod_admin_shell: More dynamic widths calculations
Kim Alvefur <zash@zash.se>
parents:
13035
diff
changeset
|
833 type = { |
|
1612c7f7dd55
mod_admin_shell: More dynamic widths calculations
Kim Alvefur <zash@zash.se>
parents:
13035
diff
changeset
|
834 title = "Type"; |
|
1612c7f7dd55
mod_admin_shell: More dynamic widths calculations
Kim Alvefur <zash@zash.se>
parents:
13035
diff
changeset
|
835 description = "Session type"; |
|
1612c7f7dd55
mod_admin_shell: More dynamic widths calculations
Kim Alvefur <zash@zash.se>
parents:
13035
diff
changeset
|
836 width = math.max(#"c2s_unauthed", #"s2sout_unauthed"); |
|
1612c7f7dd55
mod_admin_shell: More dynamic widths calculations
Kim Alvefur <zash@zash.se>
parents:
13035
diff
changeset
|
837 key = "type"; |
|
1612c7f7dd55
mod_admin_shell: More dynamic widths calculations
Kim Alvefur <zash@zash.se>
parents:
13035
diff
changeset
|
838 }; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
839 method = { |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
840 title = "Method"; |
|
12229
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
841 description = "Connection method"; |
|
13035
93c1590b5951
mod_admin_shell: Calculate widths of columns from example values
Kim Alvefur <zash@zash.se>
parents:
13034
diff
changeset
|
842 width = math.max(#"BOSH", #"WebSocket", #"TCP"); |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
843 mapper = function(_, session) |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
844 if session.bosh_version then |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
845 return "BOSH"; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
846 elseif session.websocket_request then |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
847 return "WebSocket"; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
848 else |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
849 return "TCP"; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
850 end |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
851 end; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
852 }; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
853 ipv = { |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
854 title = "IPv"; |
|
12229
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
855 description = "Internet Protocol version (4 or 6)"; |
|
13035
93c1590b5951
mod_admin_shell: Calculate widths of columns from example values
Kim Alvefur <zash@zash.se>
parents:
13034
diff
changeset
|
856 width = #"IPvX"; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
857 key = "ip"; |
|
11892
e712133b4de1
util.human.io: Pass nil to cell mapper to signal missing value
Kim Alvefur <zash@zash.se>
parents:
11891
diff
changeset
|
858 mapper = function(ip) if ip then return ip:find(":") and "IPv6" or "IPv4"; end end; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
859 }; |
|
13035
93c1590b5951
mod_admin_shell: Calculate widths of columns from example values
Kim Alvefur <zash@zash.se>
parents:
13034
diff
changeset
|
860 ip = { |
|
93c1590b5951
mod_admin_shell: Calculate widths of columns from example values
Kim Alvefur <zash@zash.se>
parents:
13034
diff
changeset
|
861 title = "IP address"; |
|
93c1590b5951
mod_admin_shell: Calculate widths of columns from example values
Kim Alvefur <zash@zash.se>
parents:
13034
diff
changeset
|
862 description = "IP address the session connected from"; |
|
13043
d4f7118d1531
mod_admin_shell: Make IP column thinner if IPv6 is disabled
Kim Alvefur <zash@zash.se>
parents:
13042
diff
changeset
|
863 width = module:get_option_boolean("use_ipv6", true) and #"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" or #"198.051.100.255"; |
|
13035
93c1590b5951
mod_admin_shell: Calculate widths of columns from example values
Kim Alvefur <zash@zash.se>
parents:
13034
diff
changeset
|
864 key = "ip"; |
|
93c1590b5951
mod_admin_shell: Calculate widths of columns from example values
Kim Alvefur <zash@zash.se>
parents:
13034
diff
changeset
|
865 }; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
866 status = { |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
867 title = "Status"; |
|
12229
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
868 description = "Presence status"; |
|
13035
93c1590b5951
mod_admin_shell: Calculate widths of columns from example values
Kim Alvefur <zash@zash.se>
parents:
13034
diff
changeset
|
869 width = math.max(#"online", #"chat"); |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
870 key = "presence"; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
871 mapper = function(p) |
|
11946
c0a01e5f5656
mod_admin_shell: Reduce width of 'Status' column
Kim Alvefur <zash@zash.se>
parents:
11945
diff
changeset
|
872 if not p then return ""; end |
|
c0a01e5f5656
mod_admin_shell: Reduce width of 'Status' column
Kim Alvefur <zash@zash.se>
parents:
11945
diff
changeset
|
873 return p:get_child_text("show") or "online"; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
874 end; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
875 }; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
876 secure = { |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
877 title = "Security"; |
|
12229
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
878 description = "TLS version or security status"; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
879 key = "conn"; |
|
13041
61b00bd20074
mod_admin_shell: Fix attempt to compare number with string
Kim Alvefur <zash@zash.se>
parents:
13037
diff
changeset
|
880 width = math.max(#"secure", #"TLSvX.Y"); |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
881 mapper = function(conn, session) |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
882 if not session.secure then return "insecure"; end |
|
11905
bbfa707a4756
mod_admin_shell: Handle absence of connection in security column (thanks arcseconds)
Kim Alvefur <zash@zash.se>
parents:
11892
diff
changeset
|
883 if not conn or not conn:ssl() then return "secure" end |
|
12480
7e9ebdc75ce4
net: isolate LuaSec-specifics
Jonas Schäfer <jonas@wielicki.name>
parents:
12464
diff
changeset
|
884 local tls_info = conn.ssl_info and conn:ssl_info(); |
|
11945
142b9c4010fe
mod_admin_shell: Reduce width of 'Security' column (thanks Link Mauve)
Kim Alvefur <zash@zash.se>
parents:
11943
diff
changeset
|
885 return tls_info and tls_info.protocol or "secure"; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
886 end; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
887 }; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
888 encryption = { |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
889 title = "Encryption"; |
|
12229
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
890 description = "Encryption algorithm used (TLS cipher suite)"; |
|
13035
93c1590b5951
mod_admin_shell: Calculate widths of columns from example values
Kim Alvefur <zash@zash.se>
parents:
13034
diff
changeset
|
891 -- openssl ciphers 'ALL:COMPLEMENTOFALL' | tr : \\n | awk 'BEGIN {n=1} length() > n {n=length()} END {print(n)}' |
|
13036
1612c7f7dd55
mod_admin_shell: More dynamic widths calculations
Kim Alvefur <zash@zash.se>
parents:
13035
diff
changeset
|
892 width = #"ECDHE-ECDSA-CHACHA20-POLY1305"; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
893 key = "conn"; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
894 mapper = function(conn) |
|
12480
7e9ebdc75ce4
net: isolate LuaSec-specifics
Jonas Schäfer <jonas@wielicki.name>
parents:
12464
diff
changeset
|
895 local info = conn and conn.ssl_info and conn:ssl_info(); |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
896 if info then return info.cipher end |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
897 end; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
898 }; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
899 cert = { |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
900 title = "Certificate"; |
|
12229
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
901 description = "Validation status of certificate"; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
902 key = "cert_identity_status"; |
|
13035
93c1590b5951
mod_admin_shell: Calculate widths of columns from example values
Kim Alvefur <zash@zash.se>
parents:
13034
diff
changeset
|
903 width = math.max(#"Expired", #"Self-signed", #"Untrusted", #"Mismatched", #"Unknown"); |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
904 mapper = function(cert_status, session) |
|
11892
e712133b4de1
util.human.io: Pass nil to cell mapper to signal missing value
Kim Alvefur <zash@zash.se>
parents:
11891
diff
changeset
|
905 if cert_status then return capitalize(cert_status); end |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
906 if session.cert_chain_status == "Invalid" then |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
907 local cert_errors = set.new(session.cert_chain_errors[1]); |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
908 if cert_errors:contains("certificate has expired") then |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
909 return "Expired"; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
910 elseif cert_errors:contains("self signed certificate") then |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
911 return "Self-signed"; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
912 end |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
913 return "Untrusted"; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
914 elseif session.cert_identity_status == "invalid" then |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
915 return "Mismatched"; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
916 end |
|
12293
145cb8305c67
mod_admin_shell: Squeeze some characters out of the Certificate column
Kim Alvefur <zash@zash.se>
parents:
12291
diff
changeset
|
917 return "Unknown"; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
918 end; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
919 }; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
920 sni = { |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
921 title = "SNI"; |
|
12229
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
922 description = "Hostname requested in TLS"; |
|
13037
635ed9a362ee
mod_admin_shell: Dynamically size JIDs and hosts
Kim Alvefur <zash@zash.se>
parents:
13036
diff
changeset
|
923 width = "1p"; -- same as host, remote etc |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
924 mapper = function(_, session) |
|
11892
e712133b4de1
util.human.io: Pass nil to cell mapper to signal missing value
Kim Alvefur <zash@zash.se>
parents:
11891
diff
changeset
|
925 if not session.conn then return end |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
926 local sock = session.conn:socket(); |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
927 return sock and sock.getsniname and sock:getsniname() or ""; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
928 end; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
929 }; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
930 alpn = { |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
931 title = "ALPN"; |
|
12229
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
932 description = "Protocol requested in TLS"; |
|
13035
93c1590b5951
mod_admin_shell: Calculate widths of columns from example values
Kim Alvefur <zash@zash.se>
parents:
13034
diff
changeset
|
933 width = math.max(#"http/1.1", #"xmpp-client", #"xmpp-server"); |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
934 mapper = function(_, session) |
|
11892
e712133b4de1
util.human.io: Pass nil to cell mapper to signal missing value
Kim Alvefur <zash@zash.se>
parents:
11891
diff
changeset
|
935 if not session.conn then return end |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
936 local sock = session.conn:socket(); |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
937 return sock and sock.getalpn and sock:getalpn() or ""; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
938 end; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
939 }; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
940 smacks = { |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
941 title = "SM"; |
|
12229
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
942 description = "Stream Management (XEP-0198) status"; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
943 key = "smacks"; |
|
13035
93c1590b5951
mod_admin_shell: Calculate widths of columns from example values
Kim Alvefur <zash@zash.se>
parents:
13034
diff
changeset
|
944 -- FIXME shorter synonym for hibernating |
|
93c1590b5951
mod_admin_shell: Calculate widths of columns from example values
Kim Alvefur <zash@zash.se>
parents:
13034
diff
changeset
|
945 width = math.max(#"yes", #"no", #"hibernating"); |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
946 mapper = function(smacks_xmlns, session) |
|
11892
e712133b4de1
util.human.io: Pass nil to cell mapper to signal missing value
Kim Alvefur <zash@zash.se>
parents:
11891
diff
changeset
|
947 if not smacks_xmlns then return "no"; end |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
948 if session.hibernating then return "hibernating"; end |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
949 return "yes"; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
950 end; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
951 }; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
952 smacks_queue = { |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
953 title = "SM Queue"; |
|
12229
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
954 description = "Length of Stream Management stanza queue"; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
955 key = "outgoing_stanza_queue"; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
956 width = 8; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
957 align = "right"; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
958 mapper = function (queue) |
|
12056
e62025f949f9
mod_smacks: Limit queue memory consumption using new util
Kim Alvefur <zash@zash.se>
parents:
12023
diff
changeset
|
959 return queue and tostring(queue:count_unacked()); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
960 end |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
961 }; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
962 csi = { |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
963 title = "CSI State"; |
|
12229
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
964 description = "Client State Indication (XEP-0352)"; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
965 key = "state"; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
966 -- TODO include counter |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
967 }; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
968 s2s_sasl = { |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
969 title = "SASL"; |
|
12229
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
970 description = "Server authentication status"; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
971 key = "external_auth"; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
972 width = 10; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
973 mapper = capitalize |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
974 }; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
975 dialback = { |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
976 title = "Dialback"; |
|
12229
30ea791ce817
mod_admin_shell: Add descriptions of each column to 'help columns'
Kim Alvefur <zash@zash.se>
parents:
12228
diff
changeset
|
977 description = "Legacy server verification"; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
978 key = "dialback_key"; |
|
13035
93c1590b5951
mod_admin_shell: Calculate widths of columns from example values
Kim Alvefur <zash@zash.se>
parents:
13034
diff
changeset
|
979 width = math.max(#"Not used", #"Not initiated", #"Initiated", #"Completed"); |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
980 mapper = function (dialback_key, session) |
|
11892
e712133b4de1
util.human.io: Pass nil to cell mapper to signal missing value
Kim Alvefur <zash@zash.se>
parents:
11891
diff
changeset
|
981 if not dialback_key then |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
982 if session.type == "s2sin" or session.type == "s2sout" then |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
983 return "Not used"; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
984 end |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
985 return "Not initiated"; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
986 elseif session.type == "s2sin_unauthed" or session.type == "s2sout_unauthed" then |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
987 return "Initiated"; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
988 else |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
989 return "Completed"; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
990 end |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
991 end |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
992 }; |
|
12660
e8f57970ced5
mod_admin_shell: Show session role in c2s:show
Kim Alvefur <zash@zash.se>
parents:
12638
diff
changeset
|
993 role = { |
|
e8f57970ced5
mod_admin_shell: Show session role in c2s:show
Kim Alvefur <zash@zash.se>
parents:
12638
diff
changeset
|
994 title = "Role"; |
|
13034
1387888a5596
mod_admin_shell: Strip 'prosody:' prefix to allow narrower Role column
Kim Alvefur <zash@zash.se>
parents:
13013
diff
changeset
|
995 description = "Session role with 'prosody:' prefix removed"; |
|
1387888a5596
mod_admin_shell: Strip 'prosody:' prefix to allow narrower Role column
Kim Alvefur <zash@zash.se>
parents:
13013
diff
changeset
|
996 width = #"admin"; |
|
12660
e8f57970ced5
mod_admin_shell: Show session role in c2s:show
Kim Alvefur <zash@zash.se>
parents:
12638
diff
changeset
|
997 key = "role"; |
|
e8f57970ced5
mod_admin_shell: Show session role in c2s:show
Kim Alvefur <zash@zash.se>
parents:
12638
diff
changeset
|
998 mapper = function(role) |
|
13034
1387888a5596
mod_admin_shell: Strip 'prosody:' prefix to allow narrower Role column
Kim Alvefur <zash@zash.se>
parents:
13013
diff
changeset
|
999 local name = role and role.name; |
|
1387888a5596
mod_admin_shell: Strip 'prosody:' prefix to allow narrower Role column
Kim Alvefur <zash@zash.se>
parents:
13013
diff
changeset
|
1000 return name and name:match"^prosody:(%w+)" or name; |
|
12660
e8f57970ced5
mod_admin_shell: Show session role in c2s:show
Kim Alvefur <zash@zash.se>
parents:
12638
diff
changeset
|
1001 end; |
|
e8f57970ced5
mod_admin_shell: Show session role in c2s:show
Kim Alvefur <zash@zash.se>
parents:
12638
diff
changeset
|
1002 } |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1003 }; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1004 |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1005 local function get_colspec(colspec, default) |
|
11887
b043e1bb8e8e
mod_admin_shell: Allow passing columns as a string for convenience
Kim Alvefur <zash@zash.se>
parents:
11886
diff
changeset
|
1006 if type(colspec) == "string" then colspec = array(colspec:gmatch("%S+")); end |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1007 local columns = {}; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1008 for i, col in pairs(colspec or default) do |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1009 if type(col) == "string" then |
|
13042
0f05804e974d
mod_admin_shell: Make default column width 1 part
Kim Alvefur <zash@zash.se>
parents:
13041
diff
changeset
|
1010 columns[i] = available_columns[col] or { title = capitalize(col); width = "1p"; key = col }; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1011 elseif type(col) ~= "table" then |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1012 return false, ("argument %d: expected string|table but got %s"):format(i, type(col)); |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1013 else |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1014 columns[i] = col; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1015 end |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1016 end |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1017 |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1018 return columns; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1019 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1020 |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1021 function def_env.c2s:show(match_jid, colspec) |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1022 local print = self.session.print; |
|
12660
e8f57970ced5
mod_admin_shell: Show session role in c2s:show
Kim Alvefur <zash@zash.se>
parents:
12638
diff
changeset
|
1023 local columns = get_colspec(colspec, { "id"; "jid"; "role"; "ipv"; "status"; "secure"; "smacks"; "csi" }); |
|
12529
7dae6d29b71d
prosodyctl shell: Communicate width of terminal to mod_admin_shell
Kim Alvefur <zash@zash.se>
parents:
12506
diff
changeset
|
1024 local row = format_table(columns, self.session.width); |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1025 |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1026 local function match(session) |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1027 local jid = get_jid(session) |
|
13053
8128c4f1b08b
mod_admin_shell: Allow "*" as substitute for 'nil' for easier CLI usage
Kim Alvefur <zash@zash.se>
parents:
13043
diff
changeset
|
1028 return (not match_jid) or match_jid == "*" or jid_compare(jid, match_jid); |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1029 end |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1030 |
|
11886
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1031 local group_by_host = true; |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1032 for _, col in ipairs(columns) do |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1033 if col.key == "full_jid" or col.key == "host" then |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1034 group_by_host = false; |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1035 break |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1036 end |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1037 end |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1038 |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1039 if not group_by_host then print(row()); end |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1040 local currenthost = nil; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1041 |
|
11917
d27b74b25105
mod_admin_shell: Return counts of shown vs total from new table views
Kim Alvefur <zash@zash.se>
parents:
11905
diff
changeset
|
1042 local c2s_sessions = get_c2s(); |
|
d27b74b25105
mod_admin_shell: Return counts of shown vs total from new table views
Kim Alvefur <zash@zash.se>
parents:
11905
diff
changeset
|
1043 local total_count = #c2s_sessions; |
|
d27b74b25105
mod_admin_shell: Return counts of shown vs total from new table views
Kim Alvefur <zash@zash.se>
parents:
11905
diff
changeset
|
1044 c2s_sessions:filter(match):sort(_sort_by_jid); |
|
d27b74b25105
mod_admin_shell: Return counts of shown vs total from new table views
Kim Alvefur <zash@zash.se>
parents:
11905
diff
changeset
|
1045 local shown_count = #c2s_sessions; |
|
d27b74b25105
mod_admin_shell: Return counts of shown vs total from new table views
Kim Alvefur <zash@zash.se>
parents:
11905
diff
changeset
|
1046 for _, session in ipairs(c2s_sessions) do |
|
11886
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1047 if group_by_host and session.host ~= currenthost then |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1048 currenthost = session.host; |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1049 print("#",prosody.hosts[currenthost] or "Unknown host"); |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1050 print(row()); |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1051 end |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1052 |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1053 print(row(session)); |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1054 end |
|
11917
d27b74b25105
mod_admin_shell: Return counts of shown vs total from new table views
Kim Alvefur <zash@zash.se>
parents:
11905
diff
changeset
|
1055 if total_count ~= shown_count then |
|
d27b74b25105
mod_admin_shell: Return counts of shown vs total from new table views
Kim Alvefur <zash@zash.se>
parents:
11905
diff
changeset
|
1056 return true, ("%d out of %d c2s sessions shown"):format(shown_count, total_count); |
|
d27b74b25105
mod_admin_shell: Return counts of shown vs total from new table views
Kim Alvefur <zash@zash.se>
parents:
11905
diff
changeset
|
1057 end |
|
d27b74b25105
mod_admin_shell: Return counts of shown vs total from new table views
Kim Alvefur <zash@zash.se>
parents:
11905
diff
changeset
|
1058 return true, ("%d c2s sessions shown"):format(total_count); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1059 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1060 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1061 function def_env.c2s:show_tls(match_jid) |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1062 return self:show(match_jid, { "jid"; "id"; "secure"; "encryption" }); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1063 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1064 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1065 local function build_reason(text, condition) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1066 if text or condition then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1067 return { |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1068 text = text, |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1069 condition = condition or "undefined-condition", |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1070 }; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1071 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1072 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1073 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1074 function def_env.c2s:close(match_jid, text, condition) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1075 local count = 0; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1076 show_c2s(function (jid, session) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1077 if jid == match_jid or jid_bare(jid) == match_jid then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1078 count = count + 1; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1079 session:close(build_reason(text, condition)); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1080 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1081 end); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1082 return true, "Total: "..count.." sessions closed"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1083 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1084 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1085 function def_env.c2s:closeall(text, condition) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1086 local count = 0; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1087 --luacheck: ignore 212/jid |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1088 show_c2s(function (jid, session) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1089 count = count + 1; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1090 session:close(build_reason(text, condition)); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1091 end); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1092 return true, "Total: "..count.." sessions closed"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1093 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1094 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1095 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1096 def_env.s2s = {}; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1097 local function _sort_s2s(a, b) |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1098 local a_local, a_remote = get_s2s_hosts(a); |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1099 local b_local, b_remote = get_s2s_hosts(b); |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1100 if (a_local or "") == (b_local or "") then return _sort_hosts(a_remote or "", b_remote or ""); end |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1101 return _sort_hosts(a_local or "", b_local or ""); |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1102 end |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1103 |
|
13071
b5a419ac0f84
mod_admin_shell: Factor apart wildcard matching into function for reuse
Kim Alvefur <zash@zash.se>
parents:
13062
diff
changeset
|
1104 local function match_wildcard(match_jid, jid) |
|
b5a419ac0f84
mod_admin_shell: Factor apart wildcard matching into function for reuse
Kim Alvefur <zash@zash.se>
parents:
13062
diff
changeset
|
1105 -- host == host or (host) == *.(host) or sub(.host) == *(.host) |
|
b5a419ac0f84
mod_admin_shell: Factor apart wildcard matching into function for reuse
Kim Alvefur <zash@zash.se>
parents:
13062
diff
changeset
|
1106 return jid == match_jid or jid == match_jid:sub(3) or jid:sub(-#match_jid + 1) == match_jid:sub(2); |
|
b5a419ac0f84
mod_admin_shell: Factor apart wildcard matching into function for reuse
Kim Alvefur <zash@zash.se>
parents:
13062
diff
changeset
|
1107 end |
|
b5a419ac0f84
mod_admin_shell: Factor apart wildcard matching into function for reuse
Kim Alvefur <zash@zash.se>
parents:
13062
diff
changeset
|
1108 |
|
b5a419ac0f84
mod_admin_shell: Factor apart wildcard matching into function for reuse
Kim Alvefur <zash@zash.se>
parents:
13062
diff
changeset
|
1109 local function match_s2s_jid(session, match_jid) |
|
b5a419ac0f84
mod_admin_shell: Factor apart wildcard matching into function for reuse
Kim Alvefur <zash@zash.se>
parents:
13062
diff
changeset
|
1110 local host, remote = get_s2s_hosts(session); |
|
b5a419ac0f84
mod_admin_shell: Factor apart wildcard matching into function for reuse
Kim Alvefur <zash@zash.se>
parents:
13062
diff
changeset
|
1111 if not match_jid or match_jid == "*" then |
|
b5a419ac0f84
mod_admin_shell: Factor apart wildcard matching into function for reuse
Kim Alvefur <zash@zash.se>
parents:
13062
diff
changeset
|
1112 return true; |
|
b5a419ac0f84
mod_admin_shell: Factor apart wildcard matching into function for reuse
Kim Alvefur <zash@zash.se>
parents:
13062
diff
changeset
|
1113 elseif host == match_jid or remote == match_jid then |
|
b5a419ac0f84
mod_admin_shell: Factor apart wildcard matching into function for reuse
Kim Alvefur <zash@zash.se>
parents:
13062
diff
changeset
|
1114 return true; |
|
b5a419ac0f84
mod_admin_shell: Factor apart wildcard matching into function for reuse
Kim Alvefur <zash@zash.se>
parents:
13062
diff
changeset
|
1115 elseif match_jid:sub(1, 2) == "*." then |
|
b5a419ac0f84
mod_admin_shell: Factor apart wildcard matching into function for reuse
Kim Alvefur <zash@zash.se>
parents:
13062
diff
changeset
|
1116 return match_wildcard(match_jid, host) or match_wildcard(match_jid, remote); |
|
b5a419ac0f84
mod_admin_shell: Factor apart wildcard matching into function for reuse
Kim Alvefur <zash@zash.se>
parents:
13062
diff
changeset
|
1117 end |
|
b5a419ac0f84
mod_admin_shell: Factor apart wildcard matching into function for reuse
Kim Alvefur <zash@zash.se>
parents:
13062
diff
changeset
|
1118 return false; |
|
b5a419ac0f84
mod_admin_shell: Factor apart wildcard matching into function for reuse
Kim Alvefur <zash@zash.se>
parents:
13062
diff
changeset
|
1119 end |
|
b5a419ac0f84
mod_admin_shell: Factor apart wildcard matching into function for reuse
Kim Alvefur <zash@zash.se>
parents:
13062
diff
changeset
|
1120 |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1121 function def_env.s2s:show(match_jid, colspec) |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1122 local print = self.session.print; |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1123 local columns = get_colspec(colspec, { "id"; "host"; "dir"; "remote"; "ipv"; "secure"; "s2s_sasl"; "dialback" }); |
|
12529
7dae6d29b71d
prosodyctl shell: Communicate width of terminal to mod_admin_shell
Kim Alvefur <zash@zash.se>
parents:
12506
diff
changeset
|
1124 local row = format_table(columns, self.session.width); |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1125 |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1126 local function match(session) |
|
13071
b5a419ac0f84
mod_admin_shell: Factor apart wildcard matching into function for reuse
Kim Alvefur <zash@zash.se>
parents:
13062
diff
changeset
|
1127 return match_s2s_jid(session, match_jid); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1128 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1129 |
|
11886
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1130 local group_by_host = true; |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1131 local currenthost = nil; |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1132 for _, col in ipairs(columns) do |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1133 if col.key == "host" then |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1134 group_by_host = false; |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1135 break |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1136 end |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1137 end |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1138 |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1139 if not group_by_host then print(row()); end |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1140 |
|
11917
d27b74b25105
mod_admin_shell: Return counts of shown vs total from new table views
Kim Alvefur <zash@zash.se>
parents:
11905
diff
changeset
|
1141 local s2s_sessions = array(iterators.values(module:shared"/*/s2s/sessions")); |
|
d27b74b25105
mod_admin_shell: Return counts of shown vs total from new table views
Kim Alvefur <zash@zash.se>
parents:
11905
diff
changeset
|
1142 local total_count = #s2s_sessions; |
|
d27b74b25105
mod_admin_shell: Return counts of shown vs total from new table views
Kim Alvefur <zash@zash.se>
parents:
11905
diff
changeset
|
1143 s2s_sessions:filter(match):sort(_sort_s2s); |
|
d27b74b25105
mod_admin_shell: Return counts of shown vs total from new table views
Kim Alvefur <zash@zash.se>
parents:
11905
diff
changeset
|
1144 local shown_count = #s2s_sessions; |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1145 |
|
11886
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1146 for _, session in ipairs(s2s_sessions) do |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1147 if group_by_host and currenthost ~= get_s2s_hosts(session) then |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1148 currenthost = get_s2s_hosts(session); |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1149 print("#",prosody.hosts[currenthost] or "Unknown host"); |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1150 print(row()); |
|
b0b258e092da
mod_admin_shell: Optionally group session listings by host when not included as column
Kim Alvefur <zash@zash.se>
parents:
11885
diff
changeset
|
1151 end |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1152 |
|
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1153 print(row(session)); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1154 end |
|
11917
d27b74b25105
mod_admin_shell: Return counts of shown vs total from new table views
Kim Alvefur <zash@zash.se>
parents:
11905
diff
changeset
|
1155 if total_count ~= shown_count then |
|
d27b74b25105
mod_admin_shell: Return counts of shown vs total from new table views
Kim Alvefur <zash@zash.se>
parents:
11905
diff
changeset
|
1156 return true, ("%d out of %d s2s connections shown"):format(shown_count, total_count); |
|
d27b74b25105
mod_admin_shell: Return counts of shown vs total from new table views
Kim Alvefur <zash@zash.se>
parents:
11905
diff
changeset
|
1157 end |
|
d27b74b25105
mod_admin_shell: Return counts of shown vs total from new table views
Kim Alvefur <zash@zash.se>
parents:
11905
diff
changeset
|
1158 return true, ("%d s2s connections shown"):format(total_count); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1159 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1160 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1161 function def_env.s2s:show_tls(match_jid) |
|
11885
197642f9972f
mod_admin_shell: New table based implementation of c2s and s2s:show()
Kim Alvefur <zash@zash.se>
parents:
11850
diff
changeset
|
1162 return self:show(match_jid, { "id"; "host"; "dir"; "remote"; "secure"; "encryption"; "cert" }); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1163 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1164 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1165 local function print_subject(print, subject) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1166 for _, entry in ipairs(subject) do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1167 print( |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1168 (" %s: %q"):format( |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1169 entry.name or entry.oid, |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1170 entry.value:gsub("[\r\n%z%c]", " ") |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1171 ) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1172 ); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1173 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1174 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1175 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1176 -- As much as it pains me to use the 0-based depths that OpenSSL does, |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1177 -- I think there's going to be more confusion among operators if we |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1178 -- break from that. |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1179 local function print_errors(print, errors) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1180 for depth, t in pairs(errors) do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1181 print( |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1182 (" %d: %s"):format( |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1183 depth-1, |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1184 table.concat(t, "\n| ") |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1185 ) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1186 ); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1187 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1188 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1189 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1190 function def_env.s2s:showcert(domain) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1191 local print = self.session.print; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1192 local s2s_sessions = module:shared"/*/s2s/sessions"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1193 local domain_sessions = set.new(array.collect(values(s2s_sessions))) |
|
13072
7fcf41b541e0
mod_admin_shell: Use same wildcard matching in other s2s command
Kim Alvefur <zash@zash.se>
parents:
13071
diff
changeset
|
1194 /function(session) return match_s2s_jid(session, domain) and session or nil; end; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1195 local cert_set = {}; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1196 for session in domain_sessions do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1197 local conn = session.conn; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1198 conn = conn and conn:socket(); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1199 if not conn.getpeerchain then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1200 if conn.dohandshake then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1201 error("This version of LuaSec does not support certificate viewing"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1202 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1203 else |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1204 local cert = conn:getpeercertificate(); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1205 if cert then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1206 local certs = conn:getpeerchain(); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1207 local digest = cert:digest("sha1"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1208 if not cert_set[digest] then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1209 local chain_valid, chain_errors = conn:getpeerverification(); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1210 cert_set[digest] = { |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1211 { |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1212 from = session.from_host, |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1213 to = session.to_host, |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1214 direction = session.direction |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1215 }; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1216 chain_valid = chain_valid; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1217 chain_errors = chain_errors; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1218 certs = certs; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1219 }; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1220 else |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1221 table.insert(cert_set[digest], { |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1222 from = session.from_host, |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1223 to = session.to_host, |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1224 direction = session.direction |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1225 }); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1226 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1227 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1228 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1229 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1230 local domain_certs = array.collect(values(cert_set)); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1231 -- Phew. We now have a array of unique certificates presented by domain. |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1232 local n_certs = #domain_certs; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1233 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1234 if n_certs == 0 then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1235 return "No certificates found for "..domain; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1236 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1237 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1238 local function _capitalize_and_colon(byte) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1239 return string.upper(byte)..":"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1240 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1241 local function pretty_fingerprint(hash) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1242 return hash:gsub("..", _capitalize_and_colon):sub(1, -2); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1243 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1244 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1245 for cert_info in values(domain_certs) do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1246 local certs = cert_info.certs; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1247 local cert = certs[1]; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1248 print("---") |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1249 print("Fingerprint (SHA1): "..pretty_fingerprint(cert:digest("sha1"))); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1250 print(""); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1251 local n_streams = #cert_info; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1252 print("Currently used on "..n_streams.." stream"..(n_streams==1 and "" or "s")..":"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1253 for _, stream in ipairs(cert_info) do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1254 if stream.direction == "incoming" then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1255 print(" "..stream.to.." <- "..stream.from); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1256 else |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1257 print(" "..stream.from.." -> "..stream.to); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1258 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1259 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1260 print(""); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1261 local chain_valid, errors = cert_info.chain_valid, cert_info.chain_errors; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1262 local valid_identity = cert_verify_identity(domain, "xmpp-server", cert); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1263 if chain_valid then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1264 print("Trusted certificate: Yes"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1265 else |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1266 print("Trusted certificate: No"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1267 print_errors(print, errors); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1268 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1269 print(""); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1270 print("Issuer: "); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1271 print_subject(print, cert:issuer()); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1272 print(""); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1273 print("Valid for "..domain..": "..(valid_identity and "Yes" or "No")); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1274 print("Subject:"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1275 print_subject(print, cert:subject()); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1276 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1277 print("---"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1278 return ("Showing "..n_certs.." certificate" |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1279 ..(n_certs==1 and "" or "s") |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1280 .." presented by "..domain.."."); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1281 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1282 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1283 function def_env.s2s:close(from, to, text, condition) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1284 local print, count = self.session.print, 0; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1285 local s2s_sessions = module:shared"/*/s2s/sessions"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1286 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1287 local match_id; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1288 if from and not to then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1289 match_id, from = from, nil; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1290 elseif not to then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1291 return false, "Syntax: s2s:close('from', 'to') - Closes all s2s sessions from 'from' to 'to'"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1292 elseif from == to then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1293 return false, "Both from and to are the same... you can't do that :)"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1294 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1295 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1296 for _, session in pairs(s2s_sessions) do |
|
13072
7fcf41b541e0
mod_admin_shell: Use same wildcard matching in other s2s command
Kim Alvefur <zash@zash.se>
parents:
13071
diff
changeset
|
1297 local id = session.id or (session.type .. tostring(session):match("[a-f0-9]+$")); |
|
7fcf41b541e0
mod_admin_shell: Use same wildcard matching in other s2s command
Kim Alvefur <zash@zash.se>
parents:
13071
diff
changeset
|
1298 if (match_id and match_id == id) or ((from and match_wildcard(from, session.to_host)) or (to and match_wildcard(to, session.to_host))) then |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1299 print(("Closing connection from %s to %s [%s]"):format(session.from_host, session.to_host, id)); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1300 (session.close or s2smanager.destroy_session)(session, build_reason(text, condition)); |
|
13072
7fcf41b541e0
mod_admin_shell: Use same wildcard matching in other s2s command
Kim Alvefur <zash@zash.se>
parents:
13071
diff
changeset
|
1301 count = count + 1; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1302 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1303 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1304 return true, "Closed "..count.." s2s session"..((count == 1 and "") or "s"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1305 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1306 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1307 function def_env.s2s:closeall(host, text, condition) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1308 local count = 0; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1309 local s2s_sessions = module:shared"/*/s2s/sessions"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1310 for _,session in pairs(s2s_sessions) do |
|
13072
7fcf41b541e0
mod_admin_shell: Use same wildcard matching in other s2s command
Kim Alvefur <zash@zash.se>
parents:
13071
diff
changeset
|
1311 if not host or host == "*" or match_s2s_jid(session, host) then |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1312 session:close(build_reason(text, condition)); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1313 count = count + 1; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1314 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1315 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1316 if count == 0 then return false, "No sessions to close."; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1317 else return true, "Closed "..count.." s2s session"..((count == 1 and "") or "s"); end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1318 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1319 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1320 def_env.host = {}; def_env.hosts = def_env.host; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1321 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1322 function def_env.host:activate(hostname, config) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1323 return hostmanager.activate(hostname, config); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1324 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1325 function def_env.host:deactivate(hostname, reason) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1326 return hostmanager.deactivate(hostname, reason); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1327 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1328 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1329 function def_env.host:list() |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1330 local print = self.session.print; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1331 local i = 0; |
|
12676
3ab3ef9584e3
mod_admin_shell: Rename variable to avoid confusion with global function
Kim Alvefur <zash@zash.se>
parents:
12675
diff
changeset
|
1332 local host_type; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1333 for host, host_session in iterators.sorted_pairs(prosody.hosts, _sort_hosts) do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1334 i = i + 1; |
|
12676
3ab3ef9584e3
mod_admin_shell: Rename variable to avoid confusion with global function
Kim Alvefur <zash@zash.se>
parents:
12675
diff
changeset
|
1335 host_type = host_session.type; |
|
3ab3ef9584e3
mod_admin_shell: Rename variable to avoid confusion with global function
Kim Alvefur <zash@zash.se>
parents:
12675
diff
changeset
|
1336 if host_type == "local" then |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1337 print(host); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1338 else |
|
12676
3ab3ef9584e3
mod_admin_shell: Rename variable to avoid confusion with global function
Kim Alvefur <zash@zash.se>
parents:
12675
diff
changeset
|
1339 host_type = module:context(host):get_option_string("component_module", host_type); |
|
3ab3ef9584e3
mod_admin_shell: Rename variable to avoid confusion with global function
Kim Alvefur <zash@zash.se>
parents:
12675
diff
changeset
|
1340 if host_type ~= "component" then |
|
3ab3ef9584e3
mod_admin_shell: Rename variable to avoid confusion with global function
Kim Alvefur <zash@zash.se>
parents:
12675
diff
changeset
|
1341 host_type = host_type .. " component"; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1342 end |
|
12676
3ab3ef9584e3
mod_admin_shell: Rename variable to avoid confusion with global function
Kim Alvefur <zash@zash.se>
parents:
12675
diff
changeset
|
1343 print(("%s (%s)"):format(host, host_type)); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1344 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1345 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1346 return true, i.." hosts"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1347 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1348 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1349 def_env.port = {}; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1350 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1351 function def_env.port:list() |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1352 local print = self.session.print; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1353 local services = portmanager.get_active_services().data; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1354 local n_services, n_ports = 0, 0; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1355 for service, interfaces in iterators.sorted_pairs(services) do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1356 n_services = n_services + 1; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1357 local ports_list = {}; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1358 for interface, ports in pairs(interfaces) do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1359 for port in pairs(ports) do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1360 table.insert(ports_list, "["..interface.."]:"..port); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1361 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1362 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1363 n_ports = n_ports + #ports_list; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1364 print(service..": "..table.concat(ports_list, ", ")); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1365 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1366 return true, n_services.." services listening on "..n_ports.." ports"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1367 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1368 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1369 function def_env.port:close(close_port, close_interface) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1370 close_port = assert(tonumber(close_port), "Invalid port number"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1371 local n_closed = 0; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1372 local services = portmanager.get_active_services().data; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1373 for service, interfaces in pairs(services) do -- luacheck: ignore 213 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1374 for interface, ports in pairs(interfaces) do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1375 if not close_interface or close_interface == interface then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1376 if ports[close_port] then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1377 self.session.print("Closing ["..interface.."]:"..close_port.."..."); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1378 local ok, err = portmanager.close(interface, close_port) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1379 if not ok then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1380 self.session.print("Failed to close "..interface.." "..close_port..": "..err); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1381 else |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1382 n_closed = n_closed + 1; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1383 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1384 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1385 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1386 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1387 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1388 return true, "Closed "..n_closed.." ports"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1389 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1390 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1391 def_env.muc = {}; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1392 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1393 local console_room_mt = { |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1394 __index = function (self, k) return self.room[k]; end; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1395 __tostring = function (self) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1396 return "MUC room <"..self.room.jid..">"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1397 end; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1398 }; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1399 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1400 local function check_muc(jid) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1401 local room_name, host = jid_split(jid); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1402 if not prosody.hosts[host] then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1403 return nil, "No such host: "..host; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1404 elseif not prosody.hosts[host].modules.muc then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1405 return nil, "Host '"..host.."' is not a MUC service"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1406 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1407 return room_name, host; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1408 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1409 |
|
12867
2defb0fc2be9
mod_admin_shell: Factor out room retrieval into common function
Kim Alvefur <zash@zash.se>
parents:
12866
diff
changeset
|
1410 local function get_muc(room_jid) |
|
2defb0fc2be9
mod_admin_shell: Factor out room retrieval into common function
Kim Alvefur <zash@zash.se>
parents:
12866
diff
changeset
|
1411 local room_name, host = check_muc(room_jid); |
|
2defb0fc2be9
mod_admin_shell: Factor out room retrieval into common function
Kim Alvefur <zash@zash.se>
parents:
12866
diff
changeset
|
1412 if not room_name then |
|
2defb0fc2be9
mod_admin_shell: Factor out room retrieval into common function
Kim Alvefur <zash@zash.se>
parents:
12866
diff
changeset
|
1413 return room_name, host; |
|
2defb0fc2be9
mod_admin_shell: Factor out room retrieval into common function
Kim Alvefur <zash@zash.se>
parents:
12866
diff
changeset
|
1414 end |
|
2defb0fc2be9
mod_admin_shell: Factor out room retrieval into common function
Kim Alvefur <zash@zash.se>
parents:
12866
diff
changeset
|
1415 local room_obj = prosody.hosts[host].modules.muc.get_room_from_jid(room_jid); |
|
2defb0fc2be9
mod_admin_shell: Factor out room retrieval into common function
Kim Alvefur <zash@zash.se>
parents:
12866
diff
changeset
|
1416 if not room_obj then |
|
2defb0fc2be9
mod_admin_shell: Factor out room retrieval into common function
Kim Alvefur <zash@zash.se>
parents:
12866
diff
changeset
|
1417 return nil, "No such room: "..room_jid; |
|
2defb0fc2be9
mod_admin_shell: Factor out room retrieval into common function
Kim Alvefur <zash@zash.se>
parents:
12866
diff
changeset
|
1418 end |
|
2defb0fc2be9
mod_admin_shell: Factor out room retrieval into common function
Kim Alvefur <zash@zash.se>
parents:
12866
diff
changeset
|
1419 return room_obj; |
|
2defb0fc2be9
mod_admin_shell: Factor out room retrieval into common function
Kim Alvefur <zash@zash.se>
parents:
12866
diff
changeset
|
1420 end |
|
2defb0fc2be9
mod_admin_shell: Factor out room retrieval into common function
Kim Alvefur <zash@zash.se>
parents:
12866
diff
changeset
|
1421 |
|
12870
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1422 local muc_util = module:require"muc/util"; |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1423 |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1424 function def_env.muc:create(room_jid, config) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1425 local room_name, host = check_muc(room_jid); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1426 if not room_name then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1427 return room_name, host; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1428 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1429 if not room_name then return nil, host end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1430 if config ~= nil and type(config) ~= "table" then return nil, "Config must be a table"; end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1431 if prosody.hosts[host].modules.muc.get_room_from_jid(room_jid) then return nil, "Room exists already" end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1432 return prosody.hosts[host].modules.muc.create_room(room_jid, config); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1433 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1434 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1435 function def_env.muc:room(room_jid) |
|
12867
2defb0fc2be9
mod_admin_shell: Factor out room retrieval into common function
Kim Alvefur <zash@zash.se>
parents:
12866
diff
changeset
|
1436 local room_obj, err = get_muc(room_jid); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1437 if not room_obj then |
|
12867
2defb0fc2be9
mod_admin_shell: Factor out room retrieval into common function
Kim Alvefur <zash@zash.se>
parents:
12866
diff
changeset
|
1438 return room_obj, err; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1439 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1440 return setmetatable({ room = room_obj }, console_room_mt); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1441 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1442 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1443 function def_env.muc:list(host) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1444 local host_session = prosody.hosts[host]; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1445 if not host_session or not host_session.modules.muc then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1446 return nil, "Please supply the address of a local MUC component"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1447 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1448 local print = self.session.print; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1449 local c = 0; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1450 for room in host_session.modules.muc.each_room() do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1451 print(room.jid); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1452 c = c + 1; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1453 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1454 return true, c.." rooms"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1455 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1456 |
|
12865
e6324117f124
mod_admin_shell: Add muc:occupants(room) command to list occupants
Kim Alvefur <zash@zash.se>
parents:
12789
diff
changeset
|
1457 function def_env.muc:occupants(room_jid, filter) |
|
12867
2defb0fc2be9
mod_admin_shell: Factor out room retrieval into common function
Kim Alvefur <zash@zash.se>
parents:
12866
diff
changeset
|
1458 local room_obj, err = get_muc(room_jid); |
|
12865
e6324117f124
mod_admin_shell: Add muc:occupants(room) command to list occupants
Kim Alvefur <zash@zash.se>
parents:
12789
diff
changeset
|
1459 if not room_obj then |
|
12867
2defb0fc2be9
mod_admin_shell: Factor out room retrieval into common function
Kim Alvefur <zash@zash.se>
parents:
12866
diff
changeset
|
1460 return room_obj, err; |
|
12865
e6324117f124
mod_admin_shell: Add muc:occupants(room) command to list occupants
Kim Alvefur <zash@zash.se>
parents:
12789
diff
changeset
|
1461 end |
|
e6324117f124
mod_admin_shell: Add muc:occupants(room) command to list occupants
Kim Alvefur <zash@zash.se>
parents:
12789
diff
changeset
|
1462 |
|
e6324117f124
mod_admin_shell: Add muc:occupants(room) command to list occupants
Kim Alvefur <zash@zash.se>
parents:
12789
diff
changeset
|
1463 local print = self.session.print; |
|
12868
d5cb86b84d12
mod_admin_shell: Use tables to present MUC users
Kim Alvefur <zash@zash.se>
parents:
12867
diff
changeset
|
1464 local row = format_table({ |
|
12869
70ee82579076
mod_admin_shell: Make Role and Affiliation columns the same width for aesthetics
Kim Alvefur <zash@zash.se>
parents:
12868
diff
changeset
|
1465 { title = "Role"; width = 12; key = "role" }; -- longest role name |
|
12868
d5cb86b84d12
mod_admin_shell: Use tables to present MUC users
Kim Alvefur <zash@zash.se>
parents:
12867
diff
changeset
|
1466 { title = "JID"; width = "75%"; key = "bare_jid" }; |
|
d5cb86b84d12
mod_admin_shell: Use tables to present MUC users
Kim Alvefur <zash@zash.se>
parents:
12867
diff
changeset
|
1467 { title = "Nickname"; width = "25%"; key = "nick"; mapper = jid_resource }; |
|
d5cb86b84d12
mod_admin_shell: Use tables to present MUC users
Kim Alvefur <zash@zash.se>
parents:
12867
diff
changeset
|
1468 }, self.session.width); |
|
12870
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1469 local occupants = array.collect(iterators.select(2, room_obj:each_occupant())); |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1470 local total = #occupants; |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1471 if filter then |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1472 occupants:filter(function(occupant) |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1473 return occupant.role == filter or jid_resource(occupant.nick):find(filter, 1, true); |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1474 end); |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1475 end |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1476 local displayed = #occupants; |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1477 occupants:sort(function(a, b) |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1478 if a.role ~= b.role then |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1479 return muc_util.valid_roles[a.role] > muc_util.valid_roles[b.role]; |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1480 else |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1481 return a.bare_jid < b.bare_jid; |
|
12868
d5cb86b84d12
mod_admin_shell: Use tables to present MUC users
Kim Alvefur <zash@zash.se>
parents:
12867
diff
changeset
|
1482 end |
|
12870
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1483 end); |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1484 |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1485 if displayed == 0 then |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1486 return true, ("%d out of %d occupant%s listed"):format(displayed, total, total ~= 1 and "s" or "") |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1487 end |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1488 |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1489 print(row()); |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1490 for _, occupant in ipairs(occupants) do |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1491 print(row(occupant)); |
|
12865
e6324117f124
mod_admin_shell: Add muc:occupants(room) command to list occupants
Kim Alvefur <zash@zash.se>
parents:
12789
diff
changeset
|
1492 end |
|
e6324117f124
mod_admin_shell: Add muc:occupants(room) command to list occupants
Kim Alvefur <zash@zash.se>
parents:
12789
diff
changeset
|
1493 |
|
e6324117f124
mod_admin_shell: Add muc:occupants(room) command to list occupants
Kim Alvefur <zash@zash.se>
parents:
12789
diff
changeset
|
1494 if total == displayed then |
|
e6324117f124
mod_admin_shell: Add muc:occupants(room) command to list occupants
Kim Alvefur <zash@zash.se>
parents:
12789
diff
changeset
|
1495 return true, ("%d occupant%s listed"):format(total, total ~= 1 and "s" or "") |
|
e6324117f124
mod_admin_shell: Add muc:occupants(room) command to list occupants
Kim Alvefur <zash@zash.se>
parents:
12789
diff
changeset
|
1496 else |
|
e6324117f124
mod_admin_shell: Add muc:occupants(room) command to list occupants
Kim Alvefur <zash@zash.se>
parents:
12789
diff
changeset
|
1497 return true, ("%d out of %d occupant%s listed"):format(displayed, total, total ~= 1 and "s" or "") |
|
e6324117f124
mod_admin_shell: Add muc:occupants(room) command to list occupants
Kim Alvefur <zash@zash.se>
parents:
12789
diff
changeset
|
1498 end |
|
e6324117f124
mod_admin_shell: Add muc:occupants(room) command to list occupants
Kim Alvefur <zash@zash.se>
parents:
12789
diff
changeset
|
1499 end |
|
e6324117f124
mod_admin_shell: Add muc:occupants(room) command to list occupants
Kim Alvefur <zash@zash.se>
parents:
12789
diff
changeset
|
1500 |
|
12866
54aea2622459
mod_admin_shell: Add muc:affiliations(room) command to list memberships
Kim Alvefur <zash@zash.se>
parents:
12865
diff
changeset
|
1501 function def_env.muc:affiliations(room_jid, filter) |
|
12867
2defb0fc2be9
mod_admin_shell: Factor out room retrieval into common function
Kim Alvefur <zash@zash.se>
parents:
12866
diff
changeset
|
1502 local room_obj, err = get_muc(room_jid); |
|
12866
54aea2622459
mod_admin_shell: Add muc:affiliations(room) command to list memberships
Kim Alvefur <zash@zash.se>
parents:
12865
diff
changeset
|
1503 if not room_obj then |
|
12867
2defb0fc2be9
mod_admin_shell: Factor out room retrieval into common function
Kim Alvefur <zash@zash.se>
parents:
12866
diff
changeset
|
1504 return room_obj, err; |
|
12866
54aea2622459
mod_admin_shell: Add muc:affiliations(room) command to list memberships
Kim Alvefur <zash@zash.se>
parents:
12865
diff
changeset
|
1505 end |
|
54aea2622459
mod_admin_shell: Add muc:affiliations(room) command to list memberships
Kim Alvefur <zash@zash.se>
parents:
12865
diff
changeset
|
1506 |
|
54aea2622459
mod_admin_shell: Add muc:affiliations(room) command to list memberships
Kim Alvefur <zash@zash.se>
parents:
12865
diff
changeset
|
1507 local print = self.session.print; |
|
12868
d5cb86b84d12
mod_admin_shell: Use tables to present MUC users
Kim Alvefur <zash@zash.se>
parents:
12867
diff
changeset
|
1508 local row = format_table({ |
|
12869
70ee82579076
mod_admin_shell: Make Role and Affiliation columns the same width for aesthetics
Kim Alvefur <zash@zash.se>
parents:
12868
diff
changeset
|
1509 { title = "Affiliation"; width = 12 }; -- longest affiliation name |
|
12868
d5cb86b84d12
mod_admin_shell: Use tables to present MUC users
Kim Alvefur <zash@zash.se>
parents:
12867
diff
changeset
|
1510 { title = "JID"; width = "75%" }; |
|
d5cb86b84d12
mod_admin_shell: Use tables to present MUC users
Kim Alvefur <zash@zash.se>
parents:
12867
diff
changeset
|
1511 { title = "Nickname"; width = "25%"; key = "reserved_nickname" }; |
|
d5cb86b84d12
mod_admin_shell: Use tables to present MUC users
Kim Alvefur <zash@zash.se>
parents:
12867
diff
changeset
|
1512 }, self.session.width); |
|
12870
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1513 local affiliated = array(); |
|
12866
54aea2622459
mod_admin_shell: Add muc:affiliations(room) command to list memberships
Kim Alvefur <zash@zash.se>
parents:
12865
diff
changeset
|
1514 for affiliated_jid, affiliation, affiliation_data in room_obj:each_affiliation() do |
|
12870
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1515 affiliated:push(setmetatable({ affiliation; affiliated_jid }, { __index = affiliation_data })); |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1516 end |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1517 |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1518 local total = #affiliated; |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1519 if filter then |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1520 affiliated:filter(function(affiliation) |
|
12871
885323e2a1ce
mod_admin_shell: Match substring in muc:affiliations() like muc:occupants()
Kim Alvefur <zash@zash.se>
parents:
12870
diff
changeset
|
1521 return filter == affiliation[1] or affiliation[2]:find(filter, 1, true); |
|
12870
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1522 end); |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1523 end |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1524 local displayed = #affiliated; |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1525 local aff_ranking = muc_util.valid_affiliations; |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1526 affiliated:sort(function(a, b) |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1527 if a[1] ~= b[1] then |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1528 return aff_ranking[a[1]] > aff_ranking[b[1]]; |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1529 else |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1530 return a[2] < b[2]; |
|
12868
d5cb86b84d12
mod_admin_shell: Use tables to present MUC users
Kim Alvefur <zash@zash.se>
parents:
12867
diff
changeset
|
1531 end |
|
12870
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1532 end); |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1533 |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1534 if displayed == 0 then |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1535 return true, ("%d out of %d affiliations%s listed"):format(displayed, total, total ~= 1 and "s" or "") |
|
12866
54aea2622459
mod_admin_shell: Add muc:affiliations(room) command to list memberships
Kim Alvefur <zash@zash.se>
parents:
12865
diff
changeset
|
1536 end |
|
54aea2622459
mod_admin_shell: Add muc:affiliations(room) command to list memberships
Kim Alvefur <zash@zash.se>
parents:
12865
diff
changeset
|
1537 |
|
12870
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1538 print(row()); |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1539 for _, affiliation in ipairs(affiliated) do |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1540 print(row(affiliation)); |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1541 end |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1542 |
|
56397f3b58c1
mod_admin_shell: Sort MUC users by relation and JID
Kim Alvefur <zash@zash.se>
parents:
12869
diff
changeset
|
1543 |
|
12866
54aea2622459
mod_admin_shell: Add muc:affiliations(room) command to list memberships
Kim Alvefur <zash@zash.se>
parents:
12865
diff
changeset
|
1544 if total == displayed then |
|
54aea2622459
mod_admin_shell: Add muc:affiliations(room) command to list memberships
Kim Alvefur <zash@zash.se>
parents:
12865
diff
changeset
|
1545 return true, ("%d affiliation%s listed"):format(total, total ~= 1 and "s" or "") |
|
54aea2622459
mod_admin_shell: Add muc:affiliations(room) command to list memberships
Kim Alvefur <zash@zash.se>
parents:
12865
diff
changeset
|
1546 else |
|
54aea2622459
mod_admin_shell: Add muc:affiliations(room) command to list memberships
Kim Alvefur <zash@zash.se>
parents:
12865
diff
changeset
|
1547 return true, ("%d out of %d affiliation%s listed"):format(displayed, total, total ~= 1 and "s" or "") |
|
54aea2622459
mod_admin_shell: Add muc:affiliations(room) command to list memberships
Kim Alvefur <zash@zash.se>
parents:
12865
diff
changeset
|
1548 end |
|
54aea2622459
mod_admin_shell: Add muc:affiliations(room) command to list memberships
Kim Alvefur <zash@zash.se>
parents:
12865
diff
changeset
|
1549 end |
|
54aea2622459
mod_admin_shell: Add muc:affiliations(room) command to list memberships
Kim Alvefur <zash@zash.se>
parents:
12865
diff
changeset
|
1550 |
|
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
1551 local um = require"prosody.core.usermanager"; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1552 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1553 def_env.user = {}; |
|
12668
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1554 function def_env.user:create(jid, password, role) |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1555 local username, host = jid_split(jid); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1556 if not prosody.hosts[host] then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1557 return nil, "No such host: "..host; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1558 elseif um.user_exists(username, host) then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1559 return nil, "User exists"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1560 end |
|
12672
c8f59ce7d3cf
mod_admin_shell: Ensure account has role before it is usable
Kim Alvefur <zash@zash.se>
parents:
12670
diff
changeset
|
1561 |
|
c8f59ce7d3cf
mod_admin_shell: Ensure account has role before it is usable
Kim Alvefur <zash@zash.se>
parents:
12670
diff
changeset
|
1562 if role then |
|
12991
6d7e3d5463d8
mod_admin_shell: Simplify user creation when no role given
Kim Alvefur <zash@zash.se>
parents:
12977
diff
changeset
|
1563 local ok, err = um.create_user(username, nil, host); |
|
6d7e3d5463d8
mod_admin_shell: Simplify user creation when no role given
Kim Alvefur <zash@zash.se>
parents:
12977
diff
changeset
|
1564 if not ok then |
|
6d7e3d5463d8
mod_admin_shell: Simplify user creation when no role given
Kim Alvefur <zash@zash.se>
parents:
12977
diff
changeset
|
1565 return nil, "Could not create user: "..err; |
|
6d7e3d5463d8
mod_admin_shell: Simplify user creation when no role given
Kim Alvefur <zash@zash.se>
parents:
12977
diff
changeset
|
1566 end |
|
6d7e3d5463d8
mod_admin_shell: Simplify user creation when no role given
Kim Alvefur <zash@zash.se>
parents:
12977
diff
changeset
|
1567 |
|
12672
c8f59ce7d3cf
mod_admin_shell: Ensure account has role before it is usable
Kim Alvefur <zash@zash.se>
parents:
12670
diff
changeset
|
1568 local role_ok, rerr = um.set_user_role(jid, host, role); |
|
c8f59ce7d3cf
mod_admin_shell: Ensure account has role before it is usable
Kim Alvefur <zash@zash.se>
parents:
12670
diff
changeset
|
1569 if not role_ok then |
|
c8f59ce7d3cf
mod_admin_shell: Ensure account has role before it is usable
Kim Alvefur <zash@zash.se>
parents:
12670
diff
changeset
|
1570 return nil, "Could not set role: " .. tostring(rerr); |
|
c8f59ce7d3cf
mod_admin_shell: Ensure account has role before it is usable
Kim Alvefur <zash@zash.se>
parents:
12670
diff
changeset
|
1571 end |
|
c8f59ce7d3cf
mod_admin_shell: Ensure account has role before it is usable
Kim Alvefur <zash@zash.se>
parents:
12670
diff
changeset
|
1572 |
|
12991
6d7e3d5463d8
mod_admin_shell: Simplify user creation when no role given
Kim Alvefur <zash@zash.se>
parents:
12977
diff
changeset
|
1573 if password then |
|
6d7e3d5463d8
mod_admin_shell: Simplify user creation when no role given
Kim Alvefur <zash@zash.se>
parents:
12977
diff
changeset
|
1574 local ok, err = um.set_password(username, password, host, nil); |
|
6d7e3d5463d8
mod_admin_shell: Simplify user creation when no role given
Kim Alvefur <zash@zash.se>
parents:
12977
diff
changeset
|
1575 if not ok then |
|
6d7e3d5463d8
mod_admin_shell: Simplify user creation when no role given
Kim Alvefur <zash@zash.se>
parents:
12977
diff
changeset
|
1576 return nil, "Could not set password for user: "..err; |
|
6d7e3d5463d8
mod_admin_shell: Simplify user creation when no role given
Kim Alvefur <zash@zash.se>
parents:
12977
diff
changeset
|
1577 end |
|
12992
651813914151
mod_admin_shell: Enable user after creation with role
Kim Alvefur <zash@zash.se>
parents:
12991
diff
changeset
|
1578 |
|
651813914151
mod_admin_shell: Enable user after creation with role
Kim Alvefur <zash@zash.se>
parents:
12991
diff
changeset
|
1579 local ok, err = um.enable_user(username, host); |
|
12993
623fbb5f9b05
core.usermanager: Correct formatting of not implemented error
Kim Alvefur <zash@zash.se>
parents:
12992
diff
changeset
|
1580 if not ok and err ~= "method not implemented" then |
|
12992
651813914151
mod_admin_shell: Enable user after creation with role
Kim Alvefur <zash@zash.se>
parents:
12991
diff
changeset
|
1581 return nil, "Could not enable user: "..err; |
|
651813914151
mod_admin_shell: Enable user after creation with role
Kim Alvefur <zash@zash.se>
parents:
12991
diff
changeset
|
1582 end |
|
12991
6d7e3d5463d8
mod_admin_shell: Simplify user creation when no role given
Kim Alvefur <zash@zash.se>
parents:
12977
diff
changeset
|
1583 end |
|
6d7e3d5463d8
mod_admin_shell: Simplify user creation when no role given
Kim Alvefur <zash@zash.se>
parents:
12977
diff
changeset
|
1584 else |
|
6d7e3d5463d8
mod_admin_shell: Simplify user creation when no role given
Kim Alvefur <zash@zash.se>
parents:
12977
diff
changeset
|
1585 local ok, err = um.create_user(username, password, host); |
|
6d7e3d5463d8
mod_admin_shell: Simplify user creation when no role given
Kim Alvefur <zash@zash.se>
parents:
12977
diff
changeset
|
1586 if not ok then |
|
6d7e3d5463d8
mod_admin_shell: Simplify user creation when no role given
Kim Alvefur <zash@zash.se>
parents:
12977
diff
changeset
|
1587 return nil, "Could not create user: "..err; |
|
6d7e3d5463d8
mod_admin_shell: Simplify user creation when no role given
Kim Alvefur <zash@zash.se>
parents:
12977
diff
changeset
|
1588 end |
|
12672
c8f59ce7d3cf
mod_admin_shell: Ensure account has role before it is usable
Kim Alvefur <zash@zash.se>
parents:
12670
diff
changeset
|
1589 end |
|
c8f59ce7d3cf
mod_admin_shell: Ensure account has role before it is usable
Kim Alvefur <zash@zash.se>
parents:
12670
diff
changeset
|
1590 |
|
c8f59ce7d3cf
mod_admin_shell: Ensure account has role before it is usable
Kim Alvefur <zash@zash.se>
parents:
12670
diff
changeset
|
1591 return true, "User created"; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1592 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1593 |
|
12908
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1594 function def_env.user:disable(jid) |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1595 local username, host = jid_split(jid); |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1596 if not prosody.hosts[host] then |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1597 return nil, "No such host: "..host; |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1598 elseif not um.user_exists(username, host) then |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1599 return nil, "No such user"; |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1600 end |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1601 local ok, err = um.disable_user(username, host); |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1602 if ok then |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1603 return true, "User disabled"; |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1604 else |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1605 return nil, "Could not disable user: "..err; |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1606 end |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1607 end |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1608 |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1609 function def_env.user:enable(jid) |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1610 local username, host = jid_split(jid); |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1611 if not prosody.hosts[host] then |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1612 return nil, "No such host: "..host; |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1613 elseif not um.user_exists(username, host) then |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1614 return nil, "No such user"; |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1615 end |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1616 local ok, err = um.enable_user(username, host); |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1617 if ok then |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1618 return true, "User enabled"; |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1619 else |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1620 return nil, "Could not enable user: "..err; |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1621 end |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1622 end |
|
e96c3ea64996
mod_admin_shell: Add commands to disable and enable accounts
Kim Alvefur <zash@zash.se>
parents:
12888
diff
changeset
|
1623 |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1624 function def_env.user:delete(jid) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1625 local username, host = jid_split(jid); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1626 if not prosody.hosts[host] then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1627 return nil, "No such host: "..host; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1628 elseif not um.user_exists(username, host) then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1629 return nil, "No such user"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1630 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1631 local ok, err = um.delete_user(username, host); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1632 if ok then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1633 return true, "User deleted"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1634 else |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1635 return nil, "Could not delete user: "..err; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1636 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1637 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1638 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1639 function def_env.user:password(jid, password) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1640 local username, host = jid_split(jid); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1641 if not prosody.hosts[host] then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1642 return nil, "No such host: "..host; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1643 elseif not um.user_exists(username, host) then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1644 return nil, "No such user"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1645 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1646 local ok, err = um.set_password(username, password, host, nil); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1647 if ok then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1648 return true, "User password changed"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1649 else |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1650 return nil, "Could not change password for user: "..err; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1651 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1652 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1653 |
|
12668
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1654 function def_env.user:role(jid, host) |
|
12675
db8c795ca81a
mod_admin_shell: Fix output from user:roles()
Kim Alvefur <zash@zash.se>
parents:
12672
diff
changeset
|
1655 local print = self.session.print; |
|
12209
3fe2e5da05c3
mod_admin_shell: Add command to show current user roles
Kim Alvefur <zash@zash.se>
parents:
12208
diff
changeset
|
1656 local username, userhost = jid_split(jid); |
|
3fe2e5da05c3
mod_admin_shell: Add command to show current user roles
Kim Alvefur <zash@zash.se>
parents:
12208
diff
changeset
|
1657 if host == nil then host = userhost; end |
|
12668
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1658 if not prosody.hosts[host] then |
|
12209
3fe2e5da05c3
mod_admin_shell: Add command to show current user roles
Kim Alvefur <zash@zash.se>
parents:
12208
diff
changeset
|
1659 return nil, "No such host: "..host; |
|
3fe2e5da05c3
mod_admin_shell: Add command to show current user roles
Kim Alvefur <zash@zash.se>
parents:
12208
diff
changeset
|
1660 elseif prosody.hosts[userhost] and not um.user_exists(username, userhost) then |
|
3fe2e5da05c3
mod_admin_shell: Add command to show current user roles
Kim Alvefur <zash@zash.se>
parents:
12208
diff
changeset
|
1661 return nil, "No such user"; |
|
3fe2e5da05c3
mod_admin_shell: Add command to show current user roles
Kim Alvefur <zash@zash.se>
parents:
12208
diff
changeset
|
1662 end |
|
12668
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1663 |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1664 local primary_role = um.get_user_role(username, host); |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1665 local secondary_roles = um.get_user_secondary_roles(username, host); |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1666 |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1667 print(primary_role and primary_role.name or "<none>"); |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1668 |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1669 local count = primary_role and 1 or 0; |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1670 for role_name in pairs(secondary_roles or {}) do |
|
12209
3fe2e5da05c3
mod_admin_shell: Add command to show current user roles
Kim Alvefur <zash@zash.se>
parents:
12208
diff
changeset
|
1671 count = count + 1; |
|
12668
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1672 print(role_name.." (secondary)"); |
|
12209
3fe2e5da05c3
mod_admin_shell: Add command to show current user roles
Kim Alvefur <zash@zash.se>
parents:
12208
diff
changeset
|
1673 end |
|
12668
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1674 |
|
12209
3fe2e5da05c3
mod_admin_shell: Add command to show current user roles
Kim Alvefur <zash@zash.se>
parents:
12208
diff
changeset
|
1675 return true, count == 1 and "1 role" or count.." roles"; |
|
3fe2e5da05c3
mod_admin_shell: Add command to show current user roles
Kim Alvefur <zash@zash.se>
parents:
12208
diff
changeset
|
1676 end |
|
12668
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1677 def_env.user.roles = def_env.user.role; |
|
12209
3fe2e5da05c3
mod_admin_shell: Add command to show current user roles
Kim Alvefur <zash@zash.se>
parents:
12208
diff
changeset
|
1678 |
|
12668
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1679 -- user:setrole("someone@example.com", "example.com", "prosody:admin") |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1680 -- user:setrole("someone@example.com", "prosody:admin") |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1681 function def_env.user:setrole(jid, host, new_role) |
|
12014
efbf288b529e
mod_admin_shell: Support setting roles on hosts other than the users'
Kim Alvefur <zash@zash.se>
parents:
12013
diff
changeset
|
1682 local username, userhost = jid_split(jid); |
|
12668
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1683 if new_role == nil then host, new_role = userhost, host; end |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1684 if not prosody.hosts[host] then |
|
12013
ae45f052b34b
mod_admin_shell: Add command for updating roles user:roles(jid, roles)
Kim Alvefur <zash@zash.se>
parents:
12012
diff
changeset
|
1685 return nil, "No such host: "..host; |
|
12018
c65789f5004e
mod_admin_shell: Only check that local users exist locally
Kim Alvefur <zash@zash.se>
parents:
12014
diff
changeset
|
1686 elseif prosody.hosts[userhost] and not um.user_exists(username, userhost) then |
|
12013
ae45f052b34b
mod_admin_shell: Add command for updating roles user:roles(jid, roles)
Kim Alvefur <zash@zash.se>
parents:
12012
diff
changeset
|
1687 return nil, "No such user"; |
|
ae45f052b34b
mod_admin_shell: Add command for updating roles user:roles(jid, roles)
Kim Alvefur <zash@zash.se>
parents:
12012
diff
changeset
|
1688 end |
|
12668
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1689 return um.set_user_role(username, host, new_role); |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1690 end |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1691 |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1692 function def_env.user:addrole(jid, host, new_role) |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1693 local username, userhost = jid_split(jid); |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1694 if new_role == nil then host, new_role = userhost, host; end |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1695 if not prosody.hosts[host] then |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1696 return nil, "No such host: "..host; |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1697 elseif prosody.hosts[userhost] and not um.user_exists(username, userhost) then |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1698 return nil, "No such user"; |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1699 end |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1700 return um.add_user_secondary_role(username, host, new_role); |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1701 end |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1702 |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1703 function def_env.user:delrole(jid, host, role_name) |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1704 local username, userhost = jid_split(jid); |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1705 if role_name == nil then host, role_name = userhost, host; end |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1706 if not prosody.hosts[host] then |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1707 return nil, "No such host: "..host; |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1708 elseif prosody.hosts[userhost] and not um.user_exists(username, userhost) then |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1709 return nil, "No such user"; |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1710 end |
|
5d85de8b0723
mod_admin_shell: Update with new role management commands and help text
Matthew Wild <mwild1@gmail.com>
parents:
12660
diff
changeset
|
1711 return um.remove_user_secondary_role(username, host, role_name); |
|
12013
ae45f052b34b
mod_admin_shell: Add command for updating roles user:roles(jid, roles)
Kim Alvefur <zash@zash.se>
parents:
12012
diff
changeset
|
1712 end |
|
12012
71d799a8638f
mod_admin_shell: Allow setting roles when creating user
Kim Alvefur <zash@zash.se>
parents:
11991
diff
changeset
|
1713 |
|
71d799a8638f
mod_admin_shell: Allow setting roles when creating user
Kim Alvefur <zash@zash.se>
parents:
11991
diff
changeset
|
1714 -- TODO switch to table view, include roles |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1715 function def_env.user:list(host, pat) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1716 if not host then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1717 return nil, "No host given"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1718 elseif not prosody.hosts[host] then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1719 return nil, "No such host"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1720 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1721 local print = self.session.print; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1722 local total, matches = 0, 0; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1723 for user in um.users(host) do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1724 if not pat or user:match(pat) then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1725 print(user.."@"..host); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1726 matches = matches + 1; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1727 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1728 total = total + 1; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1729 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1730 return true, "Showing "..(pat and (matches.." of ") or "all " )..total.." users"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1731 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1732 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1733 def_env.xmpp = {}; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1734 |
|
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
1735 local new_id = require "prosody.util.id".medium; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1736 function def_env.xmpp:ping(localhost, remotehost, timeout) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1737 localhost = select(2, jid_split(localhost)); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1738 remotehost = select(2, jid_split(remotehost)); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1739 if not localhost then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1740 return nil, "Invalid sender hostname"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1741 elseif not prosody.hosts[localhost] then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1742 return nil, "No such local host"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1743 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1744 if not remotehost then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1745 return nil, "Invalid destination hostname"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1746 elseif prosody.hosts[remotehost] then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1747 return nil, "Both hosts are local"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1748 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1749 local iq = st.iq{ from=localhost, to=remotehost, type="get", id=new_id()} |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1750 :tag("ping", {xmlns="urn:xmpp:ping"}); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1751 local time_start = time.now(); |
|
12122
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1752 local print = self.session.print; |
|
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1753 local function onchange(what) |
|
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1754 return function(event) |
|
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1755 local s2s_session = event.session; |
|
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1756 if (s2s_session.from_host == localhost and s2s_session.to_host == remotehost) |
|
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1757 or (s2s_session.to_host == localhost and s2s_session.from_host == remotehost) then |
|
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1758 local dir = available_columns.dir.mapper(s2s_session.direction, s2s_session); |
|
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1759 print(("Session %s (%s%s%s) %s (%gs)"):format(s2s_session.id, localhost, dir, remotehost, what, |
|
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1760 time.now() - time_start)); |
|
12126
0d8e6646ce42
mod_admin_shell: Log creation of incoming s2s connections during ping
Kim Alvefur <zash@zash.se>
parents:
12122
diff
changeset
|
1761 elseif s2s_session.type == "s2sin_unauthed" and s2s_session.to_host == nil and s2s_session.from_host == nil then |
|
0d8e6646ce42
mod_admin_shell: Log creation of incoming s2s connections during ping
Kim Alvefur <zash@zash.se>
parents:
12122
diff
changeset
|
1762 print(("Session %s %s (%gs)"):format(s2s_session.id, what, time.now() - time_start)); |
|
12122
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1763 end |
|
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1764 end |
|
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1765 end |
|
12281
9016071867d7
mod_admin_shell: Track connected events instead of created
Kim Alvefur <zash@zash.se>
parents:
12258
diff
changeset
|
1766 local onconnected = onchange("connected"); |
|
12122
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1767 local onauthenticated = onchange("authenticated"); |
|
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1768 local onestablished = onchange("established"); |
|
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1769 local ondestroyed = onchange("destroyed"); |
|
12281
9016071867d7
mod_admin_shell: Track connected events instead of created
Kim Alvefur <zash@zash.se>
parents:
12258
diff
changeset
|
1770 module:hook("s2s-connected", onconnected, 1); |
|
12122
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1771 module:context(localhost):hook("s2s-authenticated", onauthenticated, 1); |
|
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1772 module:hook("s2sout-established", onestablished, 1); |
|
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1773 module:hook("s2sin-established", onestablished, 1); |
|
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1774 module:hook("s2s-destroyed", ondestroyed, 1); |
|
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1775 return module:context(localhost):send_iq(iq, nil, timeout):finally(function() |
|
12281
9016071867d7
mod_admin_shell: Track connected events instead of created
Kim Alvefur <zash@zash.se>
parents:
12258
diff
changeset
|
1776 module:unhook("s2s-connected", onconnected, 1); |
|
12122
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1777 module:context(localhost):unhook("s2s-authenticated", onauthenticated); |
|
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1778 module:unhook("s2sout-established", onestablished); |
|
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1779 module:unhook("s2sin-established", onestablished); |
|
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1780 module:unhook("s2s-destroyed", ondestroyed); |
|
50795249b7be
mod_admin_shell: Print s2s related events while waiting for ping
Kim Alvefur <zash@zash.se>
parents:
12056
diff
changeset
|
1781 end):next(function(pong) |
|
12551
3b7e97e0a8ef
mod_admin_shell: Show session id ping reply came
Kim Alvefur <zash@zash.se>
parents:
12540
diff
changeset
|
1782 return ("pong from %s on %s in %gs"):format(pong.stanza.attr.from, pong.origin.id, time.now() - time_start); |
|
11953
848a522fd731
mod_admin_shell: Remove now redundant promise awaiting in xmpp:ping()
Kim Alvefur <zash@zash.se>
parents:
11950
diff
changeset
|
1783 end); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1784 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1785 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1786 def_env.dns = {}; |
|
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
1787 local adns = require"prosody.net.adns"; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1788 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1789 local function get_resolver(session) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1790 local resolver = session.dns_resolver; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1791 if not resolver then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1792 resolver = adns.resolver(); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1793 session.dns_resolver = resolver; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1794 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1795 return resolver; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1796 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1797 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1798 function def_env.dns:lookup(name, typ, class) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1799 local resolver = get_resolver(self.session); |
|
11954
b963ac00c967
mod_admin_shell: Remove now redundant promise awaiting in dns:lookup()
Kim Alvefur <zash@zash.se>
parents:
11953
diff
changeset
|
1800 return resolver:lookup_promise(name, typ, class) |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1801 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1802 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1803 function def_env.dns:addnameserver(...) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1804 local resolver = get_resolver(self.session); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1805 resolver._resolver:addnameserver(...) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1806 return true |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1807 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1808 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1809 function def_env.dns:setnameserver(...) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1810 local resolver = get_resolver(self.session); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1811 resolver._resolver:setnameserver(...) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1812 return true |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1813 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1814 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1815 function def_env.dns:purge() |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1816 local resolver = get_resolver(self.session); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1817 resolver._resolver:purge() |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1818 return true |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1819 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1820 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1821 function def_env.dns:cache() |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1822 local resolver = get_resolver(self.session); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1823 return true, "Cache:\n"..tostring(resolver._resolver.cache) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1824 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1825 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1826 def_env.http = {}; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1827 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1828 function def_env.http:list(hosts) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1829 local print = self.session.print; |
|
11361
dab1a6e46087
mod_admin_shell: List global HTTP endpoints by default
Kim Alvefur <zash@zash.se>
parents:
11042
diff
changeset
|
1830 hosts = array.collect(set.new({ not hosts and "*" or nil }) + get_hosts_set(hosts)):sort(_sort_hosts); |
|
11364
bb6b744f7f1a
mod_admin_shell: Pretty-print HTTP endpoints in a human table
Kim Alvefur <zash@zash.se>
parents:
11363
diff
changeset
|
1831 local output = format_table({ |
|
bb6b744f7f1a
mod_admin_shell: Pretty-print HTTP endpoints in a human table
Kim Alvefur <zash@zash.se>
parents:
11363
diff
changeset
|
1832 { title = "Module", width = "20%" }, |
|
bb6b744f7f1a
mod_admin_shell: Pretty-print HTTP endpoints in a human table
Kim Alvefur <zash@zash.se>
parents:
11363
diff
changeset
|
1833 { title = "URL", width = "80%" }, |
|
12529
7dae6d29b71d
prosodyctl shell: Communicate width of terminal to mod_admin_shell
Kim Alvefur <zash@zash.se>
parents:
12506
diff
changeset
|
1834 }, self.session.width); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1835 |
|
11361
dab1a6e46087
mod_admin_shell: List global HTTP endpoints by default
Kim Alvefur <zash@zash.se>
parents:
11042
diff
changeset
|
1836 for _, host in ipairs(hosts) do |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1837 local http_apps = modulemanager.get_items("http-provider", host); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1838 if #http_apps > 0 then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1839 local http_host = module:context(host):get_option_string("http_host"); |
|
11361
dab1a6e46087
mod_admin_shell: List global HTTP endpoints by default
Kim Alvefur <zash@zash.se>
parents:
11042
diff
changeset
|
1840 if host == "*" then |
|
dab1a6e46087
mod_admin_shell: List global HTTP endpoints by default
Kim Alvefur <zash@zash.se>
parents:
11042
diff
changeset
|
1841 print("Global HTTP endpoints available on all hosts:"); |
|
dab1a6e46087
mod_admin_shell: List global HTTP endpoints by default
Kim Alvefur <zash@zash.se>
parents:
11042
diff
changeset
|
1842 else |
|
dab1a6e46087
mod_admin_shell: List global HTTP endpoints by default
Kim Alvefur <zash@zash.se>
parents:
11042
diff
changeset
|
1843 print("HTTP endpoints on "..host..(http_host and (" (using "..http_host.."):") or ":")); |
|
dab1a6e46087
mod_admin_shell: List global HTTP endpoints by default
Kim Alvefur <zash@zash.se>
parents:
11042
diff
changeset
|
1844 end |
|
11364
bb6b744f7f1a
mod_admin_shell: Pretty-print HTTP endpoints in a human table
Kim Alvefur <zash@zash.se>
parents:
11363
diff
changeset
|
1845 print(output()); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1846 for _, provider in ipairs(http_apps) do |
|
11362
52d93fba2ee1
mod_admin_shell: List modules providing each HTTP endpoint
Kim Alvefur <zash@zash.se>
parents:
11361
diff
changeset
|
1847 local mod = provider._provided_by; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1848 local url = module:context(host):http_url(provider.name, provider.default_path); |
|
11362
52d93fba2ee1
mod_admin_shell: List modules providing each HTTP endpoint
Kim Alvefur <zash@zash.se>
parents:
11361
diff
changeset
|
1849 mod = mod and "mod_"..mod or "" |
|
11364
bb6b744f7f1a
mod_admin_shell: Pretty-print HTTP endpoints in a human table
Kim Alvefur <zash@zash.se>
parents:
11363
diff
changeset
|
1850 print(output{mod, url}); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1851 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1852 print(""); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1853 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1854 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1855 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1856 local default_host = module:get_option_string("http_default_host"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1857 if not default_host then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1858 print("HTTP requests to unknown hosts will return 404 Not Found"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1859 else |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1860 print("HTTP requests to unknown hosts will be handled by "..default_host); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1861 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1862 return true; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1863 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1864 |
|
12399
d99772b739e0
mod_admin_shell: Add watch:log() command to tail logs in realtime
Matthew Wild <mwild1@gmail.com>
parents:
12398
diff
changeset
|
1865 def_env.watch = {}; |
|
d99772b739e0
mod_admin_shell: Add watch:log() command to tail logs in realtime
Matthew Wild <mwild1@gmail.com>
parents:
12398
diff
changeset
|
1866 |
|
d99772b739e0
mod_admin_shell: Add watch:log() command to tail logs in realtime
Matthew Wild <mwild1@gmail.com>
parents:
12398
diff
changeset
|
1867 function def_env.watch:log() |
|
d99772b739e0
mod_admin_shell: Add watch:log() command to tail logs in realtime
Matthew Wild <mwild1@gmail.com>
parents:
12398
diff
changeset
|
1868 local writing = false; |
|
d99772b739e0
mod_admin_shell: Add watch:log() command to tail logs in realtime
Matthew Wild <mwild1@gmail.com>
parents:
12398
diff
changeset
|
1869 local sink = logger.add_simple_sink(function (source, level, message) |
|
d99772b739e0
mod_admin_shell: Add watch:log() command to tail logs in realtime
Matthew Wild <mwild1@gmail.com>
parents:
12398
diff
changeset
|
1870 if writing then return; end |
|
d99772b739e0
mod_admin_shell: Add watch:log() command to tail logs in realtime
Matthew Wild <mwild1@gmail.com>
parents:
12398
diff
changeset
|
1871 writing = true; |
|
d99772b739e0
mod_admin_shell: Add watch:log() command to tail logs in realtime
Matthew Wild <mwild1@gmail.com>
parents:
12398
diff
changeset
|
1872 self.session.print(source, level, message); |
|
d99772b739e0
mod_admin_shell: Add watch:log() command to tail logs in realtime
Matthew Wild <mwild1@gmail.com>
parents:
12398
diff
changeset
|
1873 writing = false; |
|
d99772b739e0
mod_admin_shell: Add watch:log() command to tail logs in realtime
Matthew Wild <mwild1@gmail.com>
parents:
12398
diff
changeset
|
1874 end); |
|
d99772b739e0
mod_admin_shell: Add watch:log() command to tail logs in realtime
Matthew Wild <mwild1@gmail.com>
parents:
12398
diff
changeset
|
1875 |
|
d99772b739e0
mod_admin_shell: Add watch:log() command to tail logs in realtime
Matthew Wild <mwild1@gmail.com>
parents:
12398
diff
changeset
|
1876 while self.session.is_connected() do |
|
d99772b739e0
mod_admin_shell: Add watch:log() command to tail logs in realtime
Matthew Wild <mwild1@gmail.com>
parents:
12398
diff
changeset
|
1877 async.sleep(3); |
|
d99772b739e0
mod_admin_shell: Add watch:log() command to tail logs in realtime
Matthew Wild <mwild1@gmail.com>
parents:
12398
diff
changeset
|
1878 end |
|
d99772b739e0
mod_admin_shell: Add watch:log() command to tail logs in realtime
Matthew Wild <mwild1@gmail.com>
parents:
12398
diff
changeset
|
1879 if not logger.remove_sink(sink) then |
|
d99772b739e0
mod_admin_shell: Add watch:log() command to tail logs in realtime
Matthew Wild <mwild1@gmail.com>
parents:
12398
diff
changeset
|
1880 module:log("warn", "Unable to remove watch:log() sink"); |
|
d99772b739e0
mod_admin_shell: Add watch:log() command to tail logs in realtime
Matthew Wild <mwild1@gmail.com>
parents:
12398
diff
changeset
|
1881 end |
|
d99772b739e0
mod_admin_shell: Add watch:log() command to tail logs in realtime
Matthew Wild <mwild1@gmail.com>
parents:
12398
diff
changeset
|
1882 end |
|
d99772b739e0
mod_admin_shell: Add watch:log() command to tail logs in realtime
Matthew Wild <mwild1@gmail.com>
parents:
12398
diff
changeset
|
1883 |
|
12464
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1884 local stanza_watchers = module:require("mod_debug_stanzas/watcher"); |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1885 function def_env.watch:stanzas(target_spec, filter_spec) |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1886 local function handler(event_type, stanza, session) |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1887 if stanza then |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1888 if event_type == "sent" then |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1889 self.session.print(("\n<!-- sent to %s -->"):format(session.id)); |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1890 elseif event_type == "received" then |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1891 self.session.print(("\n<!-- received from %s -->"):format(session.id)); |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1892 else |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1893 self.session.print(("\n<!-- %s (%s) -->"):format(event_type, session.id)); |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1894 end |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1895 self.session.print(stanza); |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1896 elseif session then |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1897 self.session.print("\n<!-- session "..session.id.." "..event_type.." -->"); |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1898 elseif event_type then |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1899 self.session.print("\n<!-- "..event_type.." -->"); |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1900 end |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1901 end |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1902 |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1903 stanza_watchers.add({ |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1904 target_spec = { |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1905 jid = target_spec; |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1906 }; |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1907 filter_spec = filter_spec and { |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1908 with_jid = filter_spec; |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1909 }; |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1910 }, handler); |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1911 |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1912 while self.session.is_connected() do |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1913 async.sleep(3); |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1914 end |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1915 |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1916 stanza_watchers.remove(handler); |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
1917 end |
|
12399
d99772b739e0
mod_admin_shell: Add watch:log() command to tail logs in realtime
Matthew Wild <mwild1@gmail.com>
parents:
12398
diff
changeset
|
1918 |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1919 def_env.debug = {}; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1920 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1921 function def_env.debug:logevents(host) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1922 helpers.log_host_events(host); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1923 return true; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1924 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1925 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1926 function def_env.debug:events(host, event) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1927 local events_obj; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1928 if host and host ~= "*" then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1929 if host == "http" then |
|
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
1930 events_obj = require "prosody.net.http.server"._events; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1931 elseif not prosody.hosts[host] then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1932 return false, "Unknown host: "..host; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1933 else |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1934 events_obj = prosody.hosts[host].events; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1935 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1936 else |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1937 events_obj = prosody.events; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1938 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1939 return true, helpers.show_events(events_obj, event); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1940 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1941 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1942 function def_env.debug:timers() |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1943 local print = self.session.print; |
|
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
1944 local add_task = require"prosody.util.timer".add_task; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1945 local h, params = add_task.h, add_task.params; |
|
10988
9dcbbb1d12c3
mod_admin_shell: Handle server_epoll using monotonic time internally
Kim Alvefur <zash@zash.se>
parents:
10986
diff
changeset
|
1946 local function normalize_time(t) |
|
9dcbbb1d12c3
mod_admin_shell: Handle server_epoll using monotonic time internally
Kim Alvefur <zash@zash.se>
parents:
10986
diff
changeset
|
1947 return t; |
|
9dcbbb1d12c3
mod_admin_shell: Handle server_epoll using monotonic time internally
Kim Alvefur <zash@zash.se>
parents:
10986
diff
changeset
|
1948 end |
|
9dcbbb1d12c3
mod_admin_shell: Handle server_epoll using monotonic time internally
Kim Alvefur <zash@zash.se>
parents:
10986
diff
changeset
|
1949 local function format_time(t) |
|
9dcbbb1d12c3
mod_admin_shell: Handle server_epoll using monotonic time internally
Kim Alvefur <zash@zash.se>
parents:
10986
diff
changeset
|
1950 return os.date("%F %T", math.floor(normalize_time(t))); |
|
9dcbbb1d12c3
mod_admin_shell: Handle server_epoll using monotonic time internally
Kim Alvefur <zash@zash.se>
parents:
10986
diff
changeset
|
1951 end |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1952 if h then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1953 print("-- util.timer"); |
|
10986
d585deb8c882
mod_admin_shell: Fix debug:timers to handle net.server native timers
Kim Alvefur <zash@zash.se>
parents:
10929
diff
changeset
|
1954 elseif server.timer then |
|
d585deb8c882
mod_admin_shell: Fix debug:timers to handle net.server native timers
Kim Alvefur <zash@zash.se>
parents:
10929
diff
changeset
|
1955 print("-- net.server.timer"); |
|
d585deb8c882
mod_admin_shell: Fix debug:timers to handle net.server native timers
Kim Alvefur <zash@zash.se>
parents:
10929
diff
changeset
|
1956 h = server.timer.add_task.timers; |
|
10988
9dcbbb1d12c3
mod_admin_shell: Handle server_epoll using monotonic time internally
Kim Alvefur <zash@zash.se>
parents:
10986
diff
changeset
|
1957 normalize_time = server.timer.to_absolute_time or normalize_time; |
|
10986
d585deb8c882
mod_admin_shell: Fix debug:timers to handle net.server native timers
Kim Alvefur <zash@zash.se>
parents:
10929
diff
changeset
|
1958 end |
|
d585deb8c882
mod_admin_shell: Fix debug:timers to handle net.server native timers
Kim Alvefur <zash@zash.se>
parents:
10929
diff
changeset
|
1959 if h then |
|
11478
c0c4431ab27b
mod_admin_shell: Sort timers by time in debug:timers()
Kim Alvefur <zash@zash.se>
parents:
11365
diff
changeset
|
1960 local timers = {}; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1961 for i, id in ipairs(h.ids) do |
|
10986
d585deb8c882
mod_admin_shell: Fix debug:timers to handle net.server native timers
Kim Alvefur <zash@zash.se>
parents:
10929
diff
changeset
|
1962 local t, cb = h.priorities[i], h.items[id]; |
|
d585deb8c882
mod_admin_shell: Fix debug:timers to handle net.server native timers
Kim Alvefur <zash@zash.se>
parents:
10929
diff
changeset
|
1963 if not params then |
|
d585deb8c882
mod_admin_shell: Fix debug:timers to handle net.server native timers
Kim Alvefur <zash@zash.se>
parents:
10929
diff
changeset
|
1964 local param = cb.param; |
|
d585deb8c882
mod_admin_shell: Fix debug:timers to handle net.server native timers
Kim Alvefur <zash@zash.se>
parents:
10929
diff
changeset
|
1965 if param then |
|
d585deb8c882
mod_admin_shell: Fix debug:timers to handle net.server native timers
Kim Alvefur <zash@zash.se>
parents:
10929
diff
changeset
|
1966 cb = param.callback; |
|
d585deb8c882
mod_admin_shell: Fix debug:timers to handle net.server native timers
Kim Alvefur <zash@zash.se>
parents:
10929
diff
changeset
|
1967 else |
|
d585deb8c882
mod_admin_shell: Fix debug:timers to handle net.server native timers
Kim Alvefur <zash@zash.se>
parents:
10929
diff
changeset
|
1968 cb = cb.timer_callback or cb; |
|
d585deb8c882
mod_admin_shell: Fix debug:timers to handle net.server native timers
Kim Alvefur <zash@zash.se>
parents:
10929
diff
changeset
|
1969 end |
|
d585deb8c882
mod_admin_shell: Fix debug:timers to handle net.server native timers
Kim Alvefur <zash@zash.se>
parents:
10929
diff
changeset
|
1970 elseif params[id] then |
|
d585deb8c882
mod_admin_shell: Fix debug:timers to handle net.server native timers
Kim Alvefur <zash@zash.se>
parents:
10929
diff
changeset
|
1971 cb = params[id].callback or cb; |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1972 end |
|
11478
c0c4431ab27b
mod_admin_shell: Sort timers by time in debug:timers()
Kim Alvefur <zash@zash.se>
parents:
11365
diff
changeset
|
1973 table.insert(timers, { format_time(t), cb }); |
|
c0c4431ab27b
mod_admin_shell: Sort timers by time in debug:timers()
Kim Alvefur <zash@zash.se>
parents:
11365
diff
changeset
|
1974 end |
|
c0c4431ab27b
mod_admin_shell: Sort timers by time in debug:timers()
Kim Alvefur <zash@zash.se>
parents:
11365
diff
changeset
|
1975 table.sort(timers, function (a, b) return a[1] < b[1] end); |
|
c0c4431ab27b
mod_admin_shell: Sort timers by time in debug:timers()
Kim Alvefur <zash@zash.se>
parents:
11365
diff
changeset
|
1976 for _, t in ipairs(timers) do |
|
c0c4431ab27b
mod_admin_shell: Sort timers by time in debug:timers()
Kim Alvefur <zash@zash.se>
parents:
11365
diff
changeset
|
1977 print(t[1], t[2]) |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1978 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1979 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1980 if server.event_base then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1981 local count = 0; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1982 for _, v in pairs(debug.getregistry()) do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1983 if type(v) == "function" and v.callback and v.callback == add_task._on_timer then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1984 count = count + 1; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1985 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1986 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1987 print(count .. " libevent callbacks"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1988 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1989 if h then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1990 local next_time = h:peek(); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1991 if next_time then |
|
10988
9dcbbb1d12c3
mod_admin_shell: Handle server_epoll using monotonic time internally
Kim Alvefur <zash@zash.se>
parents:
10986
diff
changeset
|
1992 return true, ("Next event at %s (in %.6fs)"):format(format_time(next_time), normalize_time(next_time) - time.now()); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1993 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1994 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1995 return true; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1996 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1997 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1998 -- COMPAT: debug:timers() was timer:info() for some time in trunk |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1999 def_env.timer = { info = def_env.debug.timers }; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2000 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2001 def_env.stats = {}; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2002 |
|
10887
3debe04a6162
mod_admin_shell: Format stats with util.human.units
Kim Alvefur <zash@zash.se>
parents:
10878
diff
changeset
|
2003 local short_units = { |
|
3debe04a6162
mod_admin_shell: Format stats with util.human.units
Kim Alvefur <zash@zash.se>
parents:
10878
diff
changeset
|
2004 seconds = "s", |
|
3debe04a6162
mod_admin_shell: Format stats with util.human.units
Kim Alvefur <zash@zash.se>
parents:
10878
diff
changeset
|
2005 bytes = "B", |
|
3debe04a6162
mod_admin_shell: Format stats with util.human.units
Kim Alvefur <zash@zash.se>
parents:
10878
diff
changeset
|
2006 }; |
|
3debe04a6162
mod_admin_shell: Format stats with util.human.units
Kim Alvefur <zash@zash.se>
parents:
10878
diff
changeset
|
2007 |
|
11523
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2008 local stats_methods = {}; |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2009 |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2010 function stats_methods:render_single_fancy_histogram_ex(print, prefix, metric_family, metric, cumulative) |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2011 local creation_timestamp, sum, count |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2012 local buckets = {} |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2013 local prev_bucket_count = 0 |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2014 for suffix, extra_labels, value in metric:iter_samples() do |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2015 if suffix == "_created" then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2016 creation_timestamp = value |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2017 elseif suffix == "_sum" then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2018 sum = value |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2019 elseif suffix == "_count" then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2020 count = value |
|
12226
7db81c9cbbbf
mod_admin_shell: Fix traceback on rendering graph of stats without extra labels
Kim Alvefur <zash@zash.se>
parents:
12225
diff
changeset
|
2021 elseif extra_labels then |
|
11523
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2022 local bucket_threshold = extra_labels["le"] |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2023 local bucket_count |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2024 if cumulative then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2025 bucket_count = value |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2026 else |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2027 bucket_count = value - prev_bucket_count |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2028 prev_bucket_count = value |
|
10887
3debe04a6162
mod_admin_shell: Format stats with util.human.units
Kim Alvefur <zash@zash.se>
parents:
10878
diff
changeset
|
2029 end |
|
11523
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2030 if bucket_threshold == "+Inf" then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2031 t_insert(buckets, {threshold = 1/0, count = bucket_count}) |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2032 elseif bucket_threshold ~= nil then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2033 t_insert(buckets, {threshold = tonumber(bucket_threshold), count = bucket_count}) |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2034 end |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2035 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2036 end |
|
11523
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2037 |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2038 if #buckets == 0 or not creation_timestamp or not sum or not count then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2039 print("[no data or not a histogram]") |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2040 return false |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2041 end |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2042 |
|
11523
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2043 local graph_width, graph_height, wscale = #buckets, 10, 1; |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2044 if graph_width < 8 then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2045 wscale = 8 |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2046 elseif graph_width < 16 then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2047 wscale = 4 |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2048 elseif graph_width < 32 then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2049 wscale = 2 |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2050 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2051 local eighth_chars = " ▁▂▃▄▅▆▇█"; |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2052 |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2053 local max_bin_samples = 0 |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2054 for _, bucket in ipairs(buckets) do |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2055 if bucket.count > max_bin_samples then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2056 max_bin_samples = bucket.count |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2057 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2058 end |
|
11523
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2059 |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2060 print(""); |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2061 print(prefix) |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2062 print(("_"):rep(graph_width*wscale).." "..max_bin_samples); |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2063 for row = graph_height, 1, -1 do |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2064 local row_chars = {}; |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2065 local min_eighths, max_eighths = 8, 0; |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2066 for i = 1, #buckets do |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2067 local char_eighths = math.ceil(math.max(math.min((graph_height/(max_bin_samples/buckets[i].count))-(row-1), 1), 0)*8); |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2068 if char_eighths < min_eighths then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2069 min_eighths = char_eighths; |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2070 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2071 if char_eighths > max_eighths then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2072 max_eighths = char_eighths; |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2073 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2074 if char_eighths == 0 then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2075 row_chars[i] = ("-"):rep(wscale); |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2076 else |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2077 local char = eighth_chars:sub(char_eighths*3+1, char_eighths*3+3); |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2078 row_chars[i] = char:rep(wscale); |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2079 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2080 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2081 print(table.concat(row_chars).."|- "..string.format("%.8g", math.ceil((max_bin_samples/graph_height)*(row-0.5)))); |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2082 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2083 |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2084 local legend_pat = string.format("%%%d.%dg", wscale-1, wscale-1) |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2085 local row = {} |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2086 for i = 1, #buckets do |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2087 local threshold = buckets[i].threshold |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2088 t_insert(row, legend_pat:format(threshold)) |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2089 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2090 t_insert(row, " " .. metric_family.unit) |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2091 print(t_concat(row, "/")) |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2092 |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2093 return true |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2094 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2095 |
|
11523
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2096 function stats_methods:render_single_fancy_histogram(print, prefix, metric_family, metric) |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2097 return self:render_single_fancy_histogram_ex(print, prefix, metric_family, metric, false) |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2098 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2099 |
|
11523
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2100 function stats_methods:render_single_fancy_histogram_cf(print, prefix, metric_family, metric) |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2101 -- cf = cumulative frequency |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2102 return self:render_single_fancy_histogram_ex(print, prefix, metric_family, metric, true) |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2103 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2104 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2105 function stats_methods:cfgraph() |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2106 for _, stat_info in ipairs(self) do |
|
11523
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2107 local family_name, metric_family = unpack(stat_info, 1, 2) |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2108 local function print(s) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2109 table.insert(stat_info.output, s); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2110 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2111 |
|
11523
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2112 if not self:render_family(print, family_name, metric_family, self.render_single_fancy_histogram_cf) then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2113 return self |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2114 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2115 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2116 return self; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2117 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2118 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2119 function stats_methods:histogram() |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2120 for _, stat_info in ipairs(self) do |
|
11523
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2121 local family_name, metric_family = unpack(stat_info, 1, 2) |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2122 local function print(s) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2123 table.insert(stat_info.output, s); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2124 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2125 |
|
11523
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2126 if not self:render_family(print, family_name, metric_family, self.render_single_fancy_histogram) then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2127 return self |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2128 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2129 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2130 return self; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2131 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2132 |
|
11523
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2133 function stats_methods:render_single_counter(print, prefix, metric_family, metric) |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2134 local created_timestamp, current_value |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2135 for suffix, _, value in metric:iter_samples() do |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2136 if suffix == "_created" then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2137 created_timestamp = value |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2138 elseif suffix == "_total" then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2139 current_value = value |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2140 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2141 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2142 if current_value and created_timestamp then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2143 local base_unit = short_units[metric_family.unit] or metric_family.unit |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2144 local unit = base_unit .. "/s" |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2145 local factor = 1 |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2146 if base_unit == "s" then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2147 -- be smart! |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2148 unit = "%" |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2149 factor = 100 |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2150 elseif base_unit == "" then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2151 unit = "events/s" |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2152 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2153 print(("%-50s %s"):format(prefix, format_number(factor * current_value / (self.now - created_timestamp), unit.." [avg]"))); |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2154 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2155 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2156 |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2157 function stats_methods:render_single_gauge(print, prefix, metric_family, metric) |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2158 local current_value |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2159 for _, _, value in metric:iter_samples() do |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2160 current_value = value |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2161 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2162 if current_value then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2163 local unit = short_units[metric_family.unit] or metric_family.unit |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2164 print(("%-50s %s"):format(prefix, format_number(current_value, unit))); |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2165 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2166 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2167 |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2168 function stats_methods:render_single_summary(print, prefix, metric_family, metric) |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2169 local sum, count |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2170 for suffix, _, value in metric:iter_samples() do |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2171 if suffix == "_sum" then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2172 sum = value |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2173 elseif suffix == "_count" then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2174 count = value |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2175 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2176 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2177 if sum and count then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2178 local unit = short_units[metric_family.unit] or metric_family.unit |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2179 if count == 0 then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2180 print(("%-50s %s"):format(prefix, "no obs.")); |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2181 else |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2182 print(("%-50s %s"):format(prefix, format_number(sum / count, unit.."/event [avg]"))); |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2183 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2184 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2185 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2186 |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2187 function stats_methods:render_family(print, family_name, metric_family, render_func) |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2188 local labelkeys = metric_family.label_keys |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2189 if #labelkeys > 0 then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2190 print(family_name) |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2191 for labelset, metric in metric_family:iter_metrics() do |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2192 local labels = {} |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2193 for i, k in ipairs(labelkeys) do |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2194 local v = labelset[i] |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2195 t_insert(labels, ("%s=%s"):format(k, v)) |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2196 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2197 local prefix = " "..t_concat(labels, " ") |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2198 render_func(self, print, prefix, metric_family, metric) |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2199 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2200 else |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2201 for _, metric in metric_family:iter_metrics() do |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2202 render_func(self, print, family_name, metric_family, metric) |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2203 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2204 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2205 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2206 |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2207 local function stats_tostring(stats) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2208 local print = stats.session.print; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2209 for _, stat_info in ipairs(stats) do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2210 if #stat_info.output > 0 then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2211 print("\n#"..stat_info[1]); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2212 print(""); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2213 for _, v in ipairs(stat_info.output) do |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2214 print(v); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2215 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2216 print(""); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2217 else |
|
11523
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2218 local metric_family = stat_info[2] |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2219 if metric_family.type_ == "counter" then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2220 stats:render_family(print, stat_info[1], metric_family, stats.render_single_counter) |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2221 elseif metric_family.type_ == "gauge" or metric_family.type_ == "unknown" then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2222 stats:render_family(print, stat_info[1], metric_family, stats.render_single_gauge) |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2223 elseif metric_family.type_ == "summary" or metric_family.type_ == "histogram" then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2224 stats:render_family(print, stat_info[1], metric_family, stats.render_single_summary) |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2225 end |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2226 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2227 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2228 return #stats.." statistics displayed"; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2229 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2230 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2231 local stats_mt = {__index = stats_methods, __tostring = stats_tostring } |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2232 local function new_stats_context(self) |
|
11523
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2233 -- TODO: instead of now(), it might be better to take the time of the last |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2234 -- interval, if the statistics backend is set to use periodic collection |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2235 -- Otherwise we get strange stuff like average cpu usage decreasing until |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2236 -- the next sample and so on. |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2237 return setmetatable({ session = self.session, stats = true, now = time.now() }, stats_mt); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2238 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2239 |
|
11523
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2240 function def_env.stats:show(name_filter) |
|
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12927
diff
changeset
|
2241 local statsman = require "prosody.core.statsmanager" |
|
11523
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2242 local collect = statsman.collect |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2243 if collect then |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2244 -- force collection if in manual mode |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2245 collect() |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2246 end |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2247 local metric_registry = statsman.get_metric_registry(); |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2248 local displayed_stats = new_stats_context(self); |
|
11523
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2249 for family_name, metric_family in iterators.sorted_pairs(metric_registry:get_metric_families()) do |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2250 if not name_filter or family_name:match(name_filter) then |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2251 table.insert(displayed_stats, { |
|
11523
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2252 family_name, |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2253 metric_family, |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2254 output = {} |
|
5f15ab7c6ae5
Statistics: Rewrite statistics backends to use OpenMetrics
Jonas Schäfer <jonas@wielicki.name>
parents:
11504
diff
changeset
|
2255 }) |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2256 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2257 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2258 return displayed_stats; |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2259 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2260 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2261 |
|
12464
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
2262 function module.unload() |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
2263 stanza_watchers.cleanup(); |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
2264 end |
|
f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
Matthew Wild <mwild1@gmail.com>
parents:
12399
diff
changeset
|
2265 |
|
10856
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2266 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2267 ------------- |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2268 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2269 function printbanner(session) |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2270 local option = module:get_option_string("console_banner", "full"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2271 if option == "full" or option == "graphic" then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2272 session.print [[ |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2273 ____ \ / _ |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2274 | _ \ _ __ ___ ___ _-_ __| |_ _ |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2275 | |_) | '__/ _ \/ __|/ _ \ / _` | | | | |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2276 | __/| | | (_) \__ \ |_| | (_| | |_| | |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2277 |_| |_| \___/|___/\___/ \__,_|\__, | |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2278 A study in simplicity |___/ |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2279 |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2280 ]] |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2281 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2282 if option == "short" or option == "full" then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2283 session.print("Welcome to the Prosody administration console. For a list of commands, type: help"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2284 session.print("You may find more help on using this console in our online documentation at "); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2285 session.print("https://prosody.im/doc/console\n"); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2286 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2287 if option ~= "short" and option ~= "full" and option ~= "graphic" then |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2288 session.print(option); |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2289 end |
|
c99711eda0d1
mod_admin_shell: New module that implements the console interface over an admin socket
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2290 end |
