author | Matthew Wild <mwild1@gmail.com> |
Tue, 16 Apr 2024 10:42:25 +0100 | |
changeset 5886 | 563c2c70cb9f |
parent 5867 | ca62f9984f4b |
permissions | -rw-r--r-- |
4778
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 |
local store = module:open_store("lastlog2"); |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 |
|
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 |
local measure_d1 = module:measure("active_users_1d", "amount"); |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 |
local measure_d7 = module:measure("active_users_7d", "amount"); |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 |
local measure_d30 = module:measure("active_users_30d", "amount"); |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 |
|
5781
34b46d157797
mod_measure_active_users: Exclude disabled user accounts from counts
Matthew Wild <mwild1@gmail.com>
parents:
4778
diff
changeset
|
7 |
local is_enabled = require "core.usermanager".user_is_enabled; |
34b46d157797
mod_measure_active_users: Exclude disabled user accounts from counts
Matthew Wild <mwild1@gmail.com>
parents:
4778
diff
changeset
|
8 |
|
34b46d157797
mod_measure_active_users: Exclude disabled user accounts from counts
Matthew Wild <mwild1@gmail.com>
parents:
4778
diff
changeset
|
9 |
-- Exclude disabled user accounts from the counts if usermanager supports that API |
5795
9d3d719db285
mod_measure_active_users: Fix inverted logic (thanks mirux)
Matthew Wild <mwild1@gmail.com>
parents:
5782
diff
changeset
|
10 |
local count_disabled = module:get_option_boolean("measure_active_users_count_disabled", is_enabled == nil); |
5781
34b46d157797
mod_measure_active_users: Exclude disabled user accounts from counts
Matthew Wild <mwild1@gmail.com>
parents:
4778
diff
changeset
|
11 |
|
5782
32d662015a84
mod_measure_active_users: Use the new mod_lastlog2 API
Matthew Wild <mwild1@gmail.com>
parents:
5781
diff
changeset
|
12 |
local get_last_active = module:depends("lastlog2").get_last_active; |
32d662015a84
mod_measure_active_users: Use the new mod_lastlog2 API
Matthew Wild <mwild1@gmail.com>
parents:
5781
diff
changeset
|
13 |
|
4778
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 |
function update_calculations() |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 |
module:log("debug", "Calculating active users"); |
5781
34b46d157797
mod_measure_active_users: Exclude disabled user accounts from counts
Matthew Wild <mwild1@gmail.com>
parents:
4778
diff
changeset
|
16 |
local host = module.host; |
34b46d157797
mod_measure_active_users: Exclude disabled user accounts from counts
Matthew Wild <mwild1@gmail.com>
parents:
4778
diff
changeset
|
17 |
local host_user_sessions = prosody.hosts[host].sessions; |
4778
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 |
local active_d1, active_d7, active_d30 = 0, 0, 0; |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 |
local now = os.time(); |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 |
for username in store:users() do |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 |
if host_user_sessions[username] then |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 |
-- Active now |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 |
active_d1, active_d7, active_d30 = |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 |
active_d1 + 1, active_d7 + 1, active_d30 + 1; |
5781
34b46d157797
mod_measure_active_users: Exclude disabled user accounts from counts
Matthew Wild <mwild1@gmail.com>
parents:
4778
diff
changeset
|
25 |
elseif count_disabled or is_enabled(username, host) then |
5782
32d662015a84
mod_measure_active_users: Use the new mod_lastlog2 API
Matthew Wild <mwild1@gmail.com>
parents:
5781
diff
changeset
|
26 |
local last_active = get_last_active(username); |
32d662015a84
mod_measure_active_users: Use the new mod_lastlog2 API
Matthew Wild <mwild1@gmail.com>
parents:
5781
diff
changeset
|
27 |
if last_active then |
4778
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 |
if now - last_active < 86400 then |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 |
active_d1 = active_d1 + 1; |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 |
end |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 |
if now - last_active < 86400*7 then |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 |
active_d7 = active_d7 + 1; |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 |
end |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 |
if now - last_active < 86400*30 then |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 |
active_d30 = active_d30 + 1; |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 |
end |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 |
end |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 |
end |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 |
end |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 |
module:log("debug", "Active users (took %ds): %d (24h), %d (7d), %d (30d)", os.time()-now, active_d1, active_d7, active_d30); |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 |
measure_d1(active_d1); |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 |
measure_d7(active_d7); |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 |
measure_d30(active_d30); |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 |
end |
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 |
|
5867
ca62f9984f4b
mod_measure_active_users: Switch to mod_cron for scheduling
Matthew Wild <mwild1@gmail.com>
parents:
5795
diff
changeset
|
46 |
-- Schedule at startup |
4778
1132f2888cd2
mod_measure_active_users: Calculate active user counts over fixed time periods
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 |
module:add_timer(15, update_calculations); |
5867
ca62f9984f4b
mod_measure_active_users: Switch to mod_cron for scheduling
Matthew Wild <mwild1@gmail.com>
parents:
5795
diff
changeset
|
48 |
|
ca62f9984f4b
mod_measure_active_users: Switch to mod_cron for scheduling
Matthew Wild <mwild1@gmail.com>
parents:
5795
diff
changeset
|
49 |
-- Recalculate hourly |
ca62f9984f4b
mod_measure_active_users: Switch to mod_cron for scheduling
Matthew Wild <mwild1@gmail.com>
parents:
5795
diff
changeset
|
50 |
module:hourly(update_calculations); |