Software /
code /
prosody-modules
File
mod_log_slow_events/mod_log_slow_events.lua @ 4282:281a864e7472
mod_pubsub_feeds: Don't skip publishing items after an existing one
I encountered a feed which was backwards, such that older entries were
considered first and then it would skip newer entries.
This may however run into trouble if the feed contains more items than
what's persisted in pubsub.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 30 Nov 2020 15:17:29 +0100 |
parent | 2850:3ba8fd1a297e |
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