Mercurial > prosody-modules
annotate mod_list_active/mod_list_active.lua @ 5173:460f78654864
mod_muc_rtbl: also filter messages
This was a bit tricky because we don't want to run the JIDs
through SHA256 on each message. Took a while to come up with this
simple plan of just caching the SHA256 of the JIDs on the
occupants.
This will leave some dirt in the occupants after unloading the
module, but that should be ok; once they cycle the room, the
hashes will be gone.
This is direly needed, otherwise, there is a tight race between
the moderation activities and the actors joining the room.
author | Jonas Schäfer <jonas@wielicki.name> |
---|---|
date | Tue, 21 Feb 2023 21:37:27 +0100 |
parents | c06c59b99b3c |
children |
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 |