Mercurial > prosody-modules
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 |
| parents | mod_list_inactive/mod_list_inactive.lua@e4c3d335b07f |
| children | 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 |
