def test_create_ttl(self): data = {'config': build_spec_parsed_content.parsed_data, 'ttl': 10} resp = self.auth_client.post(self.url, data) assert resp.status_code == status.HTTP_201_CREATED job = BuildJob.objects.last() assert RedisTTL.get_for_build(job.id) == 10 data = {'config': build_spec_parsed_content.parsed_data, 'ttl': 'foo'} resp = self.auth_client.post(self.url, data) assert resp.status_code == status.HTTP_400_BAD_REQUEST
def build_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', 'started_at', 'finished_at']) auditor.record(event_type=BUILD_JOB_NEW_STATUS, instance=job, previous_status=previous_status) if instance.status == JobLifeCycle.STOPPED: auditor.record(event_type=BUILD_JOB_STOPPED, instance=job, previous_status=previous_status) if instance.status == JobLifeCycle.FAILED: auditor.record(event_type=BUILD_JOB_FAILED, instance=job, previous_status=previous_status) if instance.status == JobLifeCycle.SUCCEEDED: auditor.record(event_type=BUILD_JOB_SUCCEEDED, instance=job, previous_status=previous_status) # Check if we need to schedule a job stop if instance.status in (JobLifeCycle.FAILED, JobLifeCycle.SUCCEEDED): _logger.info( 'The build job `%s` failed or is done, ' 'send signal to stop.', job.unique_name) # Schedule stop for this job celery_app.send_task(SchedulerCeleryTasks.BUILD_JOBS_STOP, kwargs={ 'project_name': job.project.unique_name, 'project_uuid': job.project.uuid.hex, 'build_job_name': job.unique_name, 'build_job_uuid': job.uuid.hex, 'update_status': False, 'collect_logs': True, }, countdown=RedisTTL.get_for_build(build_id=job.id)) # handle done status if JobLifeCycle.is_done(instance.status): auditor.record(event_type=BUILD_JOB_DONE, instance=job, previous_status=previous_status) celery_app.send_task(SchedulerCeleryTasks.BUILD_JOBS_NOTIFY_DONE, kwargs={'build_job_id': job.id})
def _handle_build_job_post_run(cls, event: 'Event') -> None: instance = event.instance if not instance or not instance.has_specification: return celery_app.send_task( SchedulerCeleryTasks.BUILD_JOBS_STOP, kwargs={ 'project_name': instance.project.unique_name, 'project_uuid': instance.project.uuid.hex, 'build_job_name': instance.unique_name, 'build_job_uuid': instance.uuid.hex, 'update_status': False, 'collect_logs': True, }, countdown=RedisTTL.get_for_build(build_id=instance.id))
def test_set_for_build(self): RedisTTL.set_for_build(build_id=1, value=10) assert RedisTTL.get_for_build(build_id=1) == 10 assert RedisTTL.get_for_build( build_id=2) == conf.get('GLOBAL_COUNTDOWN') assert RedisTTL(build=10).get_value() is None
def test_set_for_build(self): RedisTTL.set_for_build(build_id=1, value=10) assert RedisTTL.get_for_build(build_id=1) == 10 assert RedisTTL.get_for_build(build_id=2) == 2 assert RedisTTL(build=10).get_value() is None