diff --git a/argos/server/alerting.py b/argos/server/alerting.py index 6a71cf9..52723df 100644 --- a/argos/server/alerting.py +++ b/argos/server/alerting.py @@ -22,11 +22,19 @@ def handle_alert(config: Config, result, task, severity, request): result.status, severity) - if config.general.mail is not None or \ - config.general.gotify is not None: + if config.general.mail is not None and \ + 'mail' in getattr(config.general.alerts, severity): + notify_by_mail(result, task, severity, config.general.mail, request) - subject = f"{urlparse(task.url).netloc}: status {severity}" - msg = f"""\ + if config.general.gotify is not None and \ + 'gotify' in getattr(config.general.alerts, severity): + notify_with_gotify(result, task, severity, config.general.gotify, request) + + +def notify_by_mail(result, task, severity, config: Mail, request) -> None: + logger.debug('Will send mail notification') + + msg = f"""\ URL: {task.url} Check: {task.check} Status: {severity} @@ -35,18 +43,8 @@ Time: {result.submitted_at} See results of task on {request.url_for('get_task_results', task_id=task.id)} """ - if config.general.mail is not None and \ - 'mail' in getattr(config.general.alerts, severity): - notify_by_mail(subject, msg, config.general.mail) - if config.general.gotify is not None and \ - 'gotify' in getattr(config.general.alerts, severity): - notify_with_gotify(subject, msg, severity, config.general.gotify) - - -def notify_by_mail(subject: str, msg: str, config: Mail) -> None: - logger.debug('Will send mail notification') mail = f"""\ -Subject: [Argos] {subject} +Subject: [Argos] {urlparse(task.url).netloc}: status {severity} {msg}""" @@ -75,16 +73,29 @@ Subject: [Argos] {subject} smtp.sendmail(config.mailfrom, address, mail) -def notify_with_gotify(subject: str, msg: str, severity: str, config: List[GotifyUrl]) -> None: +def notify_with_gotify(result, task, severity: str, config: List[GotifyUrl], request) -> None: logger.debug('Will send gotify notification') headers = {'accept': 'application/json', 'content-type': 'application/json'} priority = 9 + icon = '❌' if severity == Severity.OK: priority = 1 + icon = '✅' elif severity == Severity.WARNING: priority = 5 + icon = '⚠️' + + subject = f"{icon} {urlparse(task.url).netloc}: status {severity}" + msg = f"""\ +URL: {task.url} +Check: {task.check} +Status: {severity} +Time: {result.submitted_at} + +See results of task on {request.url_for('get_task_results', task_id=task.id)} +""" payload = {'title': subject, 'message': msg, @@ -99,7 +110,7 @@ def notify_with_gotify(subject: str, msg: str, severity: str, config: List[Gotif headers=headers, json=payload) res.raise_for_status() - except httpx.RequestError as exc: + except httpx.RequestError as err: logger.error('An error occurred while sending a message to %s with token %s', - exc.request.url, + err.request.url, token) diff --git a/argos/server/routes/api.py b/argos/server/routes/api.py index d618616..d43e080 100644 --- a/argos/server/routes/api.py +++ b/argos/server/routes/api.py @@ -59,6 +59,7 @@ async def create_results( # Don’t create an alert if the severity has not changed if last_severity != severity: + # XXX Use a job queue or make it async handle_alert(config, result, task, severity, request) db_results.append(result) diff --git a/argos/server/templates/index.html b/argos/server/templates/index.html index 9d347ef..e1b41bf 100644 --- a/argos/server/templates/index.html +++ b/argos/server/templates/index.html @@ -12,7 +12,7 @@ {{ counts_dict['ok'] }}
-
⚠️ Warning
+
⚠️ Warning
{{ counts_dict['warning'] }}