Mercurial > prosody-modules
annotate mod_streamstats/mod_streamstats.lua @ 4249:64aa1d9d70ac
mod_rest: Catch and log errors in callback promise chain
From the code it looks like it should be possible to reply to an error
stanza, but it did not. Turns out I was saved by my local developer mode
module which throws errors if an attempt is made to create an errror
reply to an error stanza. However nothing collects this error from the
promise, so all I got was confusion.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 15 Nov 2020 16:25:49 +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 }); |