예제 #1
0
파일: execute.py 프로젝트: ws1993/superset
    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))
예제 #2
0
 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))
예제 #3
0
 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()