Mercurial > prosody-modules
comparison mod_pubsub_alertmanager/mod_pubsub_alertmanager.lua @ 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 | adda872fa9e1 |
| children |
comparison
equal
deleted
inserted
replaced
| 5484:bb083e9f78dd | 5485:67190744b1eb |
|---|---|
| 27 return error_mapping[err] or 500; | 27 return error_mapping[err] or 500; |
| 28 end | 28 end |
| 29 return 202; | 29 return 202; |
| 30 end | 30 end |
| 31 | 31 |
| 32 local node_template = module:get_option_string("alertmanager_node_template", "{path?alerts}"); | 32 local global_node_template = module:get_option_string("alertmanager_node_template", "{path?alerts}"); |
| 33 local path_configs = module:get_option("alertmanager_path_configs", {}); | |
| 33 | 34 |
| 34 function handle_POST(event, path) | 35 function handle_POST(event, path) |
| 35 local request = event.request; | 36 local request = event.request; |
| 37 | |
| 38 local config = path_configs[path] or {}; | |
| 39 local node_template = config.node_template or global_node_template; | |
| 40 local publisher = config.publisher or request.ip; | |
| 36 | 41 |
| 37 local payload = json.decode(event.request.body); | 42 local payload = json.decode(event.request.body); |
| 38 if type(payload) ~= "table" then return 400; end | 43 if type(payload) ~= "table" then return 400; end |
| 39 if payload.version ~= "4" then return 501; end | 44 if payload.version ~= "4" then return 501; end |
| 40 | 45 |
| 53 if alert.generatorURL then | 58 if alert.generatorURL then |
| 54 item:tag("link", { href=alert.generatorURL }):up(); | 59 item:tag("link", { href=alert.generatorURL }):up(); |
| 55 end | 60 end |
| 56 | 61 |
| 57 local node = render(node_template, {alert = alert, path = path, payload = payload, request = request}); | 62 local node = render(node_template, {alert = alert, path = path, payload = payload, request = request}); |
| 58 local ret = publish_payload(node, request.ip, uuid_generate(), item); | 63 local ret = publish_payload(node, publisher, uuid_generate(), item); |
| 59 if ret ~= 202 then | 64 if ret ~= 202 then |
| 60 return ret | 65 return ret |
| 61 end | 66 end |
| 62 end | 67 end |
| 63 return 202; | 68 return 202; |
