Mercurial > prosody-modules
view mod_http_stats_stream/mod_http_stats_stream.lua @ 6092:bd3ff802d883
mod_anti_spam: Fix another traceback for origin sessions without an IP
This is likely to be the case for stanzas originating from local hosts, for
example (so not true s2s). It should be safe to bypass the IP check for those.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Sat, 28 Dec 2024 21:02:08 +0000 |
| parents | bac3dae031ee |
| children |
line wrap: on
line source
module:set_global(); local statsman = require "core.statsmanager"; local http = require "net.http.server"; local json = require "util.json"; assert(statsman.get_stats, "not compatible with trunk based on openmetrics"); local sessions = {}; local function updates_client_closed(response) module:log("debug", "Streamstats client closed"); sessions[response] = nil; end local function get_updates(event) local request, response = event.request, event.response; response.on_destroy = updates_client_closed; response.headers.content_type = "text/event-stream"; response.headers.x_accel_buffering = "no"; -- for nginx maybe? local resp = http.prepare_header(response); table.insert(resp, "event: stats-full\r\n"); table.insert(resp, "data: "); table.insert(resp, json.encode(statsman.get_stats())); table.insert(resp, "\r\n\r\n"); response.conn:write(table.concat(resp)); sessions[response] = request; return true; end module:hook("stats-updated", function (event) local data = table.concat({ "event: stats-updated"; "data: "..json.encode(event.changed_stats); ""; ""; }, "\r\n") for response in pairs(sessions) do response.conn:write(data); end end); module:depends("http"); module:provides("http", { route = { GET = get_updates; } });
