Software /
code /
prosody-modules
File
mod_measure_client_presence/mod_measure_client_presence.lua @ 6195:886c985ece61
mod_lastlog2: Skip initializing internal API (and storage) in prosodyctl
Initializing storage in the global context under prosodyctl causes the
module.command to fail to execute because the storage module has already
been loaded.
Introduced in 7b722955c59b
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 08 Feb 2025 14:12:18 +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)