def test_create_ttl(self): data = {'content': job_spec_parsed_content.raw_data, 'ttl': 10} resp = self.auth_client.post(self.url, data) assert resp.status_code == status.HTTP_201_CREATED job = Job.objects.last() assert RedisTTL.get_for_job(job.id) == 10 data = {'content': job_spec_parsed_content.raw_data, 'ttl': 'foo'} resp = self.auth_client.post(self.url, data) assert resp.status_code == status.HTTP_400_BAD_REQUEST
def job_status_post_save(sender, **kwargs): instance = kwargs['instance'] job = instance.job previous_status = job.last_status # Update job last_status job.status = instance set_job_started_at(instance=job, status=instance.status) set_job_finished_at(instance=job, status=instance.status) job.save(update_fields=['status']) auditor.record(event_type=JOB_NEW_STATUS, instance=job, previous_status=previous_status) if instance.status == JobLifeCycle.STOPPED: auditor.record(event_type=JOB_STOPPED, instance=job, previous_status=previous_status) if instance.status == JobLifeCycle.FAILED: auditor.record(event_type=JOB_FAILED, instance=job, previous_status=previous_status) if instance.status == JobLifeCycle.SUCCEEDED: auditor.record(event_type=JOB_SUCCEEDED, instance=job, previous_status=previous_status) if JobLifeCycle.is_done(instance.status): auditor.record(event_type=JOB_DONE, instance=job, previous_status=previous_status) # Check if we need to schedule a job stop if not job.specification: return if instance.status in (JobLifeCycle.FAILED, JobLifeCycle.SUCCEEDED): _logger.debug('The build job `%s` failed or is done, ' 'send signal to stop.', job.unique_name) # Schedule stop for this job because celery_app.send_task( SchedulerCeleryTasks.JOBS_STOP, kwargs={ 'project_name': job.project.unique_name, 'project_uuid': job.project.uuid.hex, 'job_name': job.unique_name, 'job_uuid': job.uuid.hex, 'update_status': False, 'collect_logs': True, }, countdown=RedisTTL.get_for_job(job_id=job.id))
def _handle_job_post_run(cls, event: 'Event') -> None: instance = event.instance if not instance or not instance.has_specification: return celery_app.send_task( SchedulerCeleryTasks.JOBS_STOP, kwargs={ 'project_name': instance.project.unique_name, 'project_uuid': instance.project.uuid.hex, 'job_name': instance.unique_name, 'job_uuid': instance.uuid.hex, 'update_status': False, 'collect_logs': True, }, countdown=RedisTTL.get_for_job(job_id=instance.id))
def test_set_for_job(self): RedisTTL.set_for_job(job_id=1, value=10) assert RedisTTL.get_for_job(job_id=1) == 10 assert RedisTTL.get_for_job(job_id=2) == conf.get('GLOBAL_COUNTDOWN') assert RedisTTL(job=10).get_value() is None
def test_set_for_job(self): RedisTTL.set_for_job(job_id=1, value=10) assert RedisTTL.get_for_job(job_id=1) == 10 assert RedisTTL.get_for_job(job_id=2) == 2 assert RedisTTL(job=10).get_value() is None