Annotate

mod_statistics_statsman/mod_statistics_statsman.lua @ 3158:2558ece20e58

mod_statistics_statsman: Streaming access to statsmanager
author Kim Alvefur <zash@zash.se>
date Thu, 28 Jun 2018 21:42:48 +0200
child 3169:5d58bdbfe024
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
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
90 function listener.onincoming(conn, data)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
91 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
92
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
93 function listener.ondisconnect(conn)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
94 sessions[conn] = nil;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
95 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
96
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
97 function listener.onreadtimeout()
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
98 return true;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
99 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
100
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
101 local add_statistics_filter; -- forward decl
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
102 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
103 setmetatable(active_sessions, {
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
104 __index = function ( t, k )
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
105 local v = {
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
106 bytes_in = 0, bytes_out = 0;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
107 stanzas_in = {
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
108 message = 0, presence = 0, iq = 0;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
109 };
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
110 stanzas_out = {
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
111 message = 0, presence = 0, iq = 0;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
112 };
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 rawset(t, k, v);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
115 return v;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
116 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
117 });
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
118 local filters = require "util.filters";
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