Mercurial > prosody-modules
view mod_log_slow_events/mod_log_slow_events.lua @ 4887:806f7c8d830b
mod_ping_muc: Remove 'kick' status code
The intent is "you fell off", not "you were kicked out", however older
clients may not recognise the 333 code, but that will have to be an
acceptable loss.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 07 Feb 2022 16:52:19 +0100 |
parents | 3ba8fd1a297e |
children |
line wrap: on
line source
module:set_global(); local time = require "socket".gettime; local base64_decode = require "util.encodings".base64.decode; local max_seconds = module:get_option_number("log_slow_events_threshold", 0.5); local measure_slow_event = module:measure("slow_events", "rate"); function event_wrapper(handlers, event_name, event_data) local start = time(); local ret = handlers(event_name, event_data); local duration = time()-start; if duration > max_seconds then local data = {}; if event_data then local function log_data(name, value) if value then table.insert(data, ("%s=%q"):format(name, value)); return true; end end local sess = event_data.origin or event_data.session; if sess then log_data("ip", sess.ip); if not log_data("full_jid", sess.full_jid) then log_data("username", sess.username); end log_data("type", sess.type); log_data("host", sess.host); end local stanza = event_data.stanza; if stanza then log_data("stanza", tostring(stanza)); else local request = event_data.request; if request then log_data("http_method", request.method); log_data("http_path", request.path); local auth = request.headers.authorization; if auth then local creds = auth:match("^Basic +(.+)$"); if creds then local user = string.match(base64_decode(creds) or "", "^([^:]+):"); log_data("http_user", user); end end end end end measure_slow_event(); module:log("warn", "Slow event '%s' took %0.2fs: %s", event_name, duration, next(data) and table.concat(data, ", ") or "no recognised data"); end return ret; end local http_events = require "net.http.server"._events; module:wrap_object_event(http_events, false, event_wrapper); module:wrap_event(false, event_wrapper); function module.add_host(module) module:wrap_event(false, event_wrapper); end