diff --git a/server/api/helpers/utils/send-notifications.js b/server/api/helpers/utils/send-notifications.js index 7cf474e3..77dd8f1c 100644 --- a/server/api/helpers/utils/send-notifications.js +++ b/server/api/helpers/utils/send-notifications.js @@ -25,11 +25,15 @@ module.exports = { }, async fn(inputs) { - return promisifyExecFile(`${sails.config.appPath}/.venv/bin/python3`, [ - `${sails.config.appPath}/utils/send_notifications.py`, - JSON.stringify(inputs.services), - inputs.title, - JSON.stringify(inputs.bodyByFormat), - ]); + try { + await promisifyExecFile(`${sails.config.appPath}/.venv/bin/python3`, [ + `${sails.config.appPath}/utils/send_notifications.py`, + JSON.stringify(inputs.services), + inputs.title, + JSON.stringify(inputs.bodyByFormat), + ]); + } catch (error) { + sails.log.error(`Error sending notifications: ${error.stderr || error.message}`); + } }, }; diff --git a/server/config/swagger.js b/server/config/swagger.js index d73a58bd..5c969021 100644 --- a/server/config/swagger.js +++ b/server/config/swagger.js @@ -1,8 +1,3 @@ -/*! - * Copyright (c) 2024 PLANKA Software GmbH - * Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md - */ - const version = require('../version'); module.exports = { diff --git a/server/utils/send_notifications.py b/server/utils/send_notifications.py index cf767662..c6d4d7a3 100644 --- a/server/utils/send_notifications.py +++ b/server/utils/send_notifications.py @@ -1,15 +1,29 @@ -# Copyright (c) 2024 PLANKA Software GmbH -# Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md - import sys import json +import logging import apprise +last_apprise_message = None +class CaptureWarningHandler(logging.Handler): + def emit(self, record): + global last_apprise_message + last_apprise_message = record.getMessage() + + +capture_warning_handler = CaptureWarningHandler() +capture_warning_handler.setLevel(logging.WARNING) + +apprise_logger = logging.getLogger('apprise') +apprise_logger.setLevel(logging.WARNING) +apprise_logger.propagate = False +apprise_logger.addHandler(capture_warning_handler) + + def send_notification(url, title, body, body_format): app = apprise.Apprise() app.add(url) - app.notify(title=title, body=body, body_format=body_format) + return app.notify(title=title, body=body, body_format=body_format) if __name__ == '__main__': @@ -22,4 +36,14 @@ if __name__ == '__main__': body_format = service['format'] body = body_by_format[body_format] - send_notification(url, title, body, body_format) + last_apprise_message = None + if not send_notification(url, title, body, body_format): + if last_apprise_message: + if last_apprise_message == 'There are no service(s) to notify': + sys.stderr.write('Unknown service URL') + else: + sys.stderr.write(last_apprise_message) + else: + sys.stderr.write('Unknown error') + + sys.exit(1)