Mercurial > prosody-modules
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 3707:3248295e1b16 | 3708:0a800463bc08 |
|---|---|
| 1 local json = require "util.json"; | 1 local json = require "util.json"; |
| 2 local array = require "util.array"; | 2 local array = require "util.array"; |
| 3 local get_stats = require "core.statsmanager".get_stats; | 3 local get_stats = require "core.statsmanager".get_stats; |
| 4 local os_time = os.time; | |
| 4 | 5 |
| 5 module:depends("http"); | 6 module:depends("http"); |
| 7 module:depends("lastlog"); | |
| 6 module:depends("measure_message_e2ee"); | 8 module:depends("measure_message_e2ee"); |
| 7 | 9 |
| 10 local store = module:open_store("lastlog"); | |
| 11 | |
| 8 local total_users = 0; | 12 local total_users = 0; |
| 9 for _ in require "core.usermanager".users(module.host) do -- TODO refresh at some interval? | 13 local half_year_users = 0; |
| 14 local month_users = 0; | |
| 15 local week_users = 0; | |
| 16 for user in require "core.usermanager".users(module.host) do -- TODO refresh at some interval? | |
| 10 total_users = total_users + 1; | 17 total_users = total_users + 1; |
| 18 local lastlog = store:get(user); | |
| 19 if lastlog and lastlog.timestamp then | |
| 20 local delta = os_time() - lastlog.timestamp; | |
| 21 if delta < 6 * 30 * 24 * 60 * 60 then | |
| 22 half_year_users = half_year_users + 1; | |
| 23 end | |
| 24 if delta < 30 * 24 * 60 * 60 then | |
| 25 month_users = month_users + 1; | |
| 26 end | |
| 27 if delta < 7 * 24 * 60 * 60 then | |
| 28 week_users = week_users + 1; | |
| 29 end | |
| 30 end | |
| 31 end | |
| 32 | |
| 33 -- Remove the properties if we couldn’t find a single active user. It most likely means mod_lastlog isn’t in use. | |
| 34 if half_year_users == 0 and month_users == 0 and week_users == 0 then | |
| 35 half_year_users = nil; | |
| 36 month_users = nil; | |
| 37 week_users = nil; | |
| 11 end | 38 end |
| 12 | 39 |
| 13 module:provides("http", { | 40 module:provides("http", { |
| 14 default_path = "/.well-known/x-nodeinfo2"; | 41 default_path = "/.well-known/x-nodeinfo2"; |
| 15 route = { | 42 route = { |
| 16 GET = function (event) | 43 GET = function (event) |
| 17 local stats, changed_only, extras = get_stats(); | 44 local stats, changed_only, extras = get_stats(); |
| 18 local message_count = nil; | 45 local message_count = nil; |
| 19 for stat, value in pairs(stats) do | 46 for stat, _ in pairs(stats) do |
| 20 if stat == "/*/mod_measure_message_e2ee/message:rate" then | 47 if stat == "/*/mod_measure_message_e2ee/message:rate" then |
| 21 message_count = extras[stat].total; | 48 message_count = extras[stat].total; |
| 22 end | 49 end |
| 23 end | 50 end |
| 24 | 51 |
| 52 --]] | 79 --]] |
| 53 openRegistrations = module:get_option_boolean("allow_registration", false); | 80 openRegistrations = module:get_option_boolean("allow_registration", false); |
| 54 usage = { | 81 usage = { |
| 55 users = { | 82 users = { |
| 56 total = total_users; | 83 total = total_users; |
| 57 -- TODO how would one calculate these? | 84 activeHalfyear = half_year_users; |
| 58 -- activeHalfyear = 1; | 85 activeMonth = month_users; |
| 59 -- activeMonth = 1; | 86 activeWeek = week_users; |
| 60 -- activeWeek = 1; | |
| 61 }; | 87 }; |
| 62 localPosts = message_count; | 88 localPosts = message_count; |
| 63 localComments = message_count; | 89 localComments = message_count; |
| 64 }; | 90 }; |
| 65 }); | 91 }); |
