Software /
code /
prosody-modules
Changeset
2789:37ae0801f925
mod_measure_client_presence: Counts presence show and reports using 0.10+ statistics API.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Mon, 09 Oct 2017 19:28:17 +0100 |
parents | 2788:512405077709 |
children | 2790:5163f7905371 |
files | mod_measure_client_presence/README.markdown mod_measure_client_presence/mod_measure_client_presence.lua |
diffstat | 2 files changed, 57 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_measure_client_presence/README.markdown Mon Oct 09 19:28:17 2017 +0100 @@ -0,0 +1,9 @@ +--- +summary: Collect statistics on user presences +--- + +Description +=========== + +This module measures the number of resources of a certain show (available, +away, etc.) currently connected, and reports using Prosody 0.10 APIs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_measure_client_presence/mod_measure_client_presence.lua Mon Oct 09 19:28:17 2017 +0100 @@ -0,0 +1,48 @@ +module:set_global(); + +local measure = require"core.statsmanager".measure; + +local valid_shows = { + available = true, + chat = true, + away = true, + dnd = true, + xa = true, + unavailable = true, +} + +local counters = { + available = measure("amount", "client_presence.available"), + chat = measure("amount", "client_presence.chat"), + away = measure("amount", "client_presence.away"), + dnd = measure("amount", "client_presence.dnd"), + xa = measure("amount", "client_presence.xa"), + unavailable = measure("amount", "client_presence.unavailable"), + invalid = measure("amount", "client_presence.invalid"); +}; + +module:hook("stats-update", function () + local buckets = { + available = 0, + chat = 0, + away = 0, + dnd = 0, + xa = 0, + unavailable = 0, + invalid = 0, + }; + for _, session in pairs(full_sessions) do + local status = "unavailable"; + if session.presence then + status = session.presence:get_child_text("show") or "available"; + end + if valid_shows[status] ~= nil then + buckets[status] = buckets[status] + 1; + else + buckets.invalid = buckets.invalid + 1; + end + end + for bucket, count in pairs(buckets) do + counters[bucket](count) + end +end)