Esempio n. 1
0
    def save_job_info(self, role, party_id, job_info, create=False):
        with DB.connection_context():
            schedule_logger(self.job_id).info('save {} {} job: {}'.format(
                role, party_id, job_info))
            jobs = Job.select().where(Job.f_job_id == self.job_id,
                                      Job.f_role == role,
                                      Job.f_party_id == party_id)
            is_insert = True
            if jobs:
                job = jobs[0]
                is_insert = False
                if job.f_status == JobStatus.TIMEOUT:
                    return None
            elif create:
                job = Job()
                job.f_create_time = current_timestamp()
            else:
                return None
            job.f_job_id = self.job_id
            job.f_role = role
            job.f_party_id = party_id
            if 'f_status' in job_info:
                if job.f_status in [JobStatus.COMPLETE, JobStatus.FAILED]:
                    # Termination status cannot be updated
                    # TODO:
                    return
                if (job_info['f_status'] in [
                        JobStatus.FAILED, JobStatus.TIMEOUT
                ]) and (not job.f_end_time):
                    if not job.f_start_time:
                        return
                    job_info['f_end_time'] = current_timestamp()
                    job_info['f_elapsed'] = job_info[
                        'f_end_time'] - job.f_start_time
                    job_info['f_update_time'] = current_timestamp()

                if (job_info['f_status'] in [
                        JobStatus.FAILED, JobStatus.TIMEOUT,
                        JobStatus.CANCELED, JobStatus.COMPLETE
                ]):
                    job_info['f_tag'] = 'job_end'
            update_fields = []
            for k, v in job_info.items():
                try:
                    if k in ['f_job_id', 'f_role', 'f_party_id'
                             ] or v == getattr(Job, k).default:
                        continue
                    setattr(job, k, v)
                    update_fields.append(getattr(Job, k))
                except:
                    pass

            if is_insert:
                job.save(force_insert=True)
            else:
                job.save(only=update_fields)
Esempio n. 2
0
    def save_job_info(self, role, party_id, job_info, create=False):
        with DB.connection_context():
            stat_logger.info('save {} {} job: {}'.format(
                role, party_id, job_info))
            jobs = Job.select().where(Job.f_job_id == self.job_id,
                                      Job.f_role == role,
                                      Job.f_party_id == party_id)
            is_insert = True
            if jobs:
                job = jobs[0]
                is_insert = False
                if job.f_status == JobStatus.TIMEOUT:
                    return None
            elif create:
                job = Job()
                job.f_create_time = current_timestamp()
            else:
                return None
            job.f_job_id = self.job_id
            job.f_role = role
            job.f_party_id = party_id
            if 'f_status' in job_info:
                if job.f_status in [JobStatus.COMPLETE, JobStatus.FAILED]:
                    # Termination status cannot be updated
                    # TODO:
                    pass
                if job_info[
                        'f_status'] == JobStatus.FAILED and not job.f_end_time:
                    job.f_end_time = current_timestamp()
                    job.f_elapsed = job.f_end_time - job.f_start_time
                    job.f_update_time = current_timestamp()
            for k, v in job_info.items():
                try:
                    if k in ['f_job_id', 'f_role', 'f_party_id'
                             ] or v == getattr(Job, k).default:
                        continue
                    setattr(job, k, v)
                except:
                    pass

            if is_insert:
                job.save(force_insert=True)
            else:
                job.save()
Esempio n. 3
0
 def save_job_info(self, role, party_id, job_info, create=False):
     with DB.connection_context():
         stat_logger.info('save {} {} job: {}'.format(
             role, party_id, job_info))
         jobs = Job.select().where(Job.f_job_id == self.job_id,
                                   Job.f_role == role,
                                   Job.f_party_id == party_id)
         is_insert = True
         if jobs:
             job = jobs[0]
             is_insert = False
         elif create:
             job = Job()
             job.f_create_time = current_timestamp()
         else:
             return None
         job.f_job_id = self.job_id
         job.f_role = role
         job.f_party_id = party_id
         if 'f_status' in job_info:
             if job.f_status in [
                     JobStatus.SUCCESS, JobStatus.FAILED, JobStatus.PARTIAL,
                     JobStatus.DELETED
             ]:
                 # Termination status cannot be updated
                 # TODO:
                 pass
         for k, v in job_info.items():
             if k in ['f_job_id', 'f_role', 'f_party_id'] or v == getattr(
                     Job, k).default:
                 continue
             setattr(job, k, v)
         if is_insert:
             job.save(force_insert=True)
         else:
             job.save()