def __get_job_status(cls, id, job_type): namespace = cls.__generate_job_namespace() res = BaseJob().fetch(cls.__generate_job_name(id, job_type), namespace) if res['is_succeeded']: content = res['content'] status = cls.__get_status_from_k8s_response(content) return status, content.start_time, content.completion_time else: return None, None, None
def list_jobs(cls, project_id, sort_key, is_reverse=False, per_page=PER_PAGE, page=1, search_keyword=""): validation_check(per_page, page) begin = per_page * (page - 1) try: if is_reverse is False: jobs = Job.objects.order_by(sort_key).filter( Q(project_id=project_id), Q(job_type__contains=search_keyword) | Q(job_config__contains=search_keyword) )[begin:begin + per_page] else: jobs = Job.objects.order_by(sort_key).reverse().filter( Q(project_id=project_id), Q(job_type__contains=search_keyword) | Q(job_config__contains=search_keyword) )[begin:begin + per_page] except FieldError: jobs = Job.objects.order_by("id").filter( Q(project_id=project_id), Q(job_type__contains=search_keyword) | Q(job_config__contains=search_keyword) )[begin:begin + per_page] records = [] for job in jobs: record = {} record['id'] = job.id record['job_type'] = job.job_type if job.status not in [STATUS_MAP['succeeded'], STATUS_MAP['failed']]: status, start_time, completion_time = cls.__get_job_status(job.id, job.job_type) if job.status != STATUS_MAP['unknown'] and status == STATUS_MAP['unknown']: job.unknown_started_at = datetime.now(timezone.utc) job.status = status job.started_at = start_time job.completed_at = completion_time if job.status == STATUS_MAP['unknown'] and cls.__is_unknown_time_limit(job.unknown_started_at): job.status = STATUS_MAP['failed'] if job.status == STATUS_MAP['failed']: namespace = cls.__generate_job_namespace() pod_log = BaseJob().logs(cls.__generate_job_name(job.id, job.job_type), namespace) job.pod_log = pod_log job.save() record['status'] = job.status record['started_at'] = str(job.started_at) if job.started_at else '' record['completed_at'] = str(job.completed_at) if job.completed_at else '' record['registered_at'] = str(job.registered_at) record['description'] = cls.get_job_description(job.job_type, job.job_config) record['pod_log'] = job.pod_log record['user_id'] = job.user_id records.append(record) contents = {} contents['count'] = cls.job_total_count(project_id) contents['records'] = records return contents