| 669 | |
| 670 | |
| 671 | @notify_celery.task(bind=True, name="process-report-request") |
| 672 | def process_report_request(self, service_id: UUID, report_request_id: UUID): |
| 673 | report_request = dao_get_report_request_by_id(service_id=service_id, report_id=report_request_id) |
| 674 | |
| 675 | extra = { |
| 676 | "report_request_id": report_request_id, |
| 677 | "report_request_status": report_request.status, |
| 678 | "celery_task": self.name, |
| 679 | } |
| 680 | current_app.logger.info( |
| 681 | "Starting %(celery_task)s task for report request id %(report_request_id)s and " |
| 682 | "status %(report_request_status)s", |
| 683 | extra, |
| 684 | extra=extra, |
| 685 | ) |
| 686 | |
| 687 | if report_request.status != REPORT_REQUEST_PENDING: |
| 688 | return |
| 689 | |
| 690 | report_request.status = REPORT_REQUEST_IN_PROGRESS |
| 691 | dao_update_report_request(report_request) |
| 692 | |
| 693 | try: |
| 694 | ReportRequestProcessor(service_id=service_id, report_request_id=report_request_id).process() |
| 695 | report_request.status = REPORT_REQUEST_STORED |
| 696 | dao_update_report_request(report_request) |
| 697 | |
| 698 | current_app.logger.info( |
| 699 | "Report request %s succeeded", report_request_id, extra={"report_request_id": report_request_id} |
| 700 | ) |
| 701 | except Exception as e: |
| 702 | report_request.status = REPORT_REQUEST_FAILED |
| 703 | dao_update_report_request(report_request) |
| 704 | raise ProcessReportRequestException(f"Report request for id {report_request_id} failed") from e |