From dea5f9971f3c43efdfc2b6dc652e3958b8d80802 Mon Sep 17 00:00:00 2001 From: Jake Rosenberg Date: Mon, 23 Sep 2024 15:44:01 -0500 Subject: [PATCH] alert dev team when pipeline encounters permission errors --- .../operations/project_email_operations.py | 36 +++++++++++++++++++ .../operations/project_publish_operations.py | 8 +++++ 2 files changed, 44 insertions(+) create mode 100644 designsafe/apps/api/projects_v2/operations/project_email_operations.py diff --git a/designsafe/apps/api/projects_v2/operations/project_email_operations.py b/designsafe/apps/api/projects_v2/operations/project_email_operations.py new file mode 100644 index 000000000..742012270 --- /dev/null +++ b/designsafe/apps/api/projects_v2/operations/project_email_operations.py @@ -0,0 +1,36 @@ +"""Utilities to email users/staff in response to project lifecycle changes.""" + +from typing import Optional +from django.conf import settings +from django.core.mail import send_mail + + +def send_project_permissions_alert(project_id: str, version: Optional[int], error: str): + """ + Alert dev team when a project has encountered a permission error during publication. + """ + prj_admins = settings.DEV_PROJECT_ADMINS_EMAIL + for admin in prj_admins: + email_body = f""" +

Hello,

+

+ The following project has encountered a permission error during publication: +
+ {project_id} - revision {version} +
+

+

+ The error is as follows:
+ {error} +

+ + This is a programmatically generated message. Do NOT reply to this message. + """ + + send_mail( + "DesignSafe Alert: Published Project has missing files/folders", + email_body, + settings.DEFAULT_FROM_EMAIL, + [admin], + html_message=email_body, + ) diff --git a/designsafe/apps/api/projects_v2/operations/project_publish_operations.py b/designsafe/apps/api/projects_v2/operations/project_publish_operations.py index ea001db0c..26f4b9c25 100644 --- a/designsafe/apps/api/projects_v2/operations/project_publish_operations.py +++ b/designsafe/apps/api/projects_v2/operations/project_publish_operations.py @@ -25,6 +25,9 @@ from designsafe.apps.api.projects_v2.operations.project_archive_operations import ( archive_publication_async, ) +from designsafe.apps.api.projects_v2.operations.project_email_operations import ( + send_project_permissions_alert, +) from designsafe.apps.api.publications_v2.models import Publication from designsafe.apps.api.publications_v2.elasticsearch import index_publication from designsafe.apps.data.tasks import agave_indexer @@ -420,6 +423,11 @@ def copy_publication_files( }, queue="indexing", ) + + except PermissionError as exc: + logger.error(exc) + send_project_permissions_alert(project_id, version, str(exc)) + finally: os.chmod("/corral-repl/tacc/NHERI/published", 0o555)