Example #1
0
 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
Example #2
0
 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