view mod_sentry/mod_sentry.lua @ 6224:86989059de5b

:multibe Readme.md: correct prosody 0.13 to 13 diff --git a/mod_muc_anonymize_moderation_actions/README.md b/mod_muc_anonymize_moderation_actions/README.md --- a/mod_muc_anonymize_moderation_actions/README.md +++ b/mod_muc_anonymize_moderation_actions/README.md @@ -34,7 +34,7 @@ Component "muc.example.com" "muc" ------ ---------------------- trunk Works as of 25-05-12 - 0.13 Works + 13 Works 0.12 Works ------ ---------------------- diff --git a/mod_sasl2/README.md b/mod_sasl2/README.md --- a/mod_sasl2/README.md +++ b/mod_sasl2/README.md @@ -32,6 +32,6 @@ This module requires Prosody **trunk** a Prosody Version Status ----------------------- ---------------- trunk as of 2025-05-25 Works - 0.13 Works + 13 Works 0.12 Does not work ----------------------- ---------------- diff --git a/mod_sasl2_bind2/README.md b/mod_sasl2_bind2/README.md --- a/mod_sasl2_bind2/README.md +++ b/mod_sasl2_bind2/README.md @@ -17,5 +17,5 @@ This module depends on [mod_sasl2]. It e Prosody-Version Status --------------- ---------------------- trunk Works as of 2025-05-25 - 0.13 Works + 13 Works 0.12 Does not work diff --git a/mod_sasl2_fast/README.md b/mod_sasl2_fast/README.md --- a/mod_sasl2_fast/README.md +++ b/mod_sasl2_fast/README.md @@ -34,5 +34,5 @@ clients being logged out unexpectedly. Prosody-Version Status --------------- ---------------------- trunk Works as of 2025-05-25 - 0.13 Work + 13 Work 0.12 Does not work diff --git a/mod_sasl2_sm/README.md b/mod_sasl2_sm/README.md --- a/mod_sasl2_sm/README.md +++ b/mod_sasl2_sm/README.md @@ -18,5 +18,5 @@ configuration options. Prosody-Version Status --------------- ---------------------- trunk Works as of 2025-05-25 - 0.13 Work + 13 Work 0.12 Does not work diff --git a/mod_sasl_ssdp/README.md b/mod_sasl_ssdp/README.md --- a/mod_sasl_ssdp/README.md +++ b/mod_sasl_ssdp/README.md @@ -21,5 +21,5 @@ There are no configuration options for t Prosody-Version Status --------------- ---------------------- trunk Works as of 2025-05-25 - 0.13 Works + 13 Works 0.12 Does not work diff --git a/mod_vcard_muc/README.md b/mod_vcard_muc/README.md --- a/mod_vcard_muc/README.md +++ b/mod_vcard_muc/README.md @@ -23,7 +23,7 @@ modules_enabled = { # Compatibility ------------------------- ---------------------------------------- - 0.13 Room avatar feature included in Prosody + 13 Room avatar feature included in Prosody 0.12 Works ------------------------- ---------------------------------------- diff --git a/mod_warn_legacy_tls/README.md b/mod_warn_legacy_tls/README.md --- a/mod_warn_legacy_tls/README.md +++ b/mod_warn_legacy_tls/README.md @@ -44,5 +44,5 @@ legacy_tls_versions = { "TLSv1", "TLSv1. Prosody-Version Status --------------- --------------------- trunk Works as of 25-05-25 -0.13 Works +13 Works 0.12 Works
author Menel <menel@snikket.de>
date Wed, 14 May 2025 23:32:04 +0200
parents cb3de818ff55
children 2e87110475ec
line wrap: on
line source

module:set_global();

local sentry_lib = module:require "sentry";

local hostname;
local have_pposix, pposix = pcall(require, "util.pposix");
if have_pposix and pposix.uname then
	hostname = pposix.uname().nodename;
end

local loggingmanager = require "core.loggingmanager";
local errors = require "util.error";
local format = require "util.format".format;

local default_config = assert(module:get_option("sentry"), "Please provide a 'sentry' configuration option");
default_config.server_name = default_config.server_name or hostname or "prosody";

local sentry = assert(sentry_lib.new(default_config));

local log_filters = {
	source = function (filter_source, name)
		local source = name:match(":(.+)$") or name;
		if filter_source == source then
			return true;
		end
	end;
	message_pattern = function (pattern, _, _, message)
		return not not message:match(pattern);
	end;
};

local serialize = require "util.serialization".serialize;

local function sentry_error_handler(e)
	module:log("error", "Failed to submit event to sentry: %s", e);
end

local function sentry_log_sink_maker(sink_config)
	local filters = sink_config.ignore or {};
	local n_filters = #filters;

	local submitting;
	return function (name, level, message, ...)
		-- Ignore any log messages that occur during sentry submission
		-- to avoid loops
		if submitting then return; end
		for i = 1, n_filters do
			local filter = filters[i];
			local matched;
			for filter_name, filter_value in pairs(filter) do
				local f = log_filters[filter_name];
				if f and f(filter_value, name, level, message) then
					matched = true;
				else
					matched = nil;
					break;
				end
			end
			if matched then
				return;
			end
		end
		if level == "warn" then
			level = "warning";
		end

		local event = sentry:event(level, name):message(format(message, ...));

		local params = { ... };
		for i = 1, select("#", ...) do
			if errors.is_error(params[i]) then
				event:add_exception(params[i]);
			end
		end

		submitting = true;
		event:send():catch(sentry_error_handler);
		submitting = false;
	end;
end

loggingmanager.register_sink_type("sentry", sentry_log_sink_maker);

function new(conf) --luacheck: ignore 131/new
	conf = conf or {};
	for k, v in pairs(default_config) do
		if conf[k] == nil then
			conf[k] = v;
		end
	end
	return sentry_lib.new(conf);
end