Loading portal/async_celery/periodic_tasks.py +11 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,11 @@ def setup_periodic_tasks(sender, **kwargs): delete_cancelled_submissions.s(), name="Delete all cancelled tasks after one day") sender.add_periodic_task(24 * 60 * 60, archive_submissions_in_arch_project.s(), name="Archive all submissions in archived project") @celery_app.task def abort_non_proc_submissions(**kwargs): Loading @@ -28,3 +33,9 @@ def abort_non_proc_submissions(**kwargs): def delete_cancelled_submissions(): subm_service = RestService().submissions subm_service.delete_cancelled_submissions() @celery_app.task def archive_submissions_in_arch_project(): subm_service = RestService().submissions subm_service.archive_submissions() portal/database/models.py +4 −0 Original line number Diff line number Diff line Loading @@ -486,6 +486,10 @@ class Project(db.Model, EntityBase, NamedMixin): return ProjectState.ARCHIVED return ProjectState.INACTIVE @hybrid_property def is_archived(self) -> bool: return self.state() == ProjectState.ARCHIVED def set_config(self, **kwargs): """Sets project configuration Keyword Args: Loading portal/service/submissions.py +22 −2 Original line number Diff line number Diff line Loading @@ -258,11 +258,31 @@ class SubmissionsService(GeneralService): def delete_cancelled_submissions(self): one_day = datetime.timedelta(hours=24) one_day_ago = datetime.datetime.now() - one_day query_filter = Submission.query.filter(Submission.state == SubmissionState.CANCELLED & query_filter = Submission.query.filter( Submission.state.in_(SubmissionState.CANCELLED, SubmissionState.ABORTED) & Submission.created_at > one_day_ago) for subm in query_filter.all(): SubmissionsService(subm).delete() def archive_submissions(self): query_filter = Submission.query.join(Submission.project).filter( Submission.state == SubmissionState.FINISHED & Project.is_archived) for subm in query_filter.all(): SubmissionsService(subm).archive() def archive(self): log.info(f"[ARCHIVE] Submission archive submission files: {self.submission.log_name}") st_entity = storage.submissions.get(self.submission.id) if st_entity: st_entity.clean() log.info(f"[ARCHIVE] Submission archive result files: {self.submission.log_name}") st_entity = storage.results.get(self.submission.id) if st_entity: st_entity.clean() def nonempty_intersection(provided: list, required: list): if not required: Loading Loading
portal/async_celery/periodic_tasks.py +11 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,11 @@ def setup_periodic_tasks(sender, **kwargs): delete_cancelled_submissions.s(), name="Delete all cancelled tasks after one day") sender.add_periodic_task(24 * 60 * 60, archive_submissions_in_arch_project.s(), name="Archive all submissions in archived project") @celery_app.task def abort_non_proc_submissions(**kwargs): Loading @@ -28,3 +33,9 @@ def abort_non_proc_submissions(**kwargs): def delete_cancelled_submissions(): subm_service = RestService().submissions subm_service.delete_cancelled_submissions() @celery_app.task def archive_submissions_in_arch_project(): subm_service = RestService().submissions subm_service.archive_submissions()
portal/database/models.py +4 −0 Original line number Diff line number Diff line Loading @@ -486,6 +486,10 @@ class Project(db.Model, EntityBase, NamedMixin): return ProjectState.ARCHIVED return ProjectState.INACTIVE @hybrid_property def is_archived(self) -> bool: return self.state() == ProjectState.ARCHIVED def set_config(self, **kwargs): """Sets project configuration Keyword Args: Loading
portal/service/submissions.py +22 −2 Original line number Diff line number Diff line Loading @@ -258,11 +258,31 @@ class SubmissionsService(GeneralService): def delete_cancelled_submissions(self): one_day = datetime.timedelta(hours=24) one_day_ago = datetime.datetime.now() - one_day query_filter = Submission.query.filter(Submission.state == SubmissionState.CANCELLED & query_filter = Submission.query.filter( Submission.state.in_(SubmissionState.CANCELLED, SubmissionState.ABORTED) & Submission.created_at > one_day_ago) for subm in query_filter.all(): SubmissionsService(subm).delete() def archive_submissions(self): query_filter = Submission.query.join(Submission.project).filter( Submission.state == SubmissionState.FINISHED & Project.is_archived) for subm in query_filter.all(): SubmissionsService(subm).archive() def archive(self): log.info(f"[ARCHIVE] Submission archive submission files: {self.submission.log_name}") st_entity = storage.submissions.get(self.submission.id) if st_entity: st_entity.clean() log.info(f"[ARCHIVE] Submission archive result files: {self.submission.log_name}") st_entity = storage.results.get(self.submission.id) if st_entity: st_entity.clean() def nonempty_intersection(provided: list, required: list): if not required: Loading