def get_schedule(self, workflow): """Get workflow schedule data from the store. Args: workflow: The name of the workflow whose schedule should be retrieved. Returns: The workflow schedule or None if it was not found. """ name = Name(workflow=workflow) schedule_token_name = name.get_workflow_schedule_token_name() tokens = self._store.read_tokens(name_prefix=schedule_token_name) if tokens: for token in tokens: if token.name == schedule_token_name: schedule = pickle.loads(token.data) overrun_policy_help = OverrunPolicy.get_help( schedule.overrun_policy) return WorkflowScheduleData( next_run_time=schedule.next_run_time, recurrence_seconds=schedule.recurrence_seconds, overrun_policy=schedule.overrun_policy, overrun_policy_help=overrun_policy_help, workflow=schedule.workflow, parser_params=schedule.parser_params, emails=schedule.emails, max_running_instances=schedule.max_running_instances) return None
def format(self): result = copy.copy(self.__dict__) result['next_run_time'] = timestamp_to_str(self.next_run_time) result['overrun_policy'] = OverrunPolicy.to_string(self.overrun_policy) result['max_running_instances'] = str(self.max_running_instances) result['parser_params'] = str(self.parser_params) return result
def get_schedules(self): """Get all workflow schedules data from the store.""" tokens = self._store.read_tokens( name_prefix=Name.WORKFLOW_SCHEDULE_PREFIX) result = [] for token in tokens: schedule = pickle.loads(token.data) overrun_policy_help = ( OverrunPolicy.get_help(schedule.overrun_policy)) result.append(WorkflowScheduleData( next_run_time=schedule.next_run_time, recurrence_seconds=schedule.recurrence_seconds, overrun_policy=schedule.overrun_policy, overrun_policy_help=overrun_policy_help, workflow=schedule.workflow, parser_params=schedule.parser_params, emails=schedule.emails, max_running_instances=schedule.max_running_instances)) return result
def __str__(self): if self.next_run_time: next_run_time = timestamp_to_str(self.next_run_time) else: next_run_time = str(self.next_run_time) if self.recurrence_seconds: delta = datetime.timedelta(seconds=self.recurrence_seconds) recurrence = str(delta) else: recurrence = str(self.recurrence_seconds) if self.overrun_policy is not None: overrun_policy = OverrunPolicy.to_string(self.overrun_policy) else: overrun_policy = str(self.overrun_policy) return ('WorkflowSchedule(next_run_time=%s, recurrence=%s, ' 'overrun_policy=%s, parser_params=%s, workflow=%s, ' 'email=%s, max_running_instances=%s)' % (next_run_time, recurrence, overrun_policy, self.parser_params, self.workflow, self.emails, str(self.max_running_instances)))
def get_schedules(self): """Get all workflow schedules data from the store.""" tokens = self._store.read_tokens( name_prefix=Name.WORKFLOW_SCHEDULE_PREFIX) result = [] for token in tokens: schedule = pickle.loads(token.data) overrun_policy_help = (OverrunPolicy.get_help( schedule.overrun_policy)) result.append( WorkflowScheduleData( next_run_time=schedule.next_run_time, recurrence_seconds=schedule.recurrence_seconds, overrun_policy=schedule.overrun_policy, overrun_policy_help=overrun_policy_help, workflow=schedule.workflow, parser_params=schedule.parser_params, emails=schedule.emails, max_running_instances=schedule.max_running_instances)) return result
def get_schedule_token(self, workflow): schedule_config = self._repository.get_schedule(workflow) timestamp = schedule_to_timestamp(schedule_config.time, schedule_config.start_date) recurrence = recurrence_str_to_sec(schedule_config.recurrence) overrun_policy = OverrunPolicy.from_string( schedule_config.overrun_policy) schedule = WorkflowSchedule( next_run_time=timestamp, recurrence_seconds=recurrence, overrun_policy=overrun_policy, workflow=schedule_config.workflow, emails=schedule_config.emails, #TODO(mao): to make it flexible that allow users specify through UI max_running_instances=PinballConfig.DEFAULT_MAX_WORKFLOW_RUNNING_INSTANCES) schedule.advance_next_run_time() timestamp = schedule.next_run_time token_name = ( Name(workflow=schedule_config.workflow ).get_workflow_schedule_token_name()) return Token(name=token_name, owner='parser', expirationTime=timestamp, data=pickle.dumps(schedule))
def get_schedule_token(self, workflow): schedule_config = self._repository.get_schedule(workflow) timestamp = schedule_to_timestamp(schedule_config.time, schedule_config.start_date) recurrence = recurrence_str_to_sec(schedule_config.recurrence) overrun_policy = OverrunPolicy.from_string( schedule_config.overrun_policy) schedule = WorkflowSchedule( next_run_time=timestamp, recurrence_seconds=recurrence, overrun_policy=overrun_policy, workflow=schedule_config.workflow, emails=schedule_config.emails, #TODO(mao): to make it flexible that allow users specify through UI max_running_instances=PinballConfig. DEFAULT_MAX_WORKFLOW_RUNNING_INSTANCES) schedule.advance_next_run_time() timestamp = schedule.next_run_time token_name = (Name(workflow=schedule_config.workflow). get_workflow_schedule_token_name()) return Token(name=token_name, owner='parser', expirationTime=timestamp, data=pickle.dumps(schedule))