annotate plugins/mod_offline.lua @ 14079:0ea2848d7771

prosodyctl: Only import "socket" in the root of the module
author Link Mauve <linkmauve@linkmauve.fr>
date Fri, 30 Jan 2026 14:44:04 +0100
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