view mod_http_stats_stream/mod_http_stats_stream.lua @ 2494:d300ae5dba87

mod_smacks: Fix some bugs with smacks-ack-delayed event triggering. The old code had several flaws which are addressed here. First of all this fixes the if statement guarding the event generation There where some timing glitches addressed by this commit as well.
author tmolitor <thilo@eightysoft.de>
date Sun, 12 Feb 2017 21:23:22 +0100
parents 47a6f01231b2
children 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;
	}
});