mod_measure_client_identities: Collect statistics about client identities.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_measure_client_identities/README.markdown Fri Jun 22 01:06:18 2018 +0200
@@ -0,0 +1,11 @@
+---
+summary: Collect statistics on user identities
+---
+
+Description
+===========
+
+This module measures the number of connected clients per identity.
+
+It requires mod\_cache\_c2s\_caps to be loaded on each VirtualHost to
+provide the data identifying a user’s client.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_measure_client_identities/mod_measure_client_identities.lua Fri Jun 22 01:06:18 2018 +0200
@@ -0,0 +1,31 @@
+module:set_global();
+
+local measure = require"core.statsmanager".measure;
+
+local counters = {
+ unknown = measure("amount", "client_identities.unknown"),
+};
+
+module:hook("stats-update", function ()
+ local buckets = {
+ unknown = 0,
+ };
+ for _, session in pairs(prosody.full_sessions) do
+ if session.caps_cache ~= nil then
+ local node_string = session.caps_cache.attr.node;
+ local node = node_string:match("([^#]+)");
+ if buckets[node] == nil then
+ buckets[node] = 0;
+ end
+ buckets[node] = buckets[node] + 1;
+ else
+ buckets.unknown = buckets.unknown + 1;
+ end
+ end
+ for bucket, count in pairs(buckets) do
+ if counters[bucket] == nil then
+ counters[bucket] = measure("amount", "client_identities."..bucket);
+ end
+ counters[bucket](count);
+ end
+end)