Annotate

mod_statistics_statsman/mod_statistics_statsman.lua @ 3532:85c357b69eec

mod_csi_muc_priorities: Reduce importance of group chat messages This helps if you are in more noisy public channels than small private group chats. The short term plan is to give users the ability to set MUC JIDs as either high or low priority and use that. Long term it would be great to be able to automatically classify MUCs as public channels vs private group chats.
author Kim Alvefur <zash@zash.se>
date Mon, 01 Apr 2019 00:15:13 +0200
parent 3170:c7773ea263d0
child 3607:3a06b0b6ba67
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3158
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
3169
5d58bdbfe024 mod_statistics_statsman: Ignore that we discard incoming data [luacheck]
Kim Alvefur <zash@zash.se>
parents: 3158
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: 3158
diff changeset
91 -- Discarded
3158
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 function handle_stanza_in(stanza, session)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
120 local s = active_sessions[session].stanzas_in;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
121 local n = s[stanza.name];
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
122 if n then
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
123 s[stanza.name] = n + 1;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
124 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
125 return stanza;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
126 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
127 local function handle_stanza_out(stanza, session)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
128 local s = active_sessions[session].stanzas_out;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
129 local n = s[stanza.name];
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
130 if n then
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
131 s[stanza.name] = n + 1;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
132 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
133 return stanza;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
134 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
135 local function handle_bytes_in(bytes, session)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
136 local s = active_sessions[session];
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
137 s.bytes_in = s.bytes_in + #bytes;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
138 return bytes;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
139 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
140 local function handle_bytes_out(bytes, session)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
141 local s = active_sessions[session];
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
142 s.bytes_out = s.bytes_out + #bytes;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
143 return bytes;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
144 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
145 function add_statistics_filter(session)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
146 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
147 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
148 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
149 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
150 end
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
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 function module.load()
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
155 if not(prosody and prosody.arg) then
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
156 return;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
157 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
158 filters.add_filter_hook(add_statistics_filter);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
159
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
160 module:add_timer(1, function ()
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
161 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
162 active_sessions[session] = nil;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
163 push_session_to_all(session, session_stats);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
164 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
165 return 1;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
166 end);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
167
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
168 module:hook("stats-updated", function (event)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
169 local stats = event.changed_stats;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
170 push_stat_to_all("time", time_now());
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
171 for name, value in pairs(stats) do
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
172 push_stat_to_all(name, value);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
173 end
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
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
176 module:hook("server-stopping", function ()
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
177 push_stat_to_all("stop_time", time_now());
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
178 end);
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 function module.unload()
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
181 filters.remove_filter_hook(add_statistics_filter);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
182 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
183
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
184 if prosody and prosody.arg then
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
185 module:provides("net", {
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
186 default_port = 5782;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
187 listener = listener;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
188 private = true;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
189 });
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
190 end