Annotate

plugins/mod_account_activity.lua @ 13681:8f43b954bdac 13.0

mod_admin_shell: Fix result handling of user addrole/delrole commands
author Matthew Wild <mwild1@gmail.com>
date Thu, 13 Feb 2025 15:54:39 +0000
parent 13668:6be7de547a25
child 13682:0055c177a54c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13667
3052eae50c98 mod_account_activity: Fix required module names
Matthew Wild <mwild1@gmail.com>
parents: 13665
diff changeset
1 local jid = require "prosody.util.jid";
13665
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 local time = os.time;
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 local store = module:open_store(nil, "keyval+");
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 module:hook("authentication-success", function(event)
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 local session = event.session;
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8 if session.username then
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 store:set_key(session.username, "timestamp", time());
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10 end
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 end);
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 module:hook("resource-unbind", function(event)
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 local session = event.session;
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 if session.username then
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 store:set_key(session.username, "timestamp", time());
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 end
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 end);
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 local user_sessions = prosody.hosts[module.host].sessions;
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 function get_last_active(username) --luacheck: ignore 131/get_last_active
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 if user_sessions[username] then
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 return os.time(), true; -- Currently connected
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 else
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 local last_activity = store:get(username);
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 if not last_activity then return nil; end
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 return last_activity.timestamp;
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28 end
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 end
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31 module:add_item("shell-command", {
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32 section = "user";
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 section_desc = "View user activity data";
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34 name = "activity";
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35 desc = "View the last recorded user activity for an account";
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36 args = { { name = "jid"; type = "string" } };
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37 host_selector = "jid";
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38 handler = function(self, userjid) --luacheck: ignore 212/self
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39 local username = jid.prepped_split(userjid);
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 local last_timestamp, is_online = get_last_active(username);
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41 if not last_timestamp then
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
42 return true, "No activity";
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43 end
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45 return true, ("%s (%s)"):format(os.date("%Y-%m-%d %H:%M:%S", last_timestamp), (is_online and "online" or "offline"));
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
46 end;
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
47 });
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
48
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
49 module:add_item("shell-command", {
13668
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
50 section = "user";
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
51 section_desc = "View user activity data";
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
52 name = "list_inactive";
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
53 desc = "List inactive user accounts";
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
54 args = {
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
55 { name = "host"; type = "string" };
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
56 { name = "duration"; type = "string" };
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
57 };
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
58 host_selector = "host";
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
59 handler = function(self, host, duration) --luacheck: ignore 212/self
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
60 local um = require "prosody.core.usermanager";
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
61 local duration_sec = require "prosody.util.human.io".parse_duration(duration);
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
62 if not duration_sec then
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
63 return false, ("Invalid duration %q - try something like \"30d\""):format(duration);
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
64 end
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
65
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
66 local now = os.time();
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
67 local n_inactive, n_unknown = 0, 0;
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
68
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
69 for username in um.users(host) do
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
70 local last_active = store:get_key(username, "timestamp");
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
71 if not last_active then
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
72 local created_at = um.get_account_info(username, host).created;
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
73 if created_at and (now - created_at) > duration_sec then
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
74 self.session.print(username, "");
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
75 n_inactive = n_inactive + 1;
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
76 elseif not created_at then
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
77 n_unknown = n_unknown + 1;
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
78 end
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
79 elseif (now - last_active) > duration_sec then
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
80 self.session.print(username, os.date("%Y-%m-%dT%T", last_active));
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
81 n_inactive = n_inactive + 1;
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
82 end
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
83 end
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
84
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
85 if n_unknown > 0 then
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
86 return true, ("%d accounts inactive since %s (%d unknown)"):format(n_inactive, os.date("%Y-%m-%dT%T", now - duration_sec), n_unknown);
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
87 end
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
88 return true, ("%d accounts inactive since %s"):format(n_inactive, os.date("%Y-%m-%dT%T", now - duration_sec));
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
89 end;
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
90 });
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
91
6be7de547a25 mod_account_activity: Add shell command to list inactive accounts
Matthew Wild <mwild1@gmail.com>
parents: 13667
diff changeset
92 module:add_item("shell-command", {
13665
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
93 section = "migrate";
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
94 section_desc = "Perform data migrations";
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
95 name = "account_activity_lastlog2";
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
96 desc = "Migrate account activity information from mod_lastlog2";
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
97 args = { { name = "host"; type = "string" } };
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
98 host_selector = "host";
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
99 handler = function(self, host) --luacheck: ignore 212/host
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
100 local lastlog2 = module:open_store("lastlog2", "keyval+");
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
101 local n_updated, n_errors, n_skipped = 0, 0, 0;
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
102
13667
3052eae50c98 mod_account_activity: Fix required module names
Matthew Wild <mwild1@gmail.com>
parents: 13665
diff changeset
103 local async = require "prosody.util.async";
13665
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
104
13667
3052eae50c98 mod_account_activity: Fix required module names
Matthew Wild <mwild1@gmail.com>
parents: 13665
diff changeset
105 local p = require "prosody.util.promise".new(function (resolve)
13665
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
106 local async_runner = async.runner(function ()
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
107 local n = 0;
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
108 for username in lastlog2:items() do
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
109 n = n + 1;
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
110 if n % 100 == 0 then
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
111 self.session.print(("Processed %d..."):format(n));
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
112 async.sleep(0);
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
113 end
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
114 local lastlog2_data = lastlog2:get(username);
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
115 if lastlog2_data then
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
116 local current_data, err = store:get(username);
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
117 if not current_data then
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
118 if not err then
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
119 current_data = {};
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
120 else
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
121 n_errors = n_errors + 1;
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
122 end
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
123 end
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
124 if current_data then
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
125 local imported_timestamp = current_data.timestamp;
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
126 local latest;
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
127 for k, v in pairs(lastlog2_data) do
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
128 if k ~= "registered" and (not latest or v.timestamp > latest) then
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
129 latest = v.timestamp;
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
130 end
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
131 end
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
132 if latest and (not imported_timestamp or imported_timestamp < latest) then
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
133 local ok, err = store:set_key(username, "timestamp", latest);
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
134 if ok then
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
135 n_updated = n_updated + 1;
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
136 else
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
137 self.session.print(("WW: Failed to import %q: %s"):format(username, err));
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
138 n_errors = n_errors + 1;
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
139 end
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
140 else
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
141 n_skipped = n_skipped + 1;
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
142 end
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
143 end
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
144 end
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
145 end
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
146 return resolve(("%d accounts imported, %d errors, %d skipped"):format(n_updated, n_errors, n_skipped));
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
147 end);
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
148 async_runner:run(true);
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
149 end);
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
150 return p;
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
151 end;
30a91d819913 mod_account_activity: Record an account's last activity timestamp
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
152 });