Software /
code /
prosody-modules
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 |
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 |