Changeset

436:e4a1f0425380

mod_stanza_counter: splitted plugin :/
author Marco Cirillo <maranda@lightwitch.org>
date Tue, 20 Sep 2011 23:16:32 +0000
parents 435:b6abe463b4fc
children 437:78a2a6b2bea3
files mod_stanza_counter/mod_stanza_counter.lua mod_stanza_counter/mod_stanza_counter_http.lua
diffstat 2 files changed, 54 insertions(+), 40 deletions(-) [+]
line wrap: on
line diff
--- a/mod_stanza_counter/mod_stanza_counter.lua	Tue Sep 20 22:42:03 2011 +0000
+++ b/mod_stanza_counter/mod_stanza_counter.lua	Tue Sep 20 23:16:32 2011 +0000
@@ -1,40 +1,7 @@
 -- (C) 2011, Marco Cirillo (LW.Org)
--- General Stanzas' Counter with web output.
+-- General Stanzas' Counter.
 
 local jid_bare = require "util.jid".bare
-local httpserver = require "net.httpserver"
-
-local ports = module:get_option_array("stanza_counter_ports" or {{ port = 5280 }})
-
--- http handlers
-
-local r_200 = "\n<html>\n<head>\n<title>Prosody's Stanza Counter</title>\n<meta name=\"robots\" content=\"noindex, nofollow\" />\n</head>\n\n<body>\n<h3>Incoming and Outgoing stanzas divided per type</h3>\n<p><strong>Incoming IQs</strong>: %d<br/>\n<strong>Outgoing IQs</strong>: %d<br/>\n<strong>Incoming Messages</strong>: %d<br/>\n<strong>Outgoing Messages</strong>: %d<br/>\n<strong>Incoming Presences</strong>: %d<br/>\n<strong>Outgoing Presences</strong>: %d<p>\n</body>\n\n</html>\n"
-
-local r_405 = "\n<html>\n<head>\n<title>Prosody's Stanza Counter - Error</title>\n<meta name=\"robots\" content=\"noindex, nofollow\" />\n</head>\n\n<body>\n<h3>Bad Method ... I only support GET.</h3>\n</body>\n\n</html>\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 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
-		return res(405, r_405, {["Allow"] = "GET"})
-	end
-end
 
 -- Setup, Init functions.
 -- initialize function counter table on the global object on start
@@ -46,14 +13,9 @@
 	}
 end
 
--- init http interface
-local function init_web()
-	httpserver.new_from_config(ports, req, { base = "stanza-counter" })
-end
-
 -- Setup on server start
 local function setup()
-	init_counter(); init_web();
+	init_counter();
 end
 
 -- Basic Stanzas' Counters
@@ -132,3 +94,4 @@
 
 -- Hook server start to initialize the counter.
 module:hook("server-started", setup)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_stanza_counter/mod_stanza_counter_http.lua	Tue Sep 20 23:16:32 2011 +0000
@@ -0,0 +1,51 @@
+-- (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<html>\n<head>\n<title>Prosody's Stanza Counter</title>\n<meta name=\"robots\" content=\"noindex, nofollow\" />\n</head>\n\n<body>\n<h3>Incoming and Outgoing stanzas divided per type</h3>\n<p><strong>Incoming IQs</strong>: %d<br/>\n<strong>Outgoing IQs</strong>: %d<br/>\n<strong>Incoming Messages</strong>: %d<br/>\n<strong>Outgoing Messages</strong>: %d<br/>\n<strong>Incoming Presences</strong>: %d<br/>\n<strong>Outgoing Presences</strong>: %d<p>\n</body>\n\n</html>\n"
+
+local r_err = "\n<html>\n<head>\n<title>Prosody's Stanza Counter - Error %s</title>\n<meta name=\"robots\" content=\"noindex, nofollow\" />\n</head>\n\n<body>\n<h3>%s</h3>\n</body>\n\n</html>\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)
+	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)