Software /
code /
prosody-modules
Annotate
mod_measure_client_identities/mod_measure_client_identities.lua @ 4838:fd2e48d4ac94
mod_bookmarks2: Advertise XEP-0049 support
In the case mod_private isn’t loaded, some clients (like poezio) won’t even
attempt to use Private XML Storage unless this feature is advertised. This is
on the domain JID and not on the account JID!
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Sun, 26 Dec 2021 14:51:35 +0100 |
parent | 3136:fdbf7c2aed7b |
rev | line source |
---|---|
3135
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
1 module:set_global(); |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
2 |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
3 local measure = require"core.statsmanager".measure; |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
4 |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
5 local counters = { |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
6 unknown = measure("amount", "client_identities.unknown"), |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
7 }; |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
8 |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
9 module:hook("stats-update", function () |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
10 local buckets = { |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
11 unknown = 0, |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
12 }; |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
13 for _, session in pairs(prosody.full_sessions) do |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
14 if session.caps_cache ~= nil then |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
15 local node_string = session.caps_cache.attr.node; |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
16 local node = node_string:match("([^#]+)"); |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
17 if buckets[node] == nil then |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
18 buckets[node] = 0; |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
19 end |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
20 buckets[node] = buckets[node] + 1; |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
21 else |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
22 buckets.unknown = buckets.unknown + 1; |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
23 end |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
24 end |
3136
fdbf7c2aed7b
mod_measure_client_identities: Report 0 instead of the previous value when no client with that identity is left.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3135
diff
changeset
|
25 local visited = {}; |
3135
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
26 for bucket, count in pairs(buckets) do |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
27 if counters[bucket] == nil then |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
28 counters[bucket] = measure("amount", "client_identities."..bucket); |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
29 end |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
30 counters[bucket](count); |
3136
fdbf7c2aed7b
mod_measure_client_identities: Report 0 instead of the previous value when no client with that identity is left.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3135
diff
changeset
|
31 visited[bucket] = true; |
fdbf7c2aed7b
mod_measure_client_identities: Report 0 instead of the previous value when no client with that identity is left.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3135
diff
changeset
|
32 end |
fdbf7c2aed7b
mod_measure_client_identities: Report 0 instead of the previous value when no client with that identity is left.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3135
diff
changeset
|
33 for bucket, counter in pairs(counters) do |
fdbf7c2aed7b
mod_measure_client_identities: Report 0 instead of the previous value when no client with that identity is left.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3135
diff
changeset
|
34 if not visited[bucket] then |
fdbf7c2aed7b
mod_measure_client_identities: Report 0 instead of the previous value when no client with that identity is left.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3135
diff
changeset
|
35 counter(0); |
fdbf7c2aed7b
mod_measure_client_identities: Report 0 instead of the previous value when no client with that identity is left.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3135
diff
changeset
|
36 end |
3135
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
37 end |
e166ccc7a779
mod_measure_client_identities: Collect statistics about client identities.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
38 end) |