--- a/mod_muc_log/mod_muc_log.lua Wed Jun 25 20:45:01 2014 +0200
+++ b/mod_muc_log/mod_muc_log.lua Wed Jun 25 20:46:35 2014 +0200
@@ -16,21 +16,39 @@
-- Module Definitions
+local function get_room_from_jid(jid)
+ local node, host = split_jid(jid);
+ local component = hosts[host];
+ if component then
+ local muc = component.modules.muc
+ if muc and rawget(muc,"rooms") then
+ -- We're running 0.9.x or 0.10 (old MUC API)
+ return muc.rooms[jid];
+ elseif muc and rawget(muc,"get_room_from_jid") then
+ -- We're running >0.10 (new MUC API)
+ return muc.get_room_from_jid(jid);
+ else
+ return
+ end
+ end
+end
+
function log_if_needed(event)
local stanza = event.stanza;
- if (stanza.name == "presence") or
+ if (stanza.name == "presence") or
(stanza.name == "iq") or
- (stanza.name == "message" and tostring(stanza.attr.type) == "groupchat")
+ (stanza.name == "message" and tostring(stanza.attr.type) == "groupchat")
then
local node, host = split_jid(stanza.attr.to);
- local muc = hosts[host].muc;
if node and host then
local bare = node .. "@" .. host;
- if muc and muc.rooms[bare] then
- local room = muc.rooms[bare]
- local today = os.date("%y%m%d");
- local now = os.date("%X")
+ if get_room_from_jid(bare) then
+ local room = get_room_from_jid(bare)
+
+ local today = os.date("!%y%m%d");
+ local now = os.date("!%X")
+
local muc_to = nil
local muc_from = nil;
local already_joined = false;
--- a/mod_muc_log_http/muc_log_http/mod_muc_log_http.lua Wed Jun 25 20:45:01 2014 +0200
+++ b/mod_muc_log_http/muc_log_http/mod_muc_log_http.lua Wed Jun 25 20:46:35 2014 +0200
@@ -66,18 +66,57 @@
return s and (s:gsub("[^a-zA-Z0-9.~_-]", function (c) return ("%%%02x"):format(c:byte()); end));
end
-local function generate_room_list(component)
- local rooms = "";
- local component_host = hosts[component];
- if component_host and component_host.muc ~= nil then
- for jid, room in pairs(component_host.muc.rooms) do
+local function get_room_from_jid(jid)
+ local node, host = split_jid(jid);
+ local component = hosts[host];
+ if component then
+ local muc = component.modules.muc
+ if muc and rawget(muc,"rooms") then
+ -- We're running 0.9.x or 0.10 (old MUC API)
+ return muc.rooms[jid];
+ elseif muc and rawget(muc,"get_room_from_jid") then
+ -- We're running >0.10 (new MUC API)
+ return muc.get_room_from_jid(jid);
+ else
+ return
+ end
+ end
+end
+
+local function get_room_list(host)
+ local component = hosts[host];
+ local list = {};
+ if component then
+ local muc = component.modules.muc
+ if muc and rawget(muc,"rooms") then
+ -- We're running 0.9.x or 0.10 (old MUC API)
+ for _, room in pairs(muc.rooms) do
+ list[room.jid] = room;
+ end
+ return list;
+ elseif muc and rawget(muc,"each_room") then
+ -- We're running >0.10 (new MUC API)
+ for room, _ in muc.each_room() do
+ list[room.jid] = room;
+ end
+ return list;
+ end
+ end
+end
+
+local function generate_room_list(host)
+ local rooms;
+
+ for jid, room in pairs(get_room_list(host)) do
local node = split_jid(jid);
if not room._data.hidden and room._data.logging and node then
- rooms = rooms .. html.rooms.bit:gsub("###ROOM###", urlencode(node)):gsub("###COMPONENT###", component);
+ rooms = (rooms or "") .. html.rooms.bit:gsub("###ROOM###", urlencode(node)):gsub("###COMPONENT###", host);
end
end
- return html.rooms.body:gsub("###ROOMS_STUFF###", rooms):gsub("###COMPONENT###", component), "Chatroom logs for "..component;
- end
+
+ if rooms then
+ return html.rooms.body:gsub("###ROOMS_STUFF###", rooms):gsub("###COMPONENT###", host), "Chatroom logs for "..host;
+ end
end
-- Calendar stuff
@@ -224,7 +263,7 @@
local topic = "";
local component = hosts[host];
- if not(component and component.muc and component.muc.rooms[bare_room_jid]) then
+ if not(get_room_from_jid(bare_room_jid)) then
return;
end
@@ -232,7 +271,8 @@
attributes = lfs.attributes(path);
do
local found = 0;
- for jid, room in pairs(component.muc.rooms) do
+ module:log("debug", generate_room_list(host));
+ for jid, room in pairs(get_room_list(host)) do
local node = split_jid(jid)
if not room._data.hidden and room._data.logging and node then
if found == 0 then
@@ -249,7 +289,7 @@
end
end
- room = component.muc.rooms[bare_room_jid];
+ room = get_room_from_jid(bare_room_jid);
if room._data.hidden or not room._data.logging then
room = nil;
end
@@ -611,6 +651,7 @@
local room;
local node, day, more = request.url.path:match("^/"..url_base.."/+([^/]*)/*([^/]*)/*(.*)$");
+
if more ~= "" then
response.status_code = 404;
return response:send(handle_error(response.status_code, "Unknown URL."));
@@ -625,8 +666,7 @@
return response:send(handle_error(response.status_code, "Muc Theme is not loaded."));
end
-
- if node then room = hosts[my_host].modules.muc.rooms[node.."@"..my_host]; end
+ if node then room = get_room_from_jid(node.."@"..my_host); end
if node and not room then
response.status_code = 404;
return response:send(handle_error(response.status_code, "Room doesn't exist."));
@@ -636,7 +676,6 @@
return response:send(handle_error(response.status_code, "There're no logs for this room."));
end
-
if not node then -- room list for component
return response:send(create_doc(generate_room_list(my_host)));
elseif not day then -- room's listing
--- a/mod_statsd/mod_statsd.lua Wed Jun 25 20:45:01 2014 +0200
+++ b/mod_statsd/mod_statsd.lua Wed Jun 25 20:46:35 2014 +0200
@@ -15,22 +15,25 @@
sock:setpeername(options.hostname or "127.0.0.1", options.port or 8125)
-- Metrics are namespaced by ".", and seperated by newline
-function clean(s) return (s:gsub("[%.\n]", "_")) end
+function clean(s) return (s:gsub("[%.:\n]", "_")) end
-- A 'safer' send function to expose
function send(s) return sock:send(s) end
-- prefix should end in "."
-local prefix = (options.prefix or ("prosody." .. clean(module.host))) .. "."
+local prefix = (options.prefix or "prosody") .. "."
+if not options.no_host then
+ prefix = prefix .. clean(module.host) .. "."
+end
-- Track users as they bind/unbind
-- count bare sessions every time, as we have no way to tell if it's a new bare session or not
module:hook("resource-bind", function(event)
- send(prefix.."bare_sessions:"..iterators.count(bare_sessions).."|g")
+ send(prefix.."bare_sessions:"..iterators.count(pairs(bare_sessions)).."|g")
send(prefix.."full_sessions:+1|g")
end, 1)
module:hook("resource-unbind", function(event)
- send(prefix.."bare_sessions:"..iterators.count(bare_sessions).."|g")
+ send(prefix.."bare_sessions:"..iterators.count(pairs(bare_sessions)).."|g")
send(prefix.."full_sessions:-1|g")
end, 1)
@@ -53,9 +56,20 @@
send(prefix..clean(room_node)..".broadcast-message:1|c")
end)
module:hook("muc-invite", function(event)
+ -- Total count
send(prefix.."invite:1|c")
local room_node = jid.split(event.room.jid)
+ -- Counts per room
send(prefix..clean(room_node)..".invite:1|c")
- local to_node, to_host, to_resource = jid.split(event.stanza.attr.to)
- send(prefix..clean(to_node)..".invites:1|c")
+ -- Counts per recipient
+ send(prefix..clean(event.stanza.attr.to)..".invited:1|c")
end)
+module:hook("muc-decline", function(event)
+ -- Total count
+ send(prefix.."decline:1|c")
+ local room_node = jid.split(event.room.jid)
+ -- Counts per room
+ send(prefix..clean(room_node)..".decline:1|c")
+ -- Counts per sender
+ send(prefix..clean(event.incoming.attr.from)..".declined:1|c")
+end)