annotate mod_statistics_statsman/mod_statistics_statsman.lua @ 5356:959dc350f2ad

mod_http_oauth2: Declare https as required of URIs in schema If util.jsonschema happens to gain support for 'pattern' (regular expression validation) then this would be picked up. Until then, declarative annotations are nice.
author Kim Alvefur <zash@zash.se>
date Sat, 22 Apr 2023 14:06:41 +0200
parents bac3dae031ee
children
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
4595
bac3dae031ee Add note of incompatibility with trunk since 5f15ab7c6ae5
Kim Alvefur <zash@zash.se>
parents: 3610
diff changeset
8 assert(statsman.get_stats, "not compatible with trunk based on openmetrics");
bac3dae031ee Add note of incompatibility with trunk since 5f15ab7c6ae5
Kim Alvefur <zash@zash.se>
parents: 3610
diff changeset
9
3158
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 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
11 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
12 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
13 return;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 end
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 sessions = {};
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 local name_map = {
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 ["start_time"] = "up_since";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 ["cpu.percent:amount"] = "cpu";
3610
78885053cd80 mod_statistics_statsman: Fix syntax error
Kim Alvefur <zash@zash.se>
parents: 3609
diff changeset
21 ["cpu.clock:amount"] = "cpu_total";
3607
3a06b0b6ba67 mod_statistics_statsman: Update for change stats type change in mod_measure_memory
Kim Alvefur <zash@zash.se>
parents: 3170
diff changeset
22 ["memory.allocated_mmap:amount"] = "memory_allocated_mmap";
3a06b0b6ba67 mod_statistics_statsman: Update for change stats type change in mod_measure_memory
Kim Alvefur <zash@zash.se>
parents: 3170
diff changeset
23 ["memory.allocated:amount"] = "memory_allocated";
3a06b0b6ba67 mod_statistics_statsman: Update for change stats type change in mod_measure_memory
Kim Alvefur <zash@zash.se>
parents: 3170
diff changeset
24 ["memory.lua:amount"] = "memory_lua";
3a06b0b6ba67 mod_statistics_statsman: Update for change stats type change in mod_measure_memory
Kim Alvefur <zash@zash.se>
parents: 3170
diff changeset
25 ["memory.returnable:amount"] = "memory_returnable";
3a06b0b6ba67 mod_statistics_statsman: Update for change stats type change in mod_measure_memory
Kim Alvefur <zash@zash.se>
parents: 3170
diff changeset
26 ["memory.rss:amount"] = "memory_rss";
3a06b0b6ba67 mod_statistics_statsman: Update for change stats type change in mod_measure_memory
Kim Alvefur <zash@zash.se>
parents: 3170
diff changeset
27 ["memory.total:amount"] = "memory_total";
3a06b0b6ba67 mod_statistics_statsman: Update for change stats type change in mod_measure_memory
Kim Alvefur <zash@zash.se>
parents: 3170
diff changeset
28 ["memory.unused:amount"] = "memory_unused";
3a06b0b6ba67 mod_statistics_statsman: Update for change stats type change in mod_measure_memory
Kim Alvefur <zash@zash.se>
parents: 3170
diff changeset
29 ["memory.used:amount"] = "memory_used";
3158
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 ["/*/mod_c2s/connections:amount"] = "total_c2s";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 ["/*/mod_s2s/connections:amount"] = "total_s2s";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 };
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 local function push_stat(conn, name, value)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 local value_str = serialize(value);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 name = name_map[name] or name;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 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
38 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40 local function push_stat_to_all(name, value)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 for conn in pairs(sessions) do
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 push_stat(conn, name, value);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46 local session_stats_tpl = ([[{
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47 message_in = %d, message_out = %d;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48 presence_in = %d, presence_out = %d;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49 iq_in = %d, iq_out = %d;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50 bytes_in = %d, bytes_out = %d;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
51 }]]):gsub("%s", "");
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
52
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54 local jid_fields = {
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
55 c2s = "full_jid";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
56 s2sin = "from_host";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
57 s2sout = "to_host";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
58 component = "host";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
59 };
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
60
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
61 local function push_session_to_all(session, stats)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
62 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
63 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
64 local s = (session_stats_tpl):format(
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
65 stanzas_in.message, stanzas_out.message,
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
66 stanzas_in.presence, stanzas_out.presence,
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
67 stanzas_in.iq, stanzas_out.iq,
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
68 stats.bytes_in, stats.bytes_out);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
69 local jid = session[jid_fields[session.type]] or "";
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
70 for conn in pairs(sessions) do
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
71 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
72 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
73 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
74
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
75 local active_sessions = {};
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 -- Network listener
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
78 local listener = {};
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
79
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
80 function listener.onconnect(conn)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
81 sessions[conn] = true;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
82 push_stat(conn, "version", prosody.version);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
83 push_stat(conn, "start_time", prosody.start_time);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
84 push_stat(conn, "statistics_interval", statistics_interval);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
85 push_stat(conn, "time", time_now());
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
86 local stats = statsman.get_stats();
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
87 for name, value in pairs(stats) do
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
88 push_stat(conn, name, value);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
89 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
90 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
91 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
92
3169
5d58bdbfe024 mod_statistics_statsman: Ignore that we discard incoming data [luacheck]
Kim Alvefur <zash@zash.se>
parents: 3158
diff changeset
93 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
94 -- Discarded
3158
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.ondisconnect(conn)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
98 sessions[conn] = nil;
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 function listener.onreadtimeout()
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
102 return true;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
103 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
104
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
105 local add_statistics_filter; -- forward decl
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
106 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
107 setmetatable(active_sessions, {
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
108 __index = function ( t, k )
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
109 local v = {
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
110 bytes_in = 0, bytes_out = 0;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
111 stanzas_in = {
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 stanzas_out = {
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
115 message = 0, presence = 0, iq = 0;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
116 };
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 rawset(t, k, v);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
119 return v;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
120 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
121 });
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
122 local function handle_stanza_in(stanza, session)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
123 local s = active_sessions[session].stanzas_in;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
124 local n = s[stanza.name];
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
125 if n then
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
126 s[stanza.name] = n + 1;
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 return stanza;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
129 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
130 local function handle_stanza_out(stanza, session)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
131 local s = active_sessions[session].stanzas_out;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
132 local n = s[stanza.name];
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
133 if n then
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
134 s[stanza.name] = n + 1;
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 return stanza;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
137 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
138 local function handle_bytes_in(bytes, session)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
139 local s = active_sessions[session];
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
140 s.bytes_in = s.bytes_in + #bytes;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
141 return bytes;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
142 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
143 local function handle_bytes_out(bytes, session)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
144 local s = active_sessions[session];
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
145 s.bytes_out = s.bytes_out + #bytes;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
146 return bytes;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
147 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
148 function add_statistics_filter(session)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
149 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
150 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
151 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
152 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
153 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
154 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
155
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
156
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
157 function module.load()
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
158 if not(prosody and prosody.arg) then
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
159 return;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
160 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
161 filters.add_filter_hook(add_statistics_filter);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
162
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
163 module:add_timer(1, function ()
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
164 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
165 active_sessions[session] = nil;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
166 push_session_to_all(session, session_stats);
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 return 1;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
169 end);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
170
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
171 module:hook("stats-updated", function (event)
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
172 local stats = event.changed_stats;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
173 push_stat_to_all("time", time_now());
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
174 for name, value in pairs(stats) do
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
175 push_stat_to_all(name, value);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
176 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
177 end);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
178
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
179 module:hook("server-stopping", function ()
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
180 push_stat_to_all("stop_time", time_now());
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
181 end);
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 function module.unload()
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
184 filters.remove_filter_hook(add_statistics_filter);
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
185 end
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
186
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
187 if prosody and prosody.arg then
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
188 module:provides("net", {
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
189 default_port = 5782;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
190 listener = listener;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
191 private = true;
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
192 });
2558ece20e58 mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff changeset
193 end