Comparison

mod_list_active/mod_list_active.lua @ 2637:39c39844cd4c

mod_list_active: Inverse of mod_list_inactive (closes #705)
author Kim Alvefur <zash@zash.se>
date Wed, 22 Mar 2017 14:53:15 +0100
parent 1766:mod_list_inactive/mod_list_inactive.lua@e4c3d335b07f
child 2640:c06c59b99b3c
comparison
equal deleted inserted replaced
2636:9ed6d44b9fed 2637:39c39844cd4c
1 -- Copyright (C) 2012-2013 Kim Alvefur
2
3 local um = require "core.usermanager";
4 local sm = require "core.storagemanager";
5 local dm = require "util.datamanager";
6 local jid_join = require"util.jid".join;
7
8 local multipliers = {
9 d = 86400, -- day
10 w = 604800, -- week
11 m = 2629746, -- month
12 y = 31556952, -- year
13 }
14
15 local output_formats = {
16 default = "%s",
17 event = "%s %s",
18 }
19
20 function module.command(arg)
21 if #arg < 2 then
22 print("usage: prosodyctl mod_list_active example.net time [format]");
23 print("time is a number followed by 'day', 'week', 'month' or 'year'");
24 print("formats are:");
25 for name, fmt in pairs(output_formats) do
26 print(name, fmt:format("user@example.com", "last action"))
27 end
28 return;
29 end
30 local items = {};
31 local host = arg[1];
32 assert(hosts[host], "Host "..tostring(host).." does not exist");
33 sm.initialize_host(host);
34 um.initialize_host(host);
35
36 local max_age, unit = assert(arg[2], "No time range given"):match("^(%d*)%s*([dwmy]?)");
37 max_age = os.time() - ( tonumber(max_age) or 1 ) * ( multipliers[unit] or 1 );
38
39 local output = assert(output_formats[arg[3] or "default"], "No such output format: "..tostring(arg[3] or "default"));
40
41 for user in dm.users(host, "lastlog") do
42 local last_active = dm.load(user, host, "lastlog");
43 local last_action = last_active and last_active.event or "?"
44 last_active = last_active and last_active.timestamp or 0;
45 if last_active < max_age then
46 print(output:format(jid_join(user, host), last_action));
47 end
48 end
49 end
50