local statsman = require "core.statsmanager"; local json = require "util.json"; 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.conn:write(table.concat({ "HTTP/1.1 200 OK"; "Content-Type: text/event-stream"; "X-Accel-Buffering: no"; -- For nginx maybe? ""; "event: stats-full"; "data: "..json.encode(statsman.get_stats()); ""; ""; }, "\r\n")); sessions[response] = request; return true; end module:hook_global("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; } });