def resolve_attempts(self, graphene_info, **kwargs): limit = kwargs.get('limit') results = get_schedule_attempt_filenames(graphene_info, self._schedule.name) if limit is None: limit = len(results) latest_results = heapq.nlargest(limit, results, key=os.path.getctime) attempts = [] for result_path in latest_results: with open(result_path, 'r') as f: line = f.readline() if not line: continue # File is empty start_scheduled_execution_response = json.loads(line) run = None if 'errors' in start_scheduled_execution_response: status = DauphinScheduleAttemptStatus.ERROR json_result = start_scheduled_execution_response['errors'] else: json_result = start_scheduled_execution_response['data'][ 'startScheduledExecution' ] typename = json_result['__typename'] if ( typename == 'StartPipelineExecutionSuccess' or typename == 'LaunchPipelineExecutionSuccess' ): status = DauphinScheduleAttemptStatus.SUCCESS run_id = json_result['run']['runId'] run = graphene_info.schema.type_named('PipelineRun')( graphene_info.context.instance.get_run_by_id(run_id) ) elif typename == 'ScheduleExecutionBlocked': status = DauphinScheduleAttemptStatus.SKIPPED else: status = DauphinScheduleAttemptStatus.ERROR attempts.append( graphene_info.schema.type_named('ScheduleAttempt')( time=os.path.getctime(result_path), json_result=json.dumps(json_result), status=status, run=run, ) ) return attempts
def resolve_attempts_count(self, graphene_info): attempt_files = get_schedule_attempt_filenames(graphene_info, self._schedule.name) return len(attempt_files)