annotate mod_pubsub_stats/mod_pubsub_stats.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 b2ce818ec19c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3067
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 local st = require "util.stanza";
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 local pubsub = module:depends"pubsub";
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 local actor = module.host .. "/modules/" .. module.name;
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6
3160
330e8c81f6af mod_pubsub_stats: Include namespace on pubsub items (fixes use with trunk)
Kim Alvefur <zash@zash.se>
parents: 3157
diff changeset
7 local pubsub_xmlns = "http://jabber.org/protocol/pubsub"
330e8c81f6af mod_pubsub_stats: Include namespace on pubsub items (fixes use with trunk)
Kim Alvefur <zash@zash.se>
parents: 3157
diff changeset
8
3068
380f92276e57 mod_pubsub_stats: Make the node used configurable
Kim Alvefur <zash@zash.se>
parents: 3067
diff changeset
9 local node = module:get_option_string(module.name .. "_node", "stats");
380f92276e57 mod_pubsub_stats: Make the node used configurable
Kim Alvefur <zash@zash.se>
parents: 3067
diff changeset
10
3067
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 local function publish_stats(stats, stats_extra)
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 local id = "current";
3160
330e8c81f6af mod_pubsub_stats: Include namespace on pubsub items (fixes use with trunk)
Kim Alvefur <zash@zash.se>
parents: 3157
diff changeset
13 local xitem = st.stanza("item", { xmlns = pubsub_xmlns, id = id })
3067
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 :tag("query", { xmlns = "http://jabber.org/protocol/stats" });
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 for name, value in pairs(stats) do
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 local stat_extra = stats_extra[name];
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 local unit = stat_extra and stat_extra.units;
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 xitem:tag("stat", { name = name, unit = unit, value = tostring(value) }):up();
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 end
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21
3068
380f92276e57 mod_pubsub_stats: Make the node used configurable
Kim Alvefur <zash@zash.se>
parents: 3067
diff changeset
22 local ok, err = pubsub.service:publish(node, actor, id, xitem);
3067
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 if not ok then
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 module:log("error", "Error publishing stats: %s", err);
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 end
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 end
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 function module.load()
3175
44c5d7310c33 mod_pubsub_stats: Pass configuration to disable persistence and limit number of items
Kim Alvefur <zash@zash.se>
parents: 3160
diff changeset
29 pubsub.service:create(node, true, {
44c5d7310c33 mod_pubsub_stats: Pass configuration to disable persistence and limit number of items
Kim Alvefur <zash@zash.se>
parents: 3160
diff changeset
30 persistent_items = false;
44c5d7310c33 mod_pubsub_stats: Pass configuration to disable persistence and limit number of items
Kim Alvefur <zash@zash.se>
parents: 3160
diff changeset
31 max_items = 1;
44c5d7310c33 mod_pubsub_stats: Pass configuration to disable persistence and limit number of items
Kim Alvefur <zash@zash.se>
parents: 3160
diff changeset
32 });
3068
380f92276e57 mod_pubsub_stats: Make the node used configurable
Kim Alvefur <zash@zash.se>
parents: 3067
diff changeset
33 pubsub.service:set_affiliation(node, true, actor, "publisher");
3067
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 end
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 module:hook_global("stats-updated", function (event)
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 publish_stats(event.stats, event.stats_extra);
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 end);
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40 function module.unload()
3068
380f92276e57 mod_pubsub_stats: Make the node used configurable
Kim Alvefur <zash@zash.se>
parents: 3067
diff changeset
41 pubsub.service:delete(node, true);
3067
b01ef74c9fc0 mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 end
3407
26ae3b6a8a57 mod_pubsub_stats: Generate a textual summary for notifications
Kim Alvefur <zash@zash.se>
parents: 3175
diff changeset
43
26ae3b6a8a57 mod_pubsub_stats: Generate a textual summary for notifications
Kim Alvefur <zash@zash.se>
parents: 3175
diff changeset
44 module:hook("pubsub-summary/http://jabber.org/protocol/stats", function (event)
26ae3b6a8a57 mod_pubsub_stats: Generate a textual summary for notifications
Kim Alvefur <zash@zash.se>
parents: 3175
diff changeset
45 local payload = event.payload;
26ae3b6a8a57 mod_pubsub_stats: Generate a textual summary for notifications
Kim Alvefur <zash@zash.se>
parents: 3175
diff changeset
46 local summary = {};
26ae3b6a8a57 mod_pubsub_stats: Generate a textual summary for notifications
Kim Alvefur <zash@zash.se>
parents: 3175
diff changeset
47 for stat in payload:childtags("stat") do
26ae3b6a8a57 mod_pubsub_stats: Generate a textual summary for notifications
Kim Alvefur <zash@zash.se>
parents: 3175
diff changeset
48 if stat.attr.name and stat.attr.value then
26ae3b6a8a57 mod_pubsub_stats: Generate a textual summary for notifications
Kim Alvefur <zash@zash.se>
parents: 3175
diff changeset
49 table.insert(summary, string.format("%s: %g %s", stat.attr.name, tonumber(stat.attr.value), stat.attr.units or ""));
26ae3b6a8a57 mod_pubsub_stats: Generate a textual summary for notifications
Kim Alvefur <zash@zash.se>
parents: 3175
diff changeset
50 end
26ae3b6a8a57 mod_pubsub_stats: Generate a textual summary for notifications
Kim Alvefur <zash@zash.se>
parents: 3175
diff changeset
51 end
3408
b2ce818ec19c mod_pubsub_stats: Sort summary
Kim Alvefur <zash@zash.se>
parents: 3407
diff changeset
52 table.sort(summary);
3407
26ae3b6a8a57 mod_pubsub_stats: Generate a textual summary for notifications
Kim Alvefur <zash@zash.se>
parents: 3175
diff changeset
53 return table.concat(summary, "\n");
26ae3b6a8a57 mod_pubsub_stats: Generate a textual summary for notifications
Kim Alvefur <zash@zash.se>
parents: 3175
diff changeset
54 end);
26ae3b6a8a57 mod_pubsub_stats: Generate a textual summary for notifications
Kim Alvefur <zash@zash.se>
parents: 3175
diff changeset
55