Mercurial > prosody-modules
diff mod_http_stats_stream/mod_http_stats_stream.lua @ 2432:47a6f01231b2
mod_http_stats_stream: Sends statistics from statsmanager over an HTTP event stream
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Wed, 04 Jan 2017 09:18:34 +0100 |
parents | |
children | fd054689a64c |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_http_stats_stream/mod_http_stats_stream.lua Wed Jan 04 09:18:34 2017 +0100 @@ -0,0 +1,50 @@ +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; + } +});