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 });