Mercurial > prosody-modules
comparison mod_measure_client_features/mod_measure_client_features.lua @ 3374:5fdbf416bd40
mod_measure_client_features: Add a module to count the features of each connected client
| author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
|---|---|
| date | Sun, 11 Nov 2018 14:44:27 +0100 |
| parents | |
| children | 3e0bce07f66c |
comparison
equal
deleted
inserted
replaced
| 3373:322e8e7ba7d4 | 3374:5fdbf416bd40 |
|---|---|
| 1 module:set_global(); | |
| 2 | |
| 3 local measure = require"core.statsmanager".measure; | |
| 4 | |
| 5 local disco_ns = "http://jabber.org/protocol/disco#info"; | |
| 6 | |
| 7 local counters = { | |
| 8 total = measure("amount", "client_features.total"); | |
| 9 }; | |
| 10 | |
| 11 module:hook("stats-update", function () | |
| 12 local total = 0; | |
| 13 local buckets = {}; | |
| 14 for _, session in pairs(prosody.full_sessions) do | |
| 15 local disco_info = session.caps_cache; | |
| 16 if disco_info ~= nil then | |
| 17 for feature in disco_info:childtags("feature", disco_ns) do | |
| 18 local var = feature.attr.var; | |
| 19 if var ~= nil then | |
| 20 if buckets[var] == nil then | |
| 21 buckets[var] = 0; | |
| 22 end | |
| 23 buckets[var] = buckets[var] + 1; | |
| 24 end | |
| 25 end | |
| 26 total = total + 1; | |
| 27 end | |
| 28 end | |
| 29 for bucket, count in pairs(buckets) do | |
| 30 if counters[bucket] == nil then | |
| 31 counters[bucket] = measure("amount", "client_features."..bucket); | |
| 32 end | |
| 33 counters[bucket](count); | |
| 34 end | |
| 35 counters.total(total); | |
| 36 end) |
