annotate mod_statistics/stats.lib.lua @ 1268:854a3933cfcd

mod_muc_log_http: URL-encode room names. This allows special characters in room names to work. Ideally this escaping shouldn’t be done in the user visible content, but the module’s template system doesn’t currently allow that.
author Waqas Hussain <waqas20@gmail.com>
date Sat, 04 Jan 2014 16:50:57 -0500
parents 3e2c4f424797
children 2733cb8c82a9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1072
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 local it = require "util.iterators";
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 local log = require "util.logger".init("stats");
1077
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
3 local has_pposix, pposix = pcall(require, "util.pposix");
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
4 local human;
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
5 do
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
6 local tostring = tostring;
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
7 local s_format = string.format;
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
8 local m_floor = math.floor;
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
9 local m_max = math.max;
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
10 local prefixes = "kMGTPEZY";
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
11 local multiplier = 1024;
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
12
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
13 function human(num)
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
14 num = tonumber(num) or 0;
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
15 local m = 0;
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
16 while num >= multiplier and m < #prefixes do
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
17 num = num / multiplier;
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
18 m = m + 1;
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
19 end
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
20
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
21 return s_format("%0."..m_max(0,3-#tostring(m_floor(num))).."f%sB",
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
22 num, m > 0 and (prefixes:sub(m,m) .. "i") or "");
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
23 end
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
24 end
1072
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 local last_cpu_wall, last_cpu_clock;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 local get_time = require "socket".gettime;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 local active_sessions, active_jids = {}, {};
1080
3af947e2e6d4 mod_statistics/stats.lib.lua: Only fetch shared tables if running under Prosody
Matthew Wild <mwild1@gmail.com>
parents: 1077
diff changeset
30 local c2s_sessions, s2s_sessions;
3af947e2e6d4 mod_statistics/stats.lib.lua: Only fetch shared tables if running under Prosody
Matthew Wild <mwild1@gmail.com>
parents: 1077
diff changeset
31 if prosody and prosody.arg then
3af947e2e6d4 mod_statistics/stats.lib.lua: Only fetch shared tables if running under Prosody
Matthew Wild <mwild1@gmail.com>
parents: 1077
diff changeset
32 c2s_sessions, s2s_sessions = module:shared("/*/c2s/sessions", "/*/s2s/sessions");
3af947e2e6d4 mod_statistics/stats.lib.lua: Only fetch shared tables if running under Prosody
Matthew Wild <mwild1@gmail.com>
parents: 1077
diff changeset
33 end
1072
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35 local stats = {
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36 total_users = {
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37 get = function () return it.count(it.keys(bare_sessions)); end
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38 };
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39 total_c2s = {
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 get = function () return it.count(it.keys(full_sessions)); end
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41 };
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
42 total_s2sin = {
1076
5616cab8b6d6 mod_statistics/stats.lib.lua: Better s2s session counting
Kim Alvefur <zash@zash.se>
parents: 1075
diff changeset
43 get = function () local i = 0; for conn,sess in next,s2s_sessions do if sess.direction == "incoming" then i = i + 1 end end return i end
1072
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44 };
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45 total_s2sout = {
1076
5616cab8b6d6 mod_statistics/stats.lib.lua: Better s2s session counting
Kim Alvefur <zash@zash.se>
parents: 1075
diff changeset
46 get = function () local i = 0; for conn,sess in next,s2s_sessions do if sess.direction == "outgoing" then i = i + 1 end end return i end
5616cab8b6d6 mod_statistics/stats.lib.lua: Better s2s session counting
Kim Alvefur <zash@zash.se>
parents: 1075
diff changeset
47 };
5616cab8b6d6 mod_statistics/stats.lib.lua: Better s2s session counting
Kim Alvefur <zash@zash.se>
parents: 1075
diff changeset
48 total_s2s = {
5616cab8b6d6 mod_statistics/stats.lib.lua: Better s2s session counting
Kim Alvefur <zash@zash.se>
parents: 1075
diff changeset
49 get = function () return it.count(it.keys(s2s_sessions)); end
1072
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
50 };
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
51 total_component = {
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
52 get = function ()
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
53 local count = 0;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
54 for host, host_session in pairs(hosts) do
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
55 if host_session.type == "component" then
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
56 local c = host_session.modules.component;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
57 if c and c.connected then -- 0.9 only
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
58 count = count + 1;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
59 end
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
60 end
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
61 end
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
62 return count;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
63 end
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
64 };
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
65 up_since = {
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
66 get = function () return prosody.start_time; end;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
67 tostring = function (up_since)
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
68 return tostring(os.time()-up_since).."s";
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
69 end;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
70 };
1077
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
71 memory_lua = {
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
72 get = function () return math.ceil(collectgarbage("count")*1024); end;
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
73 tostring = human;
1072
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
74 };
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
75 time = {
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
76 tostring = function () return os.date("%T"); end;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
77 };
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
78 cpu = {
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
79 get = function ()
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
80 local new_wall, new_clock = get_time(), os.clock();
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
81 local pc = 0;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
82 if last_cpu_wall then
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
83 pc = 100/((new_wall-last_cpu_wall)/(new_clock-last_cpu_clock));
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
84 end
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
85 last_cpu_wall, last_cpu_clock = new_wall, new_clock;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
86 return math.ceil(pc);
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
87 end;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
88 tostring = "%s%%";
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
89 };
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
90 };
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
91
1077
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
92 if has_pposix and pposix.meminfo then
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
93 stats.memory_allocated = {
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
94 get = function () return math.ceil(pposix.meminfo().allocated); end;
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
95 tostring = human;
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
96 }
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
97 stats.memory_used = {
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
98 get = function () return math.ceil(pposix.meminfo().used); end;
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
99 tostring = human;
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
100 }
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
101 stats.memory_unused = {
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
102 get = function () return math.ceil(pposix.meminfo().unused); end;
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
103 tostring = human;
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
104 }
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
105 stats.memory_returnable = {
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
106 get = function () return math.ceil(pposix.meminfo().returnable); end;
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
107 tostring = human;
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
108 }
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
109 end
b73d44afdafa mod_statistics/stats.lib.lua: Improve memory stats (use pposix.meminfo() if available)
Kim Alvefur <zash@zash.se>
parents: 1076
diff changeset
110
1072
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
111 local add_statistics_filter; -- forward decl
1075
164ed759b1d2 mod_statistics/stats.lib.lua: Better check for prosody vs prosodyctl
Kim Alvefur <zash@zash.se>
parents: 1072
diff changeset
112 if prosody and prosody.arg then -- ensures we aren't in prosodyctl
1072
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
113 setmetatable(active_sessions, {
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
114 __index = function ( t, k )
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
115 local v = {
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
116 bytes_in = 0, bytes_out = 0;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
117 stanzas_in = {
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
118 message = 0, presence = 0, iq = 0;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
119 };
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
120 stanzas_out = {
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
121 message = 0, presence = 0, iq = 0;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
122 };
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
123 }
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
124 rawset(t, k, v);
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
125 return v;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
126 end
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
127 });
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
128 local filters = require "util.filters";
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
129 local function handle_stanza_in(stanza, session)
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
130 local s = active_sessions[session].stanzas_in;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
131 local n = s[stanza.name];
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
132 if n then
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
133 s[stanza.name] = n + 1;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
134 end
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
135 return stanza;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
136 end
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
137 local function handle_stanza_out(stanza, session)
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
138 local s = active_sessions[session].stanzas_out;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
139 local n = s[stanza.name];
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
140 if n then
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
141 s[stanza.name] = n + 1;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
142 end
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
143 return stanza;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
144 end
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
145 local function handle_bytes_in(bytes, session)
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
146 local s = active_sessions[session];
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
147 s.bytes_in = s.bytes_in + #bytes;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
148 return bytes;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
149 end
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
150 local function handle_bytes_out(bytes, session)
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
151 local s = active_sessions[session];
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
152 s.bytes_out = s.bytes_out + #bytes;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
153 return bytes;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
154 end
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
155 function add_statistics_filter(session)
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
156 filters.add_filter(session, "stanzas/in", handle_stanza_in);
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
157 filters.add_filter(session, "stanzas/out", handle_stanza_out);
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
158 filters.add_filter(session, "bytes/in", handle_bytes_in);
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
159 filters.add_filter(session, "bytes/out", handle_bytes_out);
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
160 end
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
161 end
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
162
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
163 return {
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
164 stats = stats;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
165 active_sessions = active_sessions;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
166 filter_hook = add_statistics_filter;
4dbdb1b465e8 mod_statistics: Initial version, and a rough 'prosodyctl mod_statistics top'
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
167 };