changeset 3135:e166ccc7a779

mod_measure_client_identities: Collect statistics about client identities.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Fri, 22 Jun 2018 01:06:18 +0200
parents 99ac6dda9878
children fdbf7c2aed7b
files mod_measure_client_identities/README.markdown mod_measure_client_identities/mod_measure_client_identities.lua
diffstat 2 files changed, 42 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /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)