--- /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;
+ }
+});