Mercurial > prosody-modules
comparison mod_measure_active_users/mod_measure_active_users.lua @ 5778:32d662015a84
mod_measure_active_users: Use the new mod_lastlog2 API
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Wed, 06 Dec 2023 15:50:46 +0000 |
| parents | 34b46d157797 |
| children | 9d3d719db285 |
comparison
equal
deleted
inserted
replaced
| 5777:34b46d157797 | 5778:32d662015a84 |
|---|---|
| 6 | 6 |
| 7 local is_enabled = require "core.usermanager".user_is_enabled; | 7 local is_enabled = require "core.usermanager".user_is_enabled; |
| 8 | 8 |
| 9 -- Exclude disabled user accounts from the counts if usermanager supports that API | 9 -- Exclude disabled user accounts from the counts if usermanager supports that API |
| 10 local count_disabled = not module:get_option_boolean("measure_active_users_count_disabled", is_enabled == nil); | 10 local count_disabled = not module:get_option_boolean("measure_active_users_count_disabled", is_enabled == nil); |
| 11 | |
| 12 local get_last_active = module:depends("lastlog2").get_last_active; | |
| 11 | 13 |
| 12 function update_calculations() | 14 function update_calculations() |
| 13 module:log("debug", "Calculating active users"); | 15 module:log("debug", "Calculating active users"); |
| 14 local host = module.host; | 16 local host = module.host; |
| 15 local host_user_sessions = prosody.hosts[host].sessions; | 17 local host_user_sessions = prosody.hosts[host].sessions; |
| 19 if host_user_sessions[username] then | 21 if host_user_sessions[username] then |
| 20 -- Active now | 22 -- Active now |
| 21 active_d1, active_d7, active_d30 = | 23 active_d1, active_d7, active_d30 = |
| 22 active_d1 + 1, active_d7 + 1, active_d30 + 1; | 24 active_d1 + 1, active_d7 + 1, active_d30 + 1; |
| 23 elseif count_disabled or is_enabled(username, host) then | 25 elseif count_disabled or is_enabled(username, host) then |
| 24 local lastlog_data = store:get(username); | 26 local last_active = get_last_active(username); |
| 25 if lastlog_data then | 27 if last_active then |
| 26 -- Due to server restarts/crashes/etc. some events | |
| 27 -- may not always get recorded, so we'll just take the | |
| 28 -- latest as a sign of last activity | |
| 29 local last_active = math.max( | |
| 30 lastlog_data.login and lastlog_data.login.timestamp or 0, | |
| 31 lastlog_data.logout and lastlog_data.logout.timestamp or 0 | |
| 32 ); | |
| 33 if now - last_active < 86400 then | 28 if now - last_active < 86400 then |
| 34 active_d1 = active_d1 + 1; | 29 active_d1 = active_d1 + 1; |
| 35 end | 30 end |
| 36 if now - last_active < 86400*7 then | 31 if now - last_active < 86400*7 then |
| 37 active_d7 = active_d7 + 1; | 32 active_d7 = active_d7 + 1; |
