annotate plugins/mod_offline.lua @ 14016:1df1782ccdfe

prosodyctl shell: Improve process exit codes This fixes a bug introduced in 3326c8a29a86 where prosodyctl shell would always exit with non-zero error codes, even on success. Now it will exit with 0 for success, or 1 if any errors were printed. It also updates the other exit codes in the shell command to help distinguish between different error cases. These are based on the sysexits.h codes, although it is not recommended to rely on that interface.
author Matthew Wild <mwild1@gmail.com>
date Fri, 19 Dec 2025 15:32:26 +0000
parents 30d457b2b0c4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2680
1b267876246a Backed out changeset e7b09424b486 (not removing mod_offline for trunk)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 -- Prosody IM
1b267876246a Backed out changeset e7b09424b486 (not removing mod_offline for trunk)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 -- Copyright (C) 2008-2009 Matthew Wild
1b267876246a Backed out changeset e7b09424b486 (not removing mod_offline for trunk)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 -- Copyright (C) 2008-2009 Waqas Hussain
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 3973
diff changeset
4 --
2680
1b267876246a Backed out changeset e7b09424b486 (not removing mod_offline for trunk)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5 -- This project is MIT/X11 licensed. Please see the
1b267876246a Backed out changeset e7b09424b486 (not removing mod_offline for trunk)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 -- COPYING file in the source package for more information.
1b267876246a Backed out changeset e7b09424b486 (not removing mod_offline for trunk)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 --
1b267876246a Backed out changeset e7b09424b486 (not removing mod_offline for trunk)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8
2737
2251f8898900 mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents: 2680
diff changeset
9
12977
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 10296
diff changeset
10 local datetime = require "prosody.util.datetime";
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 10296
diff changeset
11 local jid_split = require "prosody.util.jid".split;
13995
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
12 local datestamp = require "prosody.util.datetime".date;
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
13
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
14 local cleanup_after = module:get_option_period("offline_expires_after", "never");
2737
2251f8898900 mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents: 2680
diff changeset
15
8024
8eec715c13a6 mod_offline: Switch to using archive store via the storagemanager API
Kim Alvefur <zash@zash.se>
parents: 6834
diff changeset
16 local offline_messages = module:open_store("offline", "archive");
8eec715c13a6 mod_offline: Switch to using archive store via the storagemanager API
Kim Alvefur <zash@zash.se>
parents: 6834
diff changeset
17
2737
2251f8898900 mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents: 2680
diff changeset
18 module:add_feature("msgoffline");
2251f8898900 mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents: 2680
diff changeset
19
13995
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
20 function schedule_cleanup(_username, _date) -- luacheck: ignore 212
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
21 -- Called to make a note of which users have messages on which days, which in
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
22 -- turn is used to optimize the message expiry routine.
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
23 --
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
24 -- This noop is conditionally replaced later depending on retention settings
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
25 -- and storage backend capabilities.
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
26 end
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
27
3972
a05cf5d9c7ab mod_message, mod_offline: Change message/offline/store -> message/offline/handle
Robert Hoelz <rob@hoelz.ro>
parents: 3971
diff changeset
28 module:hook("message/offline/handle", function(event)
2737
2251f8898900 mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents: 2680
diff changeset
29 local origin, stanza = event.origin, event.stanza;
2251f8898900 mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents: 2680
diff changeset
30 local to = stanza.attr.to;
8024
8eec715c13a6 mod_offline: Switch to using archive store via the storagemanager API
Kim Alvefur <zash@zash.se>
parents: 6834
diff changeset
31 local node;
2737
2251f8898900 mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents: 2680
diff changeset
32 if to then
8024
8eec715c13a6 mod_offline: Switch to using archive store via the storagemanager API
Kim Alvefur <zash@zash.se>
parents: 6834
diff changeset
33 node = jid_split(to)
2737
2251f8898900 mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents: 2680
diff changeset
34 else
8024
8eec715c13a6 mod_offline: Switch to using archive store via the storagemanager API
Kim Alvefur <zash@zash.se>
parents: 6834
diff changeset
35 node = origin.username;
2737
2251f8898900 mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents: 2680
diff changeset
36 end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 3973
diff changeset
37
10296
7072569044d4 mod_offline: Log a debug message when message is stored
Kim Alvefur <zash@zash.se>
parents: 10242
diff changeset
38 local ok = offline_messages:append(node, nil, stanza, os.time(), "");
7072569044d4 mod_offline: Log a debug message when message is stored
Kim Alvefur <zash@zash.se>
parents: 10242
diff changeset
39 if ok then
13995
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
40 schedule_cleanup(node);
10296
7072569044d4 mod_offline: Log a debug message when message is stored
Kim Alvefur <zash@zash.se>
parents: 10242
diff changeset
41 module:log("debug", "Saved to offline storage: %s", stanza:top_tag());
7072569044d4 mod_offline: Log a debug message when message is stored
Kim Alvefur <zash@zash.se>
parents: 10242
diff changeset
42 end
7072569044d4 mod_offline: Log a debug message when message is stored
Kim Alvefur <zash@zash.se>
parents: 10242
diff changeset
43 return ok;
6834
750a97b45f88 mod_offline: Decrease priority of event handlers so 3rd party hooks fire first by default
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
44 end, -1);
2737
2251f8898900 mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents: 2680
diff changeset
45
2251f8898900 mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents: 2680
diff changeset
46 module:hook("message/offline/broadcast", function(event)
2251f8898900 mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents: 2680
diff changeset
47 local origin = event.origin;
10242
7e5d2a6c9390 mod_offline: Add some debug logging to reduce confusion
Kim Alvefur <zash@zash.se>
parents: 8030
diff changeset
48 origin.log("debug", "Broadcasting offline messages");
3520
dc94193ec942 Alter mod_offline to respect negative priority resources
Robert Hoelz <rob@hoelz.ro>
parents: 2737
diff changeset
49
3973
f5416372350d Don't check priority in mod_offline
Robert Hoelz <rob@hoelz.ro>
parents: 3972
diff changeset
50 local node, host = origin.username, origin.host;
3540
bc139431830b Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents: 3520
diff changeset
51
8024
8eec715c13a6 mod_offline: Switch to using archive store via the storagemanager API
Kim Alvefur <zash@zash.se>
parents: 6834
diff changeset
52 local data = offline_messages:find(node);
3973
f5416372350d Don't check priority in mod_offline
Robert Hoelz <rob@hoelz.ro>
parents: 3972
diff changeset
53 if not data then return true; end
8024
8eec715c13a6 mod_offline: Switch to using archive store via the storagemanager API
Kim Alvefur <zash@zash.se>
parents: 6834
diff changeset
54 for _, stanza, when in data do
8eec715c13a6 mod_offline: Switch to using archive store via the storagemanager API
Kim Alvefur <zash@zash.se>
parents: 6834
diff changeset
55 stanza:tag("delay", {xmlns = "urn:xmpp:delay", from = host, stamp = datetime.datetime(when)}):up(); -- XEP-0203
3973
f5416372350d Don't check priority in mod_offline
Robert Hoelz <rob@hoelz.ro>
parents: 3972
diff changeset
56 origin.send(stanza);
3540
bc139431830b Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents: 3520
diff changeset
57 end
10242
7e5d2a6c9390 mod_offline: Add some debug logging to reduce confusion
Kim Alvefur <zash@zash.se>
parents: 8030
diff changeset
58 local ok = offline_messages:delete(node);
7e5d2a6c9390 mod_offline: Add some debug logging to reduce confusion
Kim Alvefur <zash@zash.se>
parents: 8030
diff changeset
59 if type(ok) == "number" and ok > 0 then
7e5d2a6c9390 mod_offline: Add some debug logging to reduce confusion
Kim Alvefur <zash@zash.se>
parents: 8030
diff changeset
60 origin.log("debug", "%d offline messages consumed");
7e5d2a6c9390 mod_offline: Add some debug logging to reduce confusion
Kim Alvefur <zash@zash.se>
parents: 8030
diff changeset
61 end
3973
f5416372350d Don't check priority in mod_offline
Robert Hoelz <rob@hoelz.ro>
parents: 3972
diff changeset
62 return true;
6834
750a97b45f88 mod_offline: Decrease priority of event handlers so 3rd party hooks fire first by default
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
63 end, -1);
13995
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
64
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
65 if cleanup_after ~= math.huge then
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
66 local cleanup_storage = module:open_store("offline_cleanup");
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
67 local cleanup_map = module:open_store("offline_cleanup", "map");
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
68
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
69 module:log("debug", "offline_expires_after = %d -- in seconds", cleanup_after);
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
70
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
71 if not offline_messages.delete then
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
72 module:log("error", "offline_expires_after set but mod_%s does not support deleting", offline_messages._provided_by);
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
73 return false;
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
74 end
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
75
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
76 -- For each day, store a set of users that have new messages. To expire
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
77 -- messages, we collect the union of sets of users from dates that fall
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
78 -- outside the cleanup range.
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
79
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
80 if not (offline_messages.caps and offline_messages.caps.wildcard_delete) then
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
81 local last_date = require "prosody.util.cache".new(module:get_option_integer("archive_cleanup_date_cache_size", 1000, 1));
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
82 function schedule_cleanup(username, date)
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
83 date = date or datestamp();
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
84 if last_date:get(username) == date then return end
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
85 local ok = cleanup_map:set(date, username, true);
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
86 if ok then
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
87 last_date:set(username, date);
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
88 end
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
89 end
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
90 end
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
91
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
92 local cleanup_time = module:measure("cleanup", "times");
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
93
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
94 local async = require "prosody.util.async";
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
95 module:daily("Remove expired offline messages", function ()
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
96 local cleanup_done = cleanup_time();
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
97
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
98 if offline_messages.caps and offline_messages.caps.wildcard_delete then
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
99 local ok, err = offline_messages:delete(true, { ["end"] = os.time() - cleanup_after })
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
100 if ok then
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
101 local sum = tonumber(ok);
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
102 if sum then
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
103 module:log("info", "Deleted %d expired messages", sum);
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
104 else
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
105 -- driver did not tell
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
106 module:log("info", "Deleted all expired messages");
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
107 end
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
108 else
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
109 module:log("error", "Could not delete messages: %s", err);
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
110 end
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
111 cleanup_done();
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
112 return;
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
113 end
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
114
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
115 local users = {};
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
116 local cut_off = datestamp(os.time() - cleanup_after);
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
117 for date in cleanup_storage:users() do
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
118 if date <= cut_off then
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
119 module:log("debug", "Messages from %q should be expired", date);
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
120 local messages_this_day = cleanup_storage:get(date);
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
121 if messages_this_day then
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
122 for user in pairs(messages_this_day) do
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
123 users[user] = true;
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
124 end
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
125 if date < cut_off then
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
126 -- Messages from the same day as the cut-off might not have expired yet,
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
127 -- but all earlier will have, so clear storage for those days.
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
128 cleanup_storage:set(date, nil);
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
129 end
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
130 end
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
131 end
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
132 end
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
133 local sum, num_users = 0, 0;
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
134 for user in pairs(users) do
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
135 local ok, err = offline_messages:delete(user, { ["end"] = os.time() - cleanup_after; })
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
136 if ok then
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
137 num_users = num_users + 1;
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
138 sum = sum + (tonumber(ok) or 0);
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
139 else
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
140 cleanup_map:set(cut_off, user, true);
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
141 module:log("error", "Could not delete messages for user '%s': %s", user, err);
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
142 end
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
143 local wait, done = async.waiter();
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
144 module:add_timer(0.01, done);
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
145 wait();
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
146 end
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
147 module:log("info", "Deleted %d expired messages for %d users", sum, num_users);
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
148 cleanup_done();
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
149 end);
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
150
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
151 else
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
152 module:log("debug", "Offline message expiry disabled");
30d457b2b0c4 mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
153 end