Diff

mod_streamstats/mod_streamstats.lua @ 741:a7f7a7e75737

mod_streamstats: Switch to portmanager and other 0.9 goodness
author Kim Alvefur <zash@zash.se>
date Wed, 11 Jul 2012 19:07:15 +0200
parent 639:d4f3754c4286
line wrap: on
line diff
--- a/mod_streamstats/mod_streamstats.lua	Sun Jul 08 01:00:12 2012 +0200
+++ b/mod_streamstats/mod_streamstats.lua	Wed Jul 11 19:07:15 2012 +0200
@@ -1,11 +1,14 @@
-local stats = prosody.stats;
+module:set_global();
+local stats = module:shared"stats";
 local iter = require "util.iterators";
 local count, keys = iter.count, iter.keys;
 
-if not stats then
-	stats = {
-		stats = {}; conns = {};
-		
+stats.stats = stats.stats or {};
+stats.conns = stats.conns or {};
+
+setmetatable(stats, {
+	__index = {
+
 		broadcast = function (self, stat)
 			local value = self.stats[stat];
 			for conn in pairs(self.conns) do
@@ -24,75 +27,78 @@
 			self.stats[stat] = value;
 			self:broadcast(stat);
 		end;
-		
+
 		add_conn = function (self, conn)
 			self.conns[conn] = true;
 			for stat, value in pairs(self.stats) do
 				conn:write(stat..":"..value.."\n");
 			end
 		end;
-		
+
 		remove_conn = function (self, conn)
 			self.conns[conn] = nil;
 		end;
 	};
-	prosody.stats = stats;
-	
-	local network = {};
-	
-	function network.onconnect(conn)
-		stats:add_conn(conn);
-	end
-	
-	function network.onincoming(conn, data)
-	end
-	
-	function network.ondisconnect(conn, reason)
-		stats:remove_conn(conn);
-	end
-	
-	require "util.iterators";
-	require "util.timer".add_task(1, function ()
-		stats:set("s2s-in", count(keys(prosody.incoming_s2s)));
-		return math.random(10, 20);
-	end);
-	require "util.timer".add_task(3, function ()
-		local s2sout_count = 0;
-		for _, host in pairs(prosody.hosts) do
-			s2sout_count = s2sout_count + count(keys(host.s2sout));
-		end
-		stats:set("s2s-out", s2sout_count);
-		return math.random(10, 20);
-	end);
-	
-	require "net.connlisteners".register("stats", network);
-	require "net.connlisteners".start("stats", { port = module:get_option("stats_ports") or 5444, interface = "127.0.0.1" });
+});
+
+local network = {};
+
+function network.onconnect(conn)
+	stats:add_conn(conn);
+end
+
+function network.onincoming(conn, data)
+end
+
+function network.ondisconnect(conn, reason)
+	stats:remove_conn(conn);
 end
 
-module:hook("resource-bind", function ()
-	stats:adjust("c2s", 1);
+module:add_timer(1, function ()
+	stats:set("s2s-in", count(keys(prosody.incoming_s2s)));
+	return math.random(10, 20);
 end);
-module:hook("resource-unbind", function ()
-	stats:adjust("c2s", -1);
+module:add_timer(3, function ()
+	local s2sout_count = 0;
+	for _, host in pairs(prosody.hosts) do
+		s2sout_count = s2sout_count + count(keys(host.s2sout));
+	end
+	stats:set("s2s-out", s2sout_count);
+	return math.random(10, 20);
 end);
 
-local c2s_count = 0;
-for username, user in pairs(hosts[module.host].sessions or {}) do
-	for resource, session in pairs(user.sessions or {}) do
-		c2s_count = c2s_count + 1;
+
+function module.add_host(module)
+	module:hook("resource-bind", function ()
+		stats:adjust("c2s", 1);
+	end);
+	module:hook("resource-unbind", function ()
+		stats:adjust("c2s", -1);
+	end);
+
+	local c2s_count = 0;
+	for username, user in pairs(hosts[module.host].sessions or {}) do
+		for resource, session in pairs(user.sessions or {}) do
+			c2s_count = c2s_count + 1;
+		end
 	end
-end
-stats:adjust("c2s", c2s_count);
+	stats:set("c2s", c2s_count);
 
-module:hook("s2sin-established", function (event)
-	stats:adjust("s2s-in", 1);
-end);
-module:hook("s2sin-destroyed", function (event)
-	stats:adjust("s2s-in", -1);
-end);
-module:hook("s2sout-established", function (event)
-	stats:adjust("s2s-out", 1);
-end);
-module:hook("s2sout-destroyed", function (event)
-	stats:adjust("s2s-out", -1);
-end);
+	module:hook("s2sin-established", function (event)
+		stats:adjust("s2s-in", 1);
+	end);
+	module:hook("s2sin-destroyed", function (event)
+		stats:adjust("s2s-in", -1);
+	end);
+	module:hook("s2sout-established", function (event)
+		stats:adjust("s2s-out", 1);
+	end);
+	module:hook("s2sout-destroyed", function (event)
+		stats:adjust("s2s-out", -1);
+	end);
+end
+
+module:provides("net", {
+	default_port = 5444;
+	listener = network;
+});