# HG changeset patch # User Emmanuel Gil Peyrot # Date 1507573697 -3600 # Node ID 37ae0801f925166431dc931a29bb3f82255ac888 # Parent 5124050777098afbba95c207f1a662e35a425538 mod_measure_client_presence: Counts presence show and reports using 0.10+ statistics API. diff -r 512405077709 -r 37ae0801f925 mod_measure_client_presence/README.markdown --- /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 diff -r 512405077709 -r 37ae0801f925 mod_measure_client_presence/mod_measure_client_presence.lua --- /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)