Mercurial > prosody-modules
annotate mod_streamstats/mod_streamstats.lua @ 5243:d5dc8edb2695
mod_http_oauth2: Use more compact IDs
UUIDs are nice but so verbose!
The reduction in entropy for the nonce should be fine since the
timestamp is also counts towards this, and it changes every second
(modulo clock shenanigans), so the chances of someone managing to get
the same client_secret by registering with the same information at the
same time as another entity should be negligible.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 11 Mar 2023 22:46:27 +0100 |
parents | a7f7a7e75737 |
children |
rev | line source |
---|---|
741
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
1 module:set_global(); |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
2 local stats = module:shared"stats"; |
639
d4f3754c4286
mod_streamstats: Import count and keys from util.iterators
Matthew Wild <mwild1@gmail.com>
parents:
259
diff
changeset
|
3 local iter = require "util.iterators"; |
d4f3754c4286
mod_streamstats: Import count and keys from util.iterators
Matthew Wild <mwild1@gmail.com>
parents:
259
diff
changeset
|
4 local count, keys = iter.count, iter.keys; |
259
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 |
741
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
6 stats.stats = stats.stats or {}; |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
7 stats.conns = stats.conns or {}; |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
8 |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
9 setmetatable(stats, { |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
10 __index = { |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
11 |
259
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 broadcast = function (self, stat) |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 local value = self.stats[stat]; |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 for conn in pairs(self.conns) do |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 conn:write(stat..":"..value.."\n"); |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 end |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 end; |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 adjust = function (self, stat, delta) |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 if delta == 0 then return; end |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 self.stats[stat] = (self.stats[stat] or 0) + delta; |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 self:broadcast(stat); |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 end; |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 set = function (self, stat, value) |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 if value == self.stats[stat] then return; end |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 self.stats[stat] = value; |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 self:broadcast(stat); |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 end; |
741
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
30 |
259
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 add_conn = function (self, conn) |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 self.conns[conn] = true; |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 for stat, value in pairs(self.stats) do |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 conn:write(stat..":"..value.."\n"); |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 end |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 end; |
741
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
37 |
259
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 remove_conn = function (self, conn) |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 self.conns[conn] = nil; |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 end; |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 }; |
741
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
42 }); |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
43 |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
44 local network = {}; |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
45 |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
46 function network.onconnect(conn) |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
47 stats:add_conn(conn); |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
48 end |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
49 |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
50 function network.onincoming(conn, data) |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
51 end |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
52 |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
53 function network.ondisconnect(conn, reason) |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
54 stats:remove_conn(conn); |
259
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 end |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 |
741
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
57 module:add_timer(1, function () |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
58 stats:set("s2s-in", count(keys(prosody.incoming_s2s))); |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
59 return math.random(10, 20); |
259
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 end); |
741
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
61 module:add_timer(3, function () |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
62 local s2sout_count = 0; |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
63 for _, host in pairs(prosody.hosts) do |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
64 s2sout_count = s2sout_count + count(keys(host.s2sout)); |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
65 end |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
66 stats:set("s2s-out", s2sout_count); |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
67 return math.random(10, 20); |
259
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 end); |
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 |
741
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
70 |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
71 function module.add_host(module) |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
72 module:hook("resource-bind", function () |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
73 stats:adjust("c2s", 1); |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
74 end); |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
75 module:hook("resource-unbind", function () |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
76 stats:adjust("c2s", -1); |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
77 end); |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
78 |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
79 local c2s_count = 0; |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
80 for username, user in pairs(hosts[module.host].sessions or {}) do |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
81 for resource, session in pairs(user.sessions or {}) do |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
82 c2s_count = c2s_count + 1; |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
83 end |
259
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 end |
741
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
85 stats:set("c2s", c2s_count); |
259
d137515e0701
mod_streamstats: New module that streams live stats from Prosody over a TCP stream
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 |
741
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
87 module:hook("s2sin-established", function (event) |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
88 stats:adjust("s2s-in", 1); |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
89 end); |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
90 module:hook("s2sin-destroyed", function (event) |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
91 stats:adjust("s2s-in", -1); |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
92 end); |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
93 module:hook("s2sout-established", function (event) |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
94 stats:adjust("s2s-out", 1); |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
95 end); |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
96 module:hook("s2sout-destroyed", function (event) |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
97 stats:adjust("s2s-out", -1); |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
98 end); |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
99 end |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
100 |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
101 module:provides("net", { |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
102 default_port = 5444; |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
103 listener = network; |
a7f7a7e75737
mod_streamstats: Switch to portmanager and other 0.9 goodness
Kim Alvefur <zash@zash.se>
parents:
639
diff
changeset
|
104 }); |