Exemplo n.º 1
0
    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
Exemplo n.º 2
0
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))
Exemplo n.º 3
0
    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))
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
 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