Mercurial > prosody-modules
view mod_http_stats_stream/mod_http_stats_stream.lua @ 5516:f25df3af02c1
mod_client_management: Include client software version number in listing
Should you ever wish to revoke a client by version number, e.g. for
security reasons affecting certain versions, then it would be good to at
the very least see which version is used.
Also includes the OAuth2 software ID, an optional unique identifier that
should be the same for all installations of a particular software.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 03 Jun 2023 19:21:39 +0200 |
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; } });