Mercurial > prosody-modules
diff mod_nodeinfo2/mod_nodeinfo2.lua @ 3708:0a800463bc08
mod_nodeinfo2: Fetch active users from mod_lastlog.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Thu, 10 Oct 2019 20:09:23 +0200 |
parents | 3248295e1b16 |
children | 7f5ce667d93e |
line wrap: on
line diff
--- a/mod_nodeinfo2/mod_nodeinfo2.lua Thu Oct 10 17:59:32 2019 +0200 +++ b/mod_nodeinfo2/mod_nodeinfo2.lua Thu Oct 10 20:09:23 2019 +0200 @@ -1,13 +1,40 @@ local json = require "util.json"; local array = require "util.array"; local get_stats = require "core.statsmanager".get_stats; +local os_time = os.time; module:depends("http"); +module:depends("lastlog"); module:depends("measure_message_e2ee"); +local store = module:open_store("lastlog"); + local total_users = 0; -for _ in require "core.usermanager".users(module.host) do -- TODO refresh at some interval? +local half_year_users = 0; +local month_users = 0; +local week_users = 0; +for user in require "core.usermanager".users(module.host) do -- TODO refresh at some interval? total_users = total_users + 1; + local lastlog = store:get(user); + if lastlog and lastlog.timestamp then + local delta = os_time() - lastlog.timestamp; + if delta < 6 * 30 * 24 * 60 * 60 then + half_year_users = half_year_users + 1; + end + if delta < 30 * 24 * 60 * 60 then + month_users = month_users + 1; + end + if delta < 7 * 24 * 60 * 60 then + week_users = week_users + 1; + end + end +end + +-- Remove the properties if we couldn’t find a single active user. It most likely means mod_lastlog isn’t in use. +if half_year_users == 0 and month_users == 0 and week_users == 0 then + half_year_users = nil; + month_users = nil; + week_users = nil; end module:provides("http", { @@ -16,7 +43,7 @@ GET = function (event) local stats, changed_only, extras = get_stats(); local message_count = nil; - for stat, value in pairs(stats) do + for stat, _ in pairs(stats) do if stat == "/*/mod_measure_message_e2ee/message:rate" then message_count = extras[stat].total; end @@ -54,10 +81,9 @@ usage = { users = { total = total_users; - -- TODO how would one calculate these? - -- activeHalfyear = 1; - -- activeMonth = 1; - -- activeWeek = 1; + activeHalfyear = half_year_users; + activeMonth = month_users; + activeWeek = week_users; }; localPosts = message_count; localComments = message_count;