Diff

mod_measure_modules/mod_measure_modules.lua @ 5856:75dee6127829 draft

Merge upstream
author Trần H. Trung <xmpp:trần.h.trung@trung.fun>
date Tue, 06 Feb 2024 18:32:01 +0700
parent 5691:ecfd7aece33b
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_measure_modules/mod_measure_modules.lua	Tue Feb 06 18:32:01 2024 +0700
@@ -0,0 +1,33 @@
+module:set_global();
+
+local mm = require "core.modulemanager";
+local sm = require "core.statsmanager";
+
+local measure_status = sm.metric("gauge", "prosody_module_status", "", "Prosody module status", { "host"; "module" });
+
+local status_priorities = { error = 3; warn = 2; info = 1; core = 0 };
+
+function module.add_host(module)
+	local measure = measure_status:with_partial_label(module.host);
+
+	if module.global then
+		measure = measure_status:with_partial_label(":global");
+	end
+
+	-- Already loaded modules
+	local modules = mm.get_modules(module.host);
+	for name, mod in pairs(modules) do
+		measure:with_labels(name):set(status_priorities[mod.module.status_type] or 0);
+	end
+
+	-- TODO hook module load and unload
+
+	-- Future changes
+	module:hook("module-status/updated", function(event)
+		local mod = mm.get_module(event.name);
+		measure:with_labels(event.name):set(status_priorities[mod and mod.module.status_type] or 0);
+	end);
+
+end
+
+module:add_host(); -- Initialize global context