Software /
code /
prosody-modules
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; +});