Changeset

5485:67190744b1eb

mod_pubsub_alertmanager: Support for per-path config overrides
author Matthew Wild <mwild1@gmail.com>
date Tue, 23 May 2023 19:40:38 +0100
parents 5484:bb083e9f78dd
children 5486:71243bedb2b0
files mod_pubsub_alertmanager/README.md mod_pubsub_alertmanager/mod_pubsub_alertmanager.lua
diffstat 2 files changed, 25 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mod_pubsub_alertmanager/README.md	Thu May 18 21:11:13 2023 +0200
+++ b/mod_pubsub_alertmanager/README.md	Tue May 23 19:40:38 2023 +0100
@@ -93,3 +93,21 @@
 
 `alertmanager_node_template`
 :   Template for the pubsub node name, defaults to `"{path?alerts}"`
+
+`alertmanager_path_configs`
+:   Per-path configuration variables (see below).
+
+### Per-path configuration
+
+It's possible to override configuration options based on the path suffix. For
+example, if a request is made to `http://prosody/pubsub_alertmanager/foo` the
+path suffix is `foo`. You can then supply the following configuration:
+
+``` lua
+alertmanager_path_configs = {
+    foo = {
+        node_template = "alerts/{alert.labels.severity}";
+        publisher = "user@example.net";
+    };
+}
+```
--- a/mod_pubsub_alertmanager/mod_pubsub_alertmanager.lua	Thu May 18 21:11:13 2023 +0200
+++ b/mod_pubsub_alertmanager/mod_pubsub_alertmanager.lua	Tue May 23 19:40:38 2023 +0100
@@ -29,11 +29,16 @@
 	return 202;
 end
 
-local node_template = module:get_option_string("alertmanager_node_template", "{path?alerts}");
+local global_node_template = module:get_option_string("alertmanager_node_template", "{path?alerts}");
+local path_configs = module:get_option("alertmanager_path_configs", {});
 
 function handle_POST(event, path)
 	local request = event.request;
 
+	local config = path_configs[path] or {};
+	local node_template = config.node_template or global_node_template;
+	local publisher = config.publisher or request.ip;
+
 	local payload = json.decode(event.request.body);
 	if type(payload) ~= "table" then return 400; end
 	if payload.version ~= "4" then return 501; end
@@ -55,7 +60,7 @@
 		end
 
 		local node = render(node_template, {alert = alert, path = path, payload = payload, request = request});
-		local ret = publish_payload(node, request.ip, uuid_generate(), item);
+		local ret = publish_payload(node, publisher, uuid_generate(), item);
 		if ret ~= 202 then
 			return ret
 		end