Mercurial > prosody-modules
annotate mod_pubsub_serverinfo/mod_pubsub_serverinfo.lua @ 6403:13c61a068c71
mod_pubsub_serverinfo: Include hostname in default pubsub node name
This change ensures that every host publishes to a unique node by default,
which is important when publishing info about multiple hosts.
The old default node name was "serverinfo"
The new default node name is in the format "serverinfo/example.com" where
example.com is automatically replaced by the publishing host's name.
This affects existing deployments in the following ways:
- If you already configured pubsub_serverinfo_node explicitly in your config,
then nothing will change, your current configuration will still be used.
- If you did not specify it in your config (i.e. used the default) then the
module will switch to publishing to the new node. If your configuration is
correct this shouldn't be noticed, because the new node will automatically
be created and configured by the module. If you want, you can clean up the
old 'serverinfo' node using:
prosodyctl shell pubsub delete_node pubsub.example.com serverinfo
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Wed, 11 Feb 2026 09:40:30 +0000 |
| parents | 2b272065439c |
| children | 01d8bfbfc435 |
| rev | line source |
|---|---|
|
5817
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
1 local http = require "net.http"; |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
2 local json = require "util.json"; |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
3 local st = require "util.stanza"; |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
4 local new_id = require"util.id".medium; |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
5 |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
6 local local_domain = module:get_host(); |
|
5884
49b0873932ca
mod_pubsub_serverinfo: Don't default to non-local pubsub servers (thanks roughnecks)
Matthew Wild <mwild1@gmail.com>
parents:
5843
diff
changeset
|
7 local service = module:get_option_string(module.name .. "_service"); |
|
6403
13c61a068c71
mod_pubsub_serverinfo: Include hostname in default pubsub node name
Matthew Wild <mwild1@gmail.com>
parents:
6369
diff
changeset
|
8 local node = module:get_option_string(module.name .. "_node", "serverinfo/"..module.host); |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
9 local actor = module.host .. "/modules/" .. module.name; |
|
5885
54b451c3790c
mod_pubsub_serverinfo: Fix for compatibility with 0.12 option getters
Matthew Wild <mwild1@gmail.com>
parents:
5884
diff
changeset
|
10 local publication_interval = module:get_option_number(module.name .. "_publication_interval", 300); |
|
54b451c3790c
mod_pubsub_serverinfo: Fix for compatibility with 0.12 option getters
Matthew Wild <mwild1@gmail.com>
parents:
5884
diff
changeset
|
11 local cache_ttl = module:get_option_number(module.name .. "_cache_ttl", 3600); |
|
5817
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
12 local public_providers_url = module:get_option_string(module.name.."_public_providers_url", "https://data.xmpp.net/providers/v2/providers-Ds.json"); |
|
5816
45d0802d0787
mod_pubsub_serverinfo: Allow configuration of node persistence/deletion
Matthew Wild <mwild1@gmail.com>
parents:
5815
diff
changeset
|
13 local delete_node_on_unload = module:get_option_boolean(module.name.."_delete_node_on_unload", false); |
|
45d0802d0787
mod_pubsub_serverinfo: Allow configuration of node persistence/deletion
Matthew Wild <mwild1@gmail.com>
parents:
5815
diff
changeset
|
14 local persist_items = module:get_option_boolean(module.name.."_persist_items", true); |
|
6031
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
15 local include_user_count = module:get_option_boolean(module.name.."_publish_user_count", false); |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
16 |
|
5884
49b0873932ca
mod_pubsub_serverinfo: Don't default to non-local pubsub servers (thanks roughnecks)
Matthew Wild <mwild1@gmail.com>
parents:
5843
diff
changeset
|
17 if not service and prosody.hosts["pubsub."..module.host] then |
|
49b0873932ca
mod_pubsub_serverinfo: Don't default to non-local pubsub servers (thanks roughnecks)
Matthew Wild <mwild1@gmail.com>
parents:
5843
diff
changeset
|
18 service = "pubsub."..module.host; |
|
5917
5c4e102e2563
mod_pubsub_serverinfo: fix bool logic when reading config
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5886
diff
changeset
|
19 end |
|
5918
d4a8644a1cc5
mod_pubsub_serverinfo: fix syntax error
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5917
diff
changeset
|
20 if not service then |
|
5884
49b0873932ca
mod_pubsub_serverinfo: Don't default to non-local pubsub servers (thanks roughnecks)
Matthew Wild <mwild1@gmail.com>
parents:
5843
diff
changeset
|
21 module:log_status("warn", "No pubsub service specified - module not activated"); |
|
49b0873932ca
mod_pubsub_serverinfo: Don't default to non-local pubsub servers (thanks roughnecks)
Matthew Wild <mwild1@gmail.com>
parents:
5843
diff
changeset
|
22 return; |
|
49b0873932ca
mod_pubsub_serverinfo: Don't default to non-local pubsub servers (thanks roughnecks)
Matthew Wild <mwild1@gmail.com>
parents:
5843
diff
changeset
|
23 end |
|
49b0873932ca
mod_pubsub_serverinfo: Don't default to non-local pubsub servers (thanks roughnecks)
Matthew Wild <mwild1@gmail.com>
parents:
5843
diff
changeset
|
24 |
|
6031
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
25 local metric_registry = require "core.statsmanager".get_metric_registry(); |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
26 if include_user_count then |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
27 module:depends("measure_active_users"); |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
28 end |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
29 |
|
5815
77c5709bd57a
mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents:
5814
diff
changeset
|
30 local xmlns_pubsub = "http://jabber.org/protocol/pubsub"; |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
31 |
|
5919
99ecfe44910b
mod_pubsub_serverinfo: Explicitly depend on mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
5918
diff
changeset
|
32 -- Needed to publish server-info-fields |
|
99ecfe44910b
mod_pubsub_serverinfo: Explicitly depend on mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
5918
diff
changeset
|
33 module:depends("server_info"); |
|
99ecfe44910b
mod_pubsub_serverinfo: Explicitly depend on mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
5918
diff
changeset
|
34 |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
35 function module.load() |
|
5804
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
36 discover_node():next( |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
37 function(exists) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
38 if not exists then create_node() end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
39 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
40 ):catch( |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
41 function(error) |
|
6357
f24ff3e6e180
mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents:
6356
diff
changeset
|
42 module:log("warn", "Error prevented discovery or creation of pubsub node at %s: %s", service, error) |
|
5804
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
43 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
44 ) |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
45 |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
46 module:add_feature("urn:xmpp:serverinfo:0"); |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
47 |
|
5843
79ae71f52c81
mod_pubsub_serverinfo: Update to use mod_server_info (fixes #1841)
Matthew Wild <mwild1@gmail.com>
parents:
5817
diff
changeset
|
48 module:add_item("server-info-fields", { |
|
79ae71f52c81
mod_pubsub_serverinfo: Update to use mod_server_info (fixes #1841)
Matthew Wild <mwild1@gmail.com>
parents:
5817
diff
changeset
|
49 { name = "serverinfo-pubsub-node", type = "text-single", value = ("xmpp:%s?;node=%s"):format(service, node) }; |
|
79ae71f52c81
mod_pubsub_serverinfo: Update to use mod_server_info (fixes #1841)
Matthew Wild <mwild1@gmail.com>
parents:
5817
diff
changeset
|
50 }); |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
51 |
|
5813
d38772479891
mod_pubsub_serverinfo: Some logging improvements
Matthew Wild <mwild1@gmail.com>
parents:
5812
diff
changeset
|
52 if cache_ttl < publication_interval then |
|
d38772479891
mod_pubsub_serverinfo: Some logging improvements
Matthew Wild <mwild1@gmail.com>
parents:
5812
diff
changeset
|
53 module:log("warn", "It is recommended to have a cache interval higher than the publication interval"); |
|
d38772479891
mod_pubsub_serverinfo: Some logging improvements
Matthew Wild <mwild1@gmail.com>
parents:
5812
diff
changeset
|
54 end |
|
d38772479891
mod_pubsub_serverinfo: Some logging improvements
Matthew Wild <mwild1@gmail.com>
parents:
5812
diff
changeset
|
55 |
|
5810
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5809
diff
changeset
|
56 cache_warm_up() |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
57 module:add_timer(10, publish_serverinfo); |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
58 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
59 |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
60 function module.unload() |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
61 -- This removes all subscribers, which may or may not be desirable, depending on the reason for the unload. |
|
5816
45d0802d0787
mod_pubsub_serverinfo: Allow configuration of node persistence/deletion
Matthew Wild <mwild1@gmail.com>
parents:
5815
diff
changeset
|
62 if delete_node_on_unload then |
|
45d0802d0787
mod_pubsub_serverinfo: Allow configuration of node persistence/deletion
Matthew Wild <mwild1@gmail.com>
parents:
5815
diff
changeset
|
63 delete_node(); |
|
45d0802d0787
mod_pubsub_serverinfo: Allow configuration of node persistence/deletion
Matthew Wild <mwild1@gmail.com>
parents:
5815
diff
changeset
|
64 end |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
65 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
66 |
|
5804
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
67 -- Returns a promise of a boolean |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
68 function discover_node() |
|
5810
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5809
diff
changeset
|
69 local request = st.iq({ type = "get", to = service, from = actor, id = new_id() }) |
|
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5809
diff
changeset
|
70 :tag("query", { xmlns = "http://jabber.org/protocol/disco#items" }) |
|
5804
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
71 |
|
6357
f24ff3e6e180
mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents:
6356
diff
changeset
|
72 module:log("debug", "Sending request to discover existence of pubsub node '%s' at %s", node, service) |
|
5804
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
73 return module:send_iq(request):next( |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
74 function(response) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
75 if response.stanza == nil or response.stanza.attr.type ~= "result" then |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
76 module:log("warn", "Unexpected response to service discovery items request at %s: %s", service, response.stanza) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
77 return false |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
78 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
79 |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
80 local query = response.stanza:get_child("query", "http://jabber.org/protocol/disco#items") |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
81 if query ~= nil then |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
82 for item in query:childtags("item") do |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
83 if item.attr.jid == service and item.attr.node == node then |
|
6357
f24ff3e6e180
mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents:
6356
diff
changeset
|
84 module:log("debug", "pubsub node '%s' at %s does exist.", node, service) |
|
5804
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
85 return true |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
86 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
87 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
88 end |
|
6357
f24ff3e6e180
mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents:
6356
diff
changeset
|
89 module:log("debug", "pubsub node '%s' at %s does not exist.", node, service) |
|
5804
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
90 return false; |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
91 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
92 ); |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
93 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
94 |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
95 -- Returns a promise of a boolean |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
96 function create_node() |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
97 local request = st.iq({ type = "set", to = service, from = actor, id = new_id() }) |
|
5815
77c5709bd57a
mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents:
5814
diff
changeset
|
98 :tag("pubsub", { xmlns = xmlns_pubsub }) |
|
77c5709bd57a
mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents:
5814
diff
changeset
|
99 :tag("create", { node = node, xmlns = xmlns_pubsub }):up() |
|
77c5709bd57a
mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents:
5814
diff
changeset
|
100 :tag("configure", { xmlns = xmlns_pubsub }) |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
101 :tag("x", { xmlns = "jabber:x:data", type = "submit" }) |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
102 :tag("field", { var = "FORM_TYPE", type = "hidden"}) |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
103 :text_tag("value", "http://jabber.org/protocol/pubsub#node_config") |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
104 :up() |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
105 :tag("field", { var = "pubsub#max_items" }) |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
106 :text_tag("value", "1") |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
107 :up() |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
108 :tag("field", { var = "pubsub#persist_items" }) |
|
5816
45d0802d0787
mod_pubsub_serverinfo: Allow configuration of node persistence/deletion
Matthew Wild <mwild1@gmail.com>
parents:
5815
diff
changeset
|
109 :text_tag("value", persist_items and "1" or "0") |
|
5804
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
110 |
|
6357
f24ff3e6e180
mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents:
6356
diff
changeset
|
111 module:log("debug", "Sending request to create pubsub node '%s' at %s", node, service) |
|
5804
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
112 return module:send_iq(request):next( |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
113 function(response) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
114 if response.stanza == nil or response.stanza.attr.type ~= "result" then |
|
6357
f24ff3e6e180
mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents:
6356
diff
changeset
|
115 module:log("warn", "Unexpected response to pubsub node '%s' creation request at %s: %s", node, service, response.stanza) |
|
5804
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
116 return false |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
117 else |
|
6357
f24ff3e6e180
mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents:
6356
diff
changeset
|
118 module:log("debug", "Successfully created pubsub node '%s' at %s", node, service) |
|
5804
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
119 return true |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
120 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
121 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
122 ) |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
123 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
124 |
|
5804
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
125 -- Returns a promise of a boolean |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
126 function delete_node() |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
127 local request = st.iq({ type = "set", to = service, from = actor, id = new_id() }) |
|
5815
77c5709bd57a
mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents:
5814
diff
changeset
|
128 :tag("pubsub", { xmlns = xmlns_pubsub }) |
|
77c5709bd57a
mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents:
5814
diff
changeset
|
129 :tag("delete", { node = node, xmlns = xmlns_pubsub }); |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
130 |
|
6357
f24ff3e6e180
mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents:
6356
diff
changeset
|
131 module:log("debug", "Sending request to delete pubsub node '%s' at %s", node, service) |
|
5804
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
132 return module:send_iq(request):next( |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
133 function(response) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
134 if response.stanza == nil or response.stanza.attr.type ~= "result" then |
|
6357
f24ff3e6e180
mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents:
6356
diff
changeset
|
135 module:log("warn", "Unexpected response to pubsub node '%s' deletion request at %s: %s", node, service, response.stanza) |
|
5804
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
136 return false |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
137 else |
|
6357
f24ff3e6e180
mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents:
6356
diff
changeset
|
138 module:log("debug", "Successfully deleted pubsub node '%s' at %s", node, service) |
|
5804
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
139 return true |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
140 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
141 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
142 ) |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
143 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
144 |
|
5810
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5809
diff
changeset
|
145 function get_remote_domain_names() |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
146 -- Iterate over s2s sessions, adding them to a multimap, where the key is the local domain name, |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
147 -- mapped to a collection of remote domain names. De-duplicate all remote domain names by using |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
148 -- them as an index in a table. |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
149 local domains_by_host = {} |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
150 for session, _ in pairs(prosody.incoming_s2s) do |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
151 if session ~= nil and session.from_host ~= nil and local_domain == session.to_host then |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
152 local sessions = domains_by_host[session.to_host] |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
153 if sessions == nil then sessions = {} end; -- instantiate a new entry if none existed |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
154 sessions[session.from_host] = true |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
155 domains_by_host[session.to_host] = sessions |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
156 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
157 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
158 |
|
5808
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5805
diff
changeset
|
159 -- At an earlier stage, the code iterated over all prosody.hosts, trying to generate one pubsub item for all local hosts. That turned out to be |
|
6357
f24ff3e6e180
mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents:
6356
diff
changeset
|
160 -- too noisy. Instead, this code now creates an item that includes the local vhost only. It is assumed that this module will also be loaded for |
|
f24ff3e6e180
mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents:
6356
diff
changeset
|
161 -- other vhosts. Their data should then be published to distinct pubsub services and nodes. |
|
5808
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5805
diff
changeset
|
162 |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
163 local host = local_domain |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
164 local data = prosody.hosts[host] |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
165 if data ~= nil then |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
166 local sessions = domains_by_host[host] |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
167 if sessions == nil then sessions = {} end; -- instantiate a new entry if none existed |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
168 if data.s2sout ~= nil then |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
169 for _, session in pairs(data.s2sout) do |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
170 if session.to_host ~= nil then |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
171 sessions[session.to_host] = true |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
172 domains_by_host[host] = sessions |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
173 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
174 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
175 end |
|
5808
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5805
diff
changeset
|
176 |
|
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5805
diff
changeset
|
177 -- When the instance of Prosody hosts more than one host, the other hosts can be thought of as having a 'permanent' s2s connection. |
|
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5805
diff
changeset
|
178 for host_name, host_info in pairs(prosody.hosts) do |
|
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5805
diff
changeset
|
179 if host ~= host_name and host_info.type ~= "component" then |
|
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5805
diff
changeset
|
180 sessions[host_name] = true; |
|
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5805
diff
changeset
|
181 domains_by_host[host] = sessions |
|
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5805
diff
changeset
|
182 end |
|
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5805
diff
changeset
|
183 end |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
184 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
185 |
|
5810
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5809
diff
changeset
|
186 return domains_by_host |
|
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5809
diff
changeset
|
187 end |
|
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5809
diff
changeset
|
188 |
|
6031
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
189 local function get_gauge_metric(name) |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
190 return (metric_registry.families[name].data:get(module.host) or {}).value; |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
191 end |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
192 |
|
5810
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5809
diff
changeset
|
193 function publish_serverinfo() |
|
5813
d38772479891
mod_pubsub_serverinfo: Some logging improvements
Matthew Wild <mwild1@gmail.com>
parents:
5812
diff
changeset
|
194 module:log("debug", "Publishing server info..."); |
|
5810
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5809
diff
changeset
|
195 local domains_by_host = get_remote_domain_names() |
|
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5809
diff
changeset
|
196 |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
197 -- Build the publication stanza. |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
198 local request = st.iq({ type = "set", to = service, from = actor, id = new_id() }) |
|
5815
77c5709bd57a
mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents:
5814
diff
changeset
|
199 :tag("pubsub", { xmlns = xmlns_pubsub }) |
|
77c5709bd57a
mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents:
5814
diff
changeset
|
200 :tag("publish", { node = node, xmlns = xmlns_pubsub }) |
|
77c5709bd57a
mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents:
5814
diff
changeset
|
201 :tag("item", { id = "current", xmlns = xmlns_pubsub }) |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
202 :tag("serverinfo", { xmlns = "urn:xmpp:serverinfo:0" }) |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
203 |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
204 request:tag("domain", { name = local_domain }) |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
205 :tag("federation") |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
206 |
|
5810
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5809
diff
changeset
|
207 local remotes = domains_by_host[local_domain] |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
208 |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
209 if remotes ~= nil then |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
210 for remote, _ in pairs(remotes) do |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
211 -- include a domain name for remote domains, but only if they advertise support. |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
212 if does_opt_in(remote) then |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
213 request:tag("remote-domain", { name = remote }):up() |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
214 else |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
215 request:tag("remote-domain"):up() |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
216 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
217 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
218 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
219 |
|
6031
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
220 request:up(); |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
221 |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
222 if include_user_count then |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
223 local mau = get_gauge_metric("prosody_mod_measure_active_users/active_users_30d"); |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
224 request:tag("users", { xmlns = "xmpp:prosody.im/protocol/serverinfo" }); |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
225 if mau then |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
226 request:text_tag("active", ("%d"):format(mau)); |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
227 end |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
228 request:up(); |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
229 end |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
230 |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5919
diff
changeset
|
231 request:up() |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
232 |
|
5804
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
233 module:send_iq(request):next( |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
234 function(response) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
235 if response.stanza == nil or response.stanza.attr.type ~= "result" then |
|
6358
de2651ba8bae
mod_pubsub_serverinfo: Use log_status to preserve last publication result
Matthew Wild <mwild1@gmail.com>
parents:
6357
diff
changeset
|
236 module:log_status("warn", "Unexpected response to item publication at pubsub node '%s' on %s: %s", node, service, response.stanza) |
|
5804
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
237 return false |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
238 else |
|
6369
2b272065439c
mod_pubsub_serverinfo/mod_pubsub_serverinfo.lua: fix last logging error that was made by trying to fix previous error.
Menel <menel@snikket.de>
parents:
6368
diff
changeset
|
239 module:log("debug", "Successfully published item on pubsub node '%s' at %s", node, service) |
|
2b272065439c
mod_pubsub_serverinfo/mod_pubsub_serverinfo.lua: fix last logging error that was made by trying to fix previous error.
Menel <menel@snikket.de>
parents:
6368
diff
changeset
|
240 module:set_status("info", "Successfully published item on pubsub node") |
|
5804
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
241 return true |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
242 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
243 end, |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
244 function(error) |
|
6357
f24ff3e6e180
mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents:
6356
diff
changeset
|
245 module:log("warn", "Error prevented publication of item on pubsub node at %s: %s", service, error) |
|
5804
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
246 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5803
diff
changeset
|
247 ) |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
248 |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
249 return publication_interval; |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
250 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
251 |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
252 local opt_in_cache = {} |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
253 |
|
5817
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
254 -- Public providers are already public, so we fetch the list of providers |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
255 -- registered on providers.xmpp.net so we don't have to disco them individually |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
256 local function update_public_providers() |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
257 return http.request(public_providers_url) |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
258 :next(function (response) |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
259 assert( |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
260 response.headers["content-type"] == "application/json", |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
261 "invalid mimetype: "..tostring(response.headers["content-type"]) |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
262 ); |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
263 return json.decode(response.body); |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
264 end) |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
265 :next(function (public_server_domains) |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
266 module:log("debug", "Retrieved list of %d public providers", #public_server_domains); |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
267 for _, domain in ipairs(public_server_domains) do |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
268 opt_in_cache[domain] = { |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
269 opt_in = true; |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
270 expires = os.time() + (86400 * 1.5); |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
271 }; |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
272 end |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
273 end, function (err) |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
274 module:log("warn", "Failed to fetch/decode provider list: %s", err); |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
275 end); |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
276 end |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
277 |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
278 module:daily("update public provider list", update_public_providers); |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
279 |
|
5810
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5809
diff
changeset
|
280 function cache_warm_up() |
|
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5809
diff
changeset
|
281 module:log("debug", "Warming up opt-in cache") |
|
5817
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
282 |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
283 update_public_providers():finally(function () |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
284 module:log("debug", "Querying known domains for opt-in cache..."); |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
285 local domains_by_host = get_remote_domain_names() |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
286 local remotes = domains_by_host[local_domain] |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
287 if remotes ~= nil then |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
288 for remote in pairs(remotes) do |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
289 does_opt_in(remote) |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
290 end |
|
5810
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5809
diff
changeset
|
291 end |
|
5817
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5816
diff
changeset
|
292 end); |
|
5810
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5809
diff
changeset
|
293 end |
|
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5809
diff
changeset
|
294 |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
295 function does_opt_in(remoteDomain) |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
296 |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
297 -- try to read answer from cache. |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
298 local cached_value = opt_in_cache[remoteDomain] |
|
5812
cf5f77491323
mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents:
5810
diff
changeset
|
299 local ttl = cached_value and os.difftime(cached_value.expires, os.time()); |
|
cf5f77491323
mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents:
5810
diff
changeset
|
300 if cached_value and ttl > (publication_interval + 60) then |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
301 return cached_value.opt_in; |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
302 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
303 |
|
5812
cf5f77491323
mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents:
5810
diff
changeset
|
304 -- We don't have a cached value, or it is nearing expiration - refresh it now |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
305 -- TODO worry about not having multiple requests in flight to the same domain.cached_value |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
306 |
|
5813
d38772479891
mod_pubsub_serverinfo: Some logging improvements
Matthew Wild <mwild1@gmail.com>
parents:
5812
diff
changeset
|
307 module:log("debug", "%s: performing disco/info to determine opt-in", remoteDomain) |
|
5810
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5809
diff
changeset
|
308 local discoRequest = st.iq({ type = "get", to = remoteDomain, from = actor, id = new_id() }) |
|
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5809
diff
changeset
|
309 :tag("query", { xmlns = "http://jabber.org/protocol/disco#info" }) |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
310 |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
311 module:send_iq(discoRequest):next( |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
312 function(response) |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
313 if response.stanza ~= nil and response.stanza.attr.type == "result" then |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
314 local query = response.stanza:get_child("query", "http://jabber.org/protocol/disco#info") |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
315 if query ~= nil then |
|
5809
a8cae8322b7c
mod_pubsub_serverinfo: Fix namespace parsing issue with disco/info
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5808
diff
changeset
|
316 for feature in query:childtags("feature") do |
|
5813
d38772479891
mod_pubsub_serverinfo: Some logging improvements
Matthew Wild <mwild1@gmail.com>
parents:
5812
diff
changeset
|
317 --module:log("debug", "Disco/info feature for '%s': %s", remoteDomain, feature) |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
318 if feature.attr.var == 'urn:xmpp:serverinfo:0' then |
|
5808
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5805
diff
changeset
|
319 module:log("debug", "Disco/info response included opt-in for '%s'", remoteDomain) |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
320 opt_in_cache[remoteDomain] = { |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
321 opt_in = true; |
|
5805
55b99f593c3a
mod_pubsub_serverinfo: Disco/info cache TTL should be configurable
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5804
diff
changeset
|
322 expires = os.time() + cache_ttl; |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
323 } |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
324 return; -- prevent 'false' to be cached, down below. |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
325 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
326 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
327 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
328 end |
|
5808
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5805
diff
changeset
|
329 module:log("debug", "Disco/info response did not include opt-in for '%s'", remoteDomain) |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
330 opt_in_cache[remoteDomain] = { |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
331 opt_in = false; |
|
5805
55b99f593c3a
mod_pubsub_serverinfo: Disco/info cache TTL should be configurable
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5804
diff
changeset
|
332 expires = os.time() + cache_ttl; |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
333 } |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
334 end, |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
335 function(response) |
|
5808
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5805
diff
changeset
|
336 module:log("debug", "An error occurred while performing a disco/info request to determine opt-in for '%s'", remoteDomain, response) |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
337 opt_in_cache[remoteDomain] = { |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
338 opt_in = false; |
|
5805
55b99f593c3a
mod_pubsub_serverinfo: Disco/info cache TTL should be configurable
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5804
diff
changeset
|
339 expires = os.time() + cache_ttl; |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
340 } |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
341 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
342 ); |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
343 |
|
5812
cf5f77491323
mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents:
5810
diff
changeset
|
344 if ttl and ttl <= 0 then |
|
cf5f77491323
mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents:
5810
diff
changeset
|
345 -- Cache entry expired, remove it and assume not opted in |
|
cf5f77491323
mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents:
5810
diff
changeset
|
346 opt_in_cache[remoteDomain] = nil; |
|
cf5f77491323
mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents:
5810
diff
changeset
|
347 return false; |
|
cf5f77491323
mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents:
5810
diff
changeset
|
348 end |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
349 |
|
5812
cf5f77491323
mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents:
5810
diff
changeset
|
350 return cached_value and cached_value.opt_in; |
|
5803
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5801
diff
changeset
|
351 end |
