mod_statistics_statsman/mod_statistics_statsman.lua
author Kim Alvefur <zash@zash.se>
Mon, 02 Jul 2018 22:45:11 +0200
changeset 3173 5d58bdbfe024
parent 3162 2558ece20e58
child 3174 c7773ea263d0
permissions -rw-r--r--
mod_statistics_statsman: Ignore that we discard incoming data [luacheck]
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3162
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     1
module:set_global();
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     2
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     3
local statsman = require "core.statsmanager";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
local time_now = require "util.time".now;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
local filters = require "util.filters";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     6
local serialize = require "util.serialization".serialize;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     7
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     8
local statistics_interval = module:context("*"):get_option_number("statistics_interval", 60);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     9
if module:context("*"):get_option("statistics", "internal") ~= "internal" then
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
	module:log("error", "Not using internal statistics, can't do anyting");
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    11
	return;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    13
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    14
local sessions = {};
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    15
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    16
local name_map = {
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
	["start_time"] = "up_since";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    18
	["cpu.percent:amount"] = "cpu";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    19
	["memory.allocated_mmap:size"] = "memory_allocated_mmap";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    20
	["memory.allocated:size"] = "memory_allocated";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    21
	["memory.lua:size"] = "memory_lua";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    22
	["memory.returnable:size"] = "memory_returnable";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    23
	["memory.rss:size"] = "memory_rss";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    24
	["memory.total:size"] = "memory_total";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    25
	["memory.unused:size"] = "memory_unused";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
	["memory.used:size"] = "memory_used";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
	["/*/mod_c2s/connections:amount"] = "total_c2s";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    28
	["/*/mod_s2s/connections:amount"] = "total_s2s";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    29
};
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    30
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    31
local function push_stat(conn, name, value)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
	local value_str = serialize(value);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33
	name = name_map[name] or name;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    34
	return conn:write((("STAT %q (%s)\n"):format(name, value_str):gsub("\\\n", "\\n")));
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    35
end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    36
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    37
local function push_stat_to_all(name, value)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    38
	for conn in pairs(sessions) do
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    39
		push_stat(conn, name, value);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    40
	end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    41
end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    42
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    43
local session_stats_tpl = ([[{
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    44
	message_in = %d, message_out = %d;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    45
	presence_in = %d, presence_out = %d;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    46
	iq_in = %d, iq_out = %d;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    47
	bytes_in = %d, bytes_out = %d;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    48
}]]):gsub("%s", "");
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    49
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    50
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    51
local jid_fields = {
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    52
	c2s = "full_jid";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    53
	s2sin = "from_host";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    54
	s2sout = "to_host";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    55
	component = "host";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    56
};
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    57
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    58
local function push_session_to_all(session, stats)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    59
	local id = tostring(session):match("[a-f0-9]+$"); -- FIXME: Better id? :/
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    60
	local stanzas_in, stanzas_out = stats.stanzas_in, stats.stanzas_out;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    61
	local s = (session_stats_tpl):format(
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    62
		stanzas_in.message, stanzas_out.message,
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    63
		stanzas_in.presence, stanzas_out.presence,
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    64
		stanzas_in.iq, stanzas_out.iq,
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    65
		stats.bytes_in, stats.bytes_out);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    66
	local jid = session[jid_fields[session.type]] or "";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    67
	for conn in pairs(sessions) do
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    68
		conn:write(("SESS %q %q %s\n"):format(id, jid, s));
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    69
	end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    70
end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    71
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    72
local active_sessions = {};
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    73
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    74
-- Network listener
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    75
local listener = {};
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    76
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    77
function listener.onconnect(conn)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    78
	sessions[conn] = true;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    79
	push_stat(conn, "version", prosody.version);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    80
	push_stat(conn, "start_time", prosody.start_time);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    81
	push_stat(conn, "statistics_interval", statistics_interval);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    82
	push_stat(conn, "time", time_now());
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    83
	local stats = statsman.get_stats();
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    84
	for name, value in pairs(stats) do
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    85
		push_stat(conn, name, value);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    86
	end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    87
	conn:write("\n"); -- Signal end of first batch (for non-streaming clients)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    88
end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    89
3173
5d58bdbfe024 mod_statistics_statsman: Ignore that we discard incoming data [luacheck]
Kim Alvefur <zash@zash.se>
parents: 3162
diff changeset
    90
function listener.onincoming(conn, data) -- luacheck: ignore 212
5d58bdbfe024 mod_statistics_statsman: Ignore that we discard incoming data [luacheck]
Kim Alvefur <zash@zash.se>
parents: 3162
diff changeset
    91
	-- Discarded
3162
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    92
end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    93
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    94
function listener.ondisconnect(conn)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    95
	sessions[conn] = nil;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    96
end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    97
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    98
function listener.onreadtimeout()
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    99
	return true;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   100
end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   101
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   102
local add_statistics_filter; -- forward decl
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   103
if prosody and prosody.arg then -- ensures we aren't in prosodyctl
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   104
	setmetatable(active_sessions, {
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   105
		__index = function ( t, k )
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   106
			local v = {
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   107
				bytes_in = 0, bytes_out = 0;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   108
				stanzas_in = {
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   109
					message = 0, presence = 0, iq = 0;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   110
				};
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   111
				stanzas_out = {
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   112
					message = 0, presence = 0, iq = 0;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   113
				};
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   114
			}
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   115
			rawset(t, k, v);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   116
			return v;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   117
		end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   118
	});
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   119
	local filters = require "util.filters";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   120
	local function handle_stanza_in(stanza, session)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   121
		local s = active_sessions[session].stanzas_in;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   122
		local n = s[stanza.name];
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   123
		if n then
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   124
			s[stanza.name] = n + 1;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   125
		end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   126
		return stanza;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   127
	end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   128
	local function handle_stanza_out(stanza, session)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   129
		local s = active_sessions[session].stanzas_out;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   130
		local n = s[stanza.name];
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   131
		if n then
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   132
			s[stanza.name] = n + 1;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   133
		end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   134
		return stanza;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   135
	end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   136
	local function handle_bytes_in(bytes, session)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   137
		local s = active_sessions[session];
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   138
		s.bytes_in = s.bytes_in + #bytes;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   139
		return bytes;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   140
	end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   141
	local function handle_bytes_out(bytes, session)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   142
		local s = active_sessions[session];
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   143
		s.bytes_out = s.bytes_out + #bytes;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   144
		return bytes;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   145
	end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   146
	function add_statistics_filter(session)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   147
		filters.add_filter(session, "stanzas/in", handle_stanza_in);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   148
		filters.add_filter(session, "stanzas/out", handle_stanza_out);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   149
		filters.add_filter(session, "bytes/in", handle_bytes_in);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   150
		filters.add_filter(session, "bytes/out", handle_bytes_out);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   151
	end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   152
end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   153
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   154
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   155
function module.load()
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   156
	if not(prosody and prosody.arg) then
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   157
		return;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   158
	end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   159
	filters.add_filter_hook(add_statistics_filter);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   160
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   161
	module:add_timer(1, function ()
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   162
		for session, session_stats in pairs(active_sessions) do
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   163
			active_sessions[session] = nil;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   164
			push_session_to_all(session, session_stats);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   165
		end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   166
		return 1;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   167
	end);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   168
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   169
	module:hook("stats-updated", function (event)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   170
		local stats = event.changed_stats;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   171
		push_stat_to_all("time", time_now());
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   172
		for name, value in pairs(stats) do
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   173
			push_stat_to_all(name, value);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   174
		end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   175
	end);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   176
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   177
	module:hook("server-stopping", function ()
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   178
		push_stat_to_all("stop_time", time_now());
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   179
	end);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   180
end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   181
function module.unload()
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   182
	filters.remove_filter_hook(add_statistics_filter);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   183
end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   184
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   185
if prosody and prosody.arg then
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   186
	module:provides("net", {
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   187
		default_port = 5782;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   188
		listener = listener;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   189
		private = true;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   190
	});
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   191
end