Software /
code /
prosody-modules
Annotate
mod_pubsub_stats/mod_pubsub_stats.lua @ 4698:4157773ed4d3
mod_cloud_notify: notify on groupchat messages sent to bare JID
author | arcseconds <arcseconds@zoho.com> |
---|---|
date | Sat, 25 Sep 2021 11:43:31 +0000 |
parent | 3408:b2ce818ec19c |
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 | 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 |