def next(self) -> None: if self._report_schedule.type == ReportScheduleType.ALERT: if self.is_in_grace_period(): self.set_state_and_log( ReportState.GRACE, error_message=str(ReportScheduleAlertGracePeriodError()), ) return self.set_state_and_log(ReportState.WORKING) try: if not AlertCommand(self._report_schedule).run(): self.set_state_and_log(ReportState.NOOP) return except CommandException as ex: self.send_error( f"Error occurred for {self._report_schedule.type}:" f" {self._report_schedule.name}", str(ex), ) self.set_state_and_log( ReportState.ERROR, error_message=REPORT_SCHEDULE_ERROR_NOTIFICATION_MARKER, ) raise ex try: self.send() self.set_state_and_log(ReportState.SUCCESS) except CommandException as ex: self.set_state_and_log(ReportState.ERROR, error_message=str(ex))
def next(self) -> None: self.set_state_and_log(ReportState.WORKING) if self._report_schedule.type == ReportScheduleType.ALERT: if self.is_in_grace_period(): self.set_state_and_log( ReportState.GRACE, error_message=str(ReportScheduleAlertGracePeriodError()), ) return self.set_state_and_log( ReportState.NOOP, error_message=str(ReportScheduleAlertEndGracePeriodError()), ) return try: self.send() self.set_state_and_log(ReportState.SUCCESS) except CommandException as ex: self.set_state_and_log(ReportState.ERROR, error_message=str(ex))
def validate( # pylint: disable=arguments-differ self, session: Session = None ) -> None: # Validate/populate model exists self._model = ReportScheduleDAO.find_by_id(self._model_id, session=session) if not self._model: raise ReportScheduleNotFoundError() # Avoid overlap processing if self._model.last_state == ReportLogState.WORKING: raise ReportSchedulePreviousWorkingError() # Check grace period if self._model.type == ReportScheduleType.ALERT: last_success = ReportScheduleDAO.find_last_success_log(session) if ( last_success and self._model.last_state in (ReportLogState.SUCCESS, ReportLogState.NOOP) and self._model.grace_period and datetime.utcnow() - timedelta(seconds=self._model.grace_period) < last_success.end_dttm ): raise ReportScheduleAlertGracePeriodError()