annotate mod_list_inactive/mod_list_inactive.lua @ 5668:ecfd7aece33b

mod_measure_modules: Report module statuses via OpenMetrics Someone in the chat asked about a health check endpoint, which reminded me of mod_http_status, which provides access to module statuses with full details. After that, this idea came about, which seems natural. As noted in the README, it could be used to monitor that critical modules are in fact loaded correctly. As more modules use the status API, the more useful this module and mod_http_status becomes.
author Kim Alvefur <zash@zash.se>
date Fri, 06 Oct 2023 18:34:39 +0200
parents 38504ec4c89b
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";
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
5 local dm_load = require "util.datamanager".load;
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",
3891
38504ec4c89b mod_list_inactive: report last action timestamp
Georg Lukas <georg@op-co.de>
parents: 1766
diff changeset
17 event = "%s %s %s",
38504ec4c89b mod_list_inactive: report last action timestamp
Georg Lukas <georg@op-co.de>
parents: 1766
diff changeset
18 delete = "user:delete%q -- %s -- %s"
1497
d1836dfa4ae4 mod_list_inactive: Add different output formats
Kim Alvefur <zash@zash.se>
parents: 1496
diff changeset
19 }
d1836dfa4ae4 mod_list_inactive: Add different output formats
Kim Alvefur <zash@zash.se>
parents: 1496
diff changeset
20
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
21 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
22 if #arg < 2 then
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("usage: prosodyctl mod_list_inactive example.net time [format]");
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("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
25 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
26 for name, fmt in pairs(output_formats) do
3891
38504ec4c89b mod_list_inactive: report last action timestamp
Georg Lukas <georg@op-co.de>
parents: 1766
diff changeset
27 print(name, fmt:format("user@example.com", "<last action>", "<last action timestamp>"))
1766
e4c3d335b07f mod_list_inactive: Print some usage info when not called with enough arguments
Kim Alvefur <zash@zash.se>
parents: 1497
diff changeset
28 end
e4c3d335b07f mod_list_inactive: Print some usage info when not called with enough arguments
Kim Alvefur <zash@zash.se>
parents: 1497
diff changeset
29 return;
e4c3d335b07f mod_list_inactive: Print some usage info when not called with enough arguments
Kim Alvefur <zash@zash.se>
parents: 1497
diff changeset
30 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
31 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
32 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
33 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
34 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
35 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
36
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 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
38 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
39
d1836dfa4ae4 mod_list_inactive: Add different output formats
Kim Alvefur <zash@zash.se>
parents: 1496
diff changeset
40 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
41
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
42 for user in um.users(host) do
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
43 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
44 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
45 last_active = last_active and last_active.timestamp or 0;
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
46 if last_active < max_age then
3891
38504ec4c89b mod_list_inactive: report last action timestamp
Georg Lukas <georg@op-co.de>
parents: 1766
diff changeset
47 print(output:format(jid_join(user, host), last_action, os.date('%Y-%m-%d %H:%M:%S', last_active)));
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
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 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
51