mod_measure_client_identities: Collect statistics about client identities.
authorEmmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Fri, 22 Jun 2018 01:06:18 +0200
changeset 3139 e166ccc7a779
parent 3138 99ac6dda9878
child 3140 fdbf7c2aed7b
mod_measure_client_identities: Collect statistics about client identities.
mod_measure_client_identities/README.markdown
mod_measure_client_identities/mod_measure_client_identities.lua
--- /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)