Mercurial > prosody-modules
annotate mod_statistics_statsman/mod_statistics_statsman.lua @ 4537:53ee391ca689
mod_smacks: Fix traceback due to session being destroyed in send()
Sending something can cause the OS to notice that the connection is dead
and then the connection can be dead at this point. More likely if
opportunistic_writes is enabled.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 01 Apr 2021 11:35:26 +0200 |
parents | 78885053cd80 |
children | bac3dae031ee |
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"; |
3610
78885053cd80
mod_statistics_statsman: Fix syntax error
Kim Alvefur <zash@zash.se>
parents:
3609
diff
changeset
|
19 ["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
|
20 ["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
|
21 ["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
|
22 ["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
|
23 ["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
|
24 ["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
|
25 ["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
|
26 ["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
|
27 ["memory.used:amount"] = "memory_used"; |
3158
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 ["/*/mod_c2s/connections:amount"] = "total_c2s"; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 ["/*/mod_s2s/connections:amount"] = "total_s2s"; |
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 |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 local function push_stat(conn, name, value) |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 local value_str = serialize(value); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 name = name_map[name] or name; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 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
|
36 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 local function push_stat_to_all(name, value) |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 for conn in pairs(sessions) do |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 push_stat(conn, name, value); |
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 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 local session_stats_tpl = ([[{ |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 message_in = %d, message_out = %d; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 presence_in = %d, presence_out = %d; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
47 iq_in = %d, iq_out = %d; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
48 bytes_in = %d, bytes_out = %d; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
49 }]]):gsub("%s", ""); |
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 |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 local jid_fields = { |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
53 c2s = "full_jid"; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
54 s2sin = "from_host"; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
55 s2sout = "to_host"; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
56 component = "host"; |
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 |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
59 local function push_session_to_all(session, stats) |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
60 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
|
61 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
|
62 local s = (session_stats_tpl):format( |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
63 stanzas_in.message, stanzas_out.message, |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
64 stanzas_in.presence, stanzas_out.presence, |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
65 stanzas_in.iq, stanzas_out.iq, |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
66 stats.bytes_in, stats.bytes_out); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
67 local jid = session[jid_fields[session.type]] or ""; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
68 for conn in pairs(sessions) do |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
69 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
|
70 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
71 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
72 |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
73 local active_sessions = {}; |
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 -- Network listener |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 local listener = {}; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 function listener.onconnect(conn) |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
79 sessions[conn] = true; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
80 push_stat(conn, "version", prosody.version); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
81 push_stat(conn, "start_time", prosody.start_time); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
82 push_stat(conn, "statistics_interval", statistics_interval); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
83 push_stat(conn, "time", time_now()); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
84 local stats = statsman.get_stats(); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
85 for name, value in pairs(stats) do |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
86 push_stat(conn, name, value); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
87 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
88 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
|
89 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
90 |
3169
5d58bdbfe024
mod_statistics_statsman: Ignore that we discard incoming data [luacheck]
Kim Alvefur <zash@zash.se>
parents:
3158
diff
changeset
|
91 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
|
92 -- Discarded |
3158
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
93 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
94 |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
95 function listener.ondisconnect(conn) |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
96 sessions[conn] = nil; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
97 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
98 |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
99 function listener.onreadtimeout() |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
100 return true; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
101 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
102 |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
103 local add_statistics_filter; -- forward decl |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
104 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
|
105 setmetatable(active_sessions, { |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
106 __index = function ( t, k ) |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
107 local v = { |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
108 bytes_in = 0, bytes_out = 0; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
109 stanzas_in = { |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
110 message = 0, presence = 0, iq = 0; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
111 }; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
112 stanzas_out = { |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
113 message = 0, presence = 0, iq = 0; |
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 } |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
116 rawset(t, k, v); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
117 return v; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
118 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
119 }); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
120 local function handle_stanza_in(stanza, session) |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
121 local s = active_sessions[session].stanzas_in; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
122 local n = s[stanza.name]; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
123 if n then |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
124 s[stanza.name] = n + 1; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
125 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
126 return stanza; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
127 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
128 local function handle_stanza_out(stanza, session) |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
129 local s = active_sessions[session].stanzas_out; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
130 local n = s[stanza.name]; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
131 if n then |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
132 s[stanza.name] = n + 1; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
133 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
134 return stanza; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
135 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
136 local function handle_bytes_in(bytes, session) |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
137 local s = active_sessions[session]; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
138 s.bytes_in = s.bytes_in + #bytes; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
139 return bytes; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
140 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
141 local function handle_bytes_out(bytes, session) |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
142 local s = active_sessions[session]; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
143 s.bytes_out = s.bytes_out + #bytes; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
144 return bytes; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
145 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
146 function add_statistics_filter(session) |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
147 filters.add_filter(session, "stanzas/in", handle_stanza_in); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
148 filters.add_filter(session, "stanzas/out", handle_stanza_out); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
149 filters.add_filter(session, "bytes/in", handle_bytes_in); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
150 filters.add_filter(session, "bytes/out", handle_bytes_out); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
151 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
152 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
153 |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
154 |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
155 function module.load() |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
156 if not(prosody and prosody.arg) then |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
157 return; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
158 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
159 filters.add_filter_hook(add_statistics_filter); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
160 |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
161 module:add_timer(1, function () |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
162 for session, session_stats in pairs(active_sessions) do |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
163 active_sessions[session] = nil; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
164 push_session_to_all(session, session_stats); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
165 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
166 return 1; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
167 end); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
168 |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
169 module:hook("stats-updated", function (event) |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
170 local stats = event.changed_stats; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
171 push_stat_to_all("time", time_now()); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
172 for name, value in pairs(stats) do |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
173 push_stat_to_all(name, value); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
174 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
175 end); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
176 |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
177 module:hook("server-stopping", function () |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
178 push_stat_to_all("stop_time", time_now()); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
179 end); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
180 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
181 function module.unload() |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
182 filters.remove_filter_hook(add_statistics_filter); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
183 end |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
184 |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
185 if prosody and prosody.arg then |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
186 module:provides("net", { |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
187 default_port = 5782; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
188 listener = listener; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
189 private = true; |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
190 }); |
2558ece20e58
mod_statistics_statsman: Streaming access to statsmanager
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
191 end |