author | Matthew Wild <mwild1@gmail.com> |
Tue, 27 Sep 2022 18:23:42 +0100 | |
changeset 5064 | bc491065c221 |
parent 3412 | b2ce818ec19c |
permissions | -rw-r--r-- |
3071
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 |
|
3164
330e8c81f6af
mod_pubsub_stats: Include namespace on pubsub items (fixes use with trunk)
Kim Alvefur <zash@zash.se>
parents:
3161
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:
3161
diff
changeset
|
8 |
|
3072
380f92276e57
mod_pubsub_stats: Make the node used configurable
Kim Alvefur <zash@zash.se>
parents:
3071
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:
3071
diff
changeset
|
10 |
|
3071
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"; |
3164
330e8c81f6af
mod_pubsub_stats: Include namespace on pubsub items (fixes use with trunk)
Kim Alvefur <zash@zash.se>
parents:
3161
diff
changeset
|
13 |
local xitem = st.stanza("item", { xmlns = pubsub_xmlns, id = id }) |
3071
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 |
|
3072
380f92276e57
mod_pubsub_stats: Make the node used configurable
Kim Alvefur <zash@zash.se>
parents:
3071
diff
changeset
|
22 |
local ok, err = pubsub.service:publish(node, actor, id, xitem); |
3071
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() |
3179
44c5d7310c33
mod_pubsub_stats: Pass configuration to disable persistence and limit number of items
Kim Alvefur <zash@zash.se>
parents:
3164
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:
3164
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:
3164
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:
3164
diff
changeset
|
32 |
}); |
3072
380f92276e57
mod_pubsub_stats: Make the node used configurable
Kim Alvefur <zash@zash.se>
parents:
3071
diff
changeset
|
33 |
pubsub.service:set_affiliation(node, true, actor, "publisher"); |
3071
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() |
3072
380f92276e57
mod_pubsub_stats: Make the node used configurable
Kim Alvefur <zash@zash.se>
parents:
3071
diff
changeset
|
41 |
pubsub.service:delete(node, true); |
3071
b01ef74c9fc0
mod_pubsub_stats: Simple module that publishes stats in XEP-0039 format
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 |
end |
3411
26ae3b6a8a57
mod_pubsub_stats: Generate a textual summary for notifications
Kim Alvefur <zash@zash.se>
parents:
3179
diff
changeset
|
43 |
|
26ae3b6a8a57
mod_pubsub_stats: Generate a textual summary for notifications
Kim Alvefur <zash@zash.se>
parents:
3179
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:
3179
diff
changeset
|
45 |
local payload = event.payload; |
26ae3b6a8a57
mod_pubsub_stats: Generate a textual summary for notifications
Kim Alvefur <zash@zash.se>
parents:
3179
diff
changeset
|
46 |
local summary = {}; |
26ae3b6a8a57
mod_pubsub_stats: Generate a textual summary for notifications
Kim Alvefur <zash@zash.se>
parents:
3179
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:
3179
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:
3179
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:
3179
diff
changeset
|
50 |
end |
26ae3b6a8a57
mod_pubsub_stats: Generate a textual summary for notifications
Kim Alvefur <zash@zash.se>
parents:
3179
diff
changeset
|
51 |
end |
3412 | 52 |
table.sort(summary); |
3411
26ae3b6a8a57
mod_pubsub_stats: Generate a textual summary for notifications
Kim Alvefur <zash@zash.se>
parents:
3179
diff
changeset
|
53 |
return table.concat(summary, "\n"); |
26ae3b6a8a57
mod_pubsub_stats: Generate a textual summary for notifications
Kim Alvefur <zash@zash.se>
parents:
3179
diff
changeset
|
54 |
end); |
26ae3b6a8a57
mod_pubsub_stats: Generate a textual summary for notifications
Kim Alvefur <zash@zash.se>
parents:
3179
diff
changeset
|
55 |