File

mod_http_stats_stream/mod_http_stats_stream.lua @ 2608:362ca94192ee

mod_smacks: Add resumed session to event "smacks-hibernation-end" Older versions of this event only have the "intermediate" session in event.session (the one used to resume the existing session), but not the resumed one. This adds event.resumed which contains the resumed one alongside to event.session.
author tmolitor <thilo@eightysoft.de>
date Sat, 11 Mar 2017 01:37:28 +0100
parent 2432:47a6f01231b2
child 3635:fd054689a64c
line wrap: on
line source

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