Software /
code /
prosody-modules
File
mod_measure_client_presence/mod_measure_client_presence.lua @ 6188:3e0bce07f66c
mod_measure_client_features: Switch to the more modern statistics API
author | Link Mauve <linkmauve@linkmauve.fr> |
---|---|
date | Tue, 04 Feb 2025 23:02:17 +0100 |
parent | 6187:5aea64434756 |
line wrap: on
line source
module:set_global(); local statsmanager = require "prosody.core.statsmanager"; local measure_presences = module:metric("gauge", "presence", "client", "Presence show used by clients", {"show"}); local valid_shows = { available = true, chat = true, away = true, dnd = true, xa = true, unavailable = true, } 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(prosody.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 statsmanager.cork(); measure_presences:clear(); for bucket, count in pairs(buckets) do measure_presences:with_labels(bucket):add(count); end statsmanager.uncork(); end)