annotate mod_list_active/mod_list_active.lua @ 4203:c4002aae4ad3

mod_s2s_keepalive: Use timestamp as iq @id RFC 6120 implies that the id attribute must be unique within a stream. This should fix problems with remote servers that enforce uniqueness and don't answer duplicated ids. If it doesn't do that, then at least you can get a guesstimate at round-trip time from the difference between the result iq stanza and the timestamp it was logged without having to go look for when it was sent, or needing to keep state.
author Kim Alvefur <zash@zash.se>
date Wed, 14 Oct 2020 18:02:10 +0200
parents c06c59b99b3c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1267
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 -- Copyright (C) 2012-2013 Kim Alvefur
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 local um = require "core.usermanager";
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 local sm = require "core.storagemanager";
2637
39c39844cd4c mod_list_active: Inverse of mod_list_inactive (closes #705)
Kim Alvefur <zash@zash.se>
parents: 1766
diff changeset
5 local dm = require "util.datamanager";
1496
cccb151a4cc5 mod_list_inactive: Delay joining JIDs until they are used
Kim Alvefur <zash@zash.se>
parents: 1267
diff changeset
6 local jid_join = require"util.jid".join;
1267
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8 local multipliers = {
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 d = 86400, -- day
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 w = 604800, -- week
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 m = 2629746, -- month
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 y = 31556952, -- year
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 }
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14
1497
d1836dfa4ae4 mod_list_inactive: Add different output formats
Kim Alvefur <zash@zash.se>
parents: 1496
diff changeset
15 local output_formats = {
d1836dfa4ae4 mod_list_inactive: Add different output formats
Kim Alvefur <zash@zash.se>
parents: 1496
diff changeset
16 default = "%s",
d1836dfa4ae4 mod_list_inactive: Add different output formats
Kim Alvefur <zash@zash.se>
parents: 1496
diff changeset
17 event = "%s %s",
d1836dfa4ae4 mod_list_inactive: Add different output formats
Kim Alvefur <zash@zash.se>
parents: 1496
diff changeset
18 }
d1836dfa4ae4 mod_list_inactive: Add different output formats
Kim Alvefur <zash@zash.se>
parents: 1496
diff changeset
19
1267
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 function module.command(arg)
1766
e4c3d335b07f mod_list_inactive: Print some usage info when not called with enough arguments
Kim Alvefur <zash@zash.se>
parents: 1497
diff changeset
21 if #arg < 2 then
2637
39c39844cd4c mod_list_active: Inverse of mod_list_inactive (closes #705)
Kim Alvefur <zash@zash.se>
parents: 1766
diff changeset
22 print("usage: prosodyctl mod_list_active example.net time [format]");
1766
e4c3d335b07f mod_list_inactive: Print some usage info when not called with enough arguments
Kim Alvefur <zash@zash.se>
parents: 1497
diff changeset
23 print("time is a number followed by 'day', 'week', 'month' or 'year'");
e4c3d335b07f mod_list_inactive: Print some usage info when not called with enough arguments
Kim Alvefur <zash@zash.se>
parents: 1497
diff changeset
24 print("formats are:");
e4c3d335b07f mod_list_inactive: Print some usage info when not called with enough arguments
Kim Alvefur <zash@zash.se>
parents: 1497
diff changeset
25 for name, fmt in pairs(output_formats) do
e4c3d335b07f mod_list_inactive: Print some usage info when not called with enough arguments
Kim Alvefur <zash@zash.se>
parents: 1497
diff changeset
26 print(name, fmt:format("user@example.com", "last action"))
e4c3d335b07f mod_list_inactive: Print some usage info when not called with enough arguments
Kim Alvefur <zash@zash.se>
parents: 1497
diff changeset
27 end
e4c3d335b07f mod_list_inactive: Print some usage info when not called with enough arguments
Kim Alvefur <zash@zash.se>
parents: 1497
diff changeset
28 return;
e4c3d335b07f mod_list_inactive: Print some usage info when not called with enough arguments
Kim Alvefur <zash@zash.se>
parents: 1497
diff changeset
29 end
1267
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 local items = {};
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 local host = arg[1];
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 assert(hosts[host], "Host "..tostring(host).." does not exist");
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 sm.initialize_host(host);
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 um.initialize_host(host);
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 local max_age, unit = assert(arg[2], "No time range given"):match("^(%d*)%s*([dwmy]?)");
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 max_age = os.time() - ( tonumber(max_age) or 1 ) * ( multipliers[unit] or 1 );
1497
d1836dfa4ae4 mod_list_inactive: Add different output formats
Kim Alvefur <zash@zash.se>
parents: 1496
diff changeset
38
d1836dfa4ae4 mod_list_inactive: Add different output formats
Kim Alvefur <zash@zash.se>
parents: 1496
diff changeset
39 local output = assert(output_formats[arg[3] or "default"], "No such output format: "..tostring(arg[3] or "default"));
d1836dfa4ae4 mod_list_inactive: Add different output formats
Kim Alvefur <zash@zash.se>
parents: 1496
diff changeset
40
2637
39c39844cd4c mod_list_active: Inverse of mod_list_inactive (closes #705)
Kim Alvefur <zash@zash.se>
parents: 1766
diff changeset
41 for user in dm.users(host, "lastlog") do
39c39844cd4c mod_list_active: Inverse of mod_list_inactive (closes #705)
Kim Alvefur <zash@zash.se>
parents: 1766
diff changeset
42 local last_active = dm.load(user, host, "lastlog");
1497
d1836dfa4ae4 mod_list_inactive: Add different output formats
Kim Alvefur <zash@zash.se>
parents: 1496
diff changeset
43 local last_action = last_active and last_active.event or "?"
1267
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 last_active = last_active and last_active.timestamp or 0;
2640
c06c59b99b3c mod_list_active: Actually invert condition (thanks Dan)
Kim Alvefur <zash@zash.se>
parents: 2637
diff changeset
45 if last_active > max_age then
1497
d1836dfa4ae4 mod_list_inactive: Add different output formats
Kim Alvefur <zash@zash.se>
parents: 1496
diff changeset
46 print(output:format(jid_join(user, host), last_action));
1267
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47 end
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48 end
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49 end
589991b148e8 mod_list_inactive: Parse data collected by mod_lastlog and print users who have not logged in for some time
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50