Mercurial > prosody-modules
view mod_list_inactive/mod_list_inactive.lua @ 2596:ffb6646b4253
Implement XEP-0198 revision 1.5.2 and limit number of hibernated sessions per user
Revision 1.5.2 allows sending h-values on resumes that fail due to hibernation timeout
and to send out a smacks ack directly before the stream close tag.
I also made the used timers stoppable even for prosody 0.10 and below, this makes
the smacks-ack-delayed event more useful.
author | tmolitor <thilo@eightysoft.de> |
---|---|
date | Sun, 05 Mar 2017 20:23:53 +0100 |
parents | e4c3d335b07f |
children | 38504ec4c89b |
line wrap: on
line source
-- Copyright (C) 2012-2013 Kim Alvefur local um = require "core.usermanager"; local sm = require "core.storagemanager"; local dm_load = require "util.datamanager".load; local jid_join = require"util.jid".join; local multipliers = { d = 86400, -- day w = 604800, -- week m = 2629746, -- month y = 31556952, -- year } local output_formats = { default = "%s", event = "%s %s", delete = "user:delete%q -- %s" } function module.command(arg) if #arg < 2 then print("usage: prosodyctl mod_list_inactive example.net time [format]"); print("time is a number followed by 'day', 'week', 'month' or 'year'"); print("formats are:"); for name, fmt in pairs(output_formats) do print(name, fmt:format("user@example.com", "last action")) end return; end local items = {}; local host = arg[1]; assert(hosts[host], "Host "..tostring(host).." does not exist"); sm.initialize_host(host); um.initialize_host(host); local max_age, unit = assert(arg[2], "No time range given"):match("^(%d*)%s*([dwmy]?)"); max_age = os.time() - ( tonumber(max_age) or 1 ) * ( multipliers[unit] or 1 ); local output = assert(output_formats[arg[3] or "default"], "No such output format: "..tostring(arg[3] or "default")); for user in um.users(host) do local last_active = dm_load(user, host, "lastlog"); local last_action = last_active and last_active.event or "?" last_active = last_active and last_active.timestamp or 0; if last_active < max_age then print(output:format(jid_join(user, host), last_action)); end end end