-- (C) 2011, Marco Cirillo (LW.Org)
-- Exposes stats on HTTP for the stanza counter module.
module:set_global()
local ports = module:get_option_array("stanza_counter_http_ports" or {{ port = 5280 }})
local httpserver = require "net.httpserver"
-- http handlers
local r_200 = "\n\n
\nProsody's Stanza Counter\n\n\n\n\nIncoming and Outgoing stanzas divided per type
\nIncoming IQs: %d
\nOutgoing IQs: %d
\nIncoming Messages: %d
\nOutgoing Messages: %d
\nIncoming Presences: %d
\nOutgoing Presences: %d
\n\n\n\n"
local r_err = "\n\n
\nProsody's Stanza Counter - Error %s\n\n\n\n\n%s
\n\n\n\n"
local function res(code, r, h)
local response = {
status = code;
body = r;
}
if h then response.headers = h; end
return response
end
local function req(method, body, request)
if not prosody.stanza_counter then
local err500 = r_err:format("500", "Stats not found, is the counter module loaded?")
return res(500, err500) end
if method == "GET" then
local forge_res = r_200:format(prosody.stanza_counter.iq["incoming"],
prosody.stanza_counter.iq["outgoing"],
prosody.stanza_counter.message["incoming"],
prosody.stanza_counter.message["outgoing"],
prosody.stanza_counter.presence["incoming"],
prosody.stanza_counter.presence["outgoing"]);
return res(200, forge_res)
else
local err405 = r_err:format("405", "Only GET is supported")
return res(405, err405, {["Allow"] = "GET"})
end
end
-- initialization.
-- init http interface
local function setup()
httpserver.new_from_config(ports, req, { base = "stanza-counter" })
end
-- hook server started
module:hook("server-started", setup)