コード例 #1
0
    def publish_updates(self, updates, driver_name, job_controller):
        if updates:
            try:
                if job_controller is True:
                    job = Job(driver_name, len(updates))
                    for update in updates:
                        update.update({
                            'driver_name': driver_name,
                            'jobid': job.uuid
                        })
                        self.rabbitmq.post_message(
                            GLOBOMAP_RMQ_EXCHANGE, GLOBOMAP_RMQ_KEY,
                            json.dumps(update, ensure_ascii=False), False)

                    job.save()
                    self.rabbitmq.confirm_publish()
                    return job.uuid
                else:
                    for update in updates:
                        update.update({'driver_name': driver_name})
                        self.rabbitmq.post_message(
                            GLOBOMAP_RMQ_EXCHANGE, GLOBOMAP_RMQ_KEY,
                            json.dumps(update, ensure_ascii=False), False)
                    self.rabbitmq.confirm_publish()
                    return None
            except:
                logger.exception('Error publishing to rabbitmq')
                self.rabbitmq.discard_publish()
                raise Exception('Failed to sendo updates to queue')
コード例 #2
0
    def test_update_job_success(self):
        job = Job('driver', 1).save()
        worker = DriverWorker(None, None, None)
        worker.update_job_success(job.uuid)

        job = Job.find_by_uuid(job.uuid)
        self.assertTrue(job.completed)
コード例 #3
0
    def test_update_job_error(self):
        job = Job('driver', 1).save()
        worker = DriverWorker(None, None, None)
        response_mock = Mock()
        response_mock.message = '{"message": "error"}'
        response_mock.status_code = 400
        worker.update_job_error(job.uuid, {}, response_mock)

        job = Job.find_by_uuid(job.uuid)
        self.assertTrue(job.completed)
        self.assertEquals(1, job.error_count)
コード例 #4
0
 def update_job_success(self, job_id):
     if job_id:
         job = Job.find_by_uuid(job_id, for_update=True)
         if job:
             job.increment_success_count()
             job.save()
         else:
             logger.error('Job with id %s not found', job_id)
コード例 #5
0
    def update_job_error(self, job_id, update, err):

        if job_id:
            job = Job.find_by_uuid(job_id, for_update=True)
            if job:
                err = JobError(json.dumps(update), err.message,
                               err.status_code)
                job.add_error(err)
                job.save()
            else:
                logger.error('Job with id %s not found', job_id)
コード例 #6
0
    def test_send_updates(self):
        rabbit_mock = self._mock_rabbitmq_client(True)
        updates = [open_json('tests/json/driver/driver_output_create.json')]
        response = self.app.post('/v1/updates',
                                 data=json.dumps(updates),
                                 headers={'Content-Type': 'application/json'})

        response_json = json.loads(response.data)
        self.assertEqual(202, response.status_code)
        self.assertEqual('Location', response.headers[2][0])
        self.assertEqual(
            'http://localhost/v1/updates/job/%s' % response_json['jobid'],
            response.headers[2][1])
        self.assertEqual('Updates published successfully',
                         response_json['message'])
        self.assertEqual(1, rabbit_mock.post_message.call_count)
        self.assertEqual(1, rabbit_mock.confirm_publish.call_count)
        self.assertIsNotNone(Job.find_by_uuid(response_json['jobid']))
コード例 #7
0
    def test_get_job(self):
        job = Job('driver_name', 1)
        job.add_error(JobError('{"a": "1"}', '{"a": "1"}', 400))
        job.save()

        response = self.app.get('/v1/updates/job/%s' % job.uuid,
                                headers={'Content-Type': 'application/json'})
        job_json = json.loads(response.data)

        self.assertEqual(200, response.status_code)
        self.assertEqual(job.uuid, job_json['uuid'])
        self.assertEqual('driver_name', job_json['driver'])
        self.assertEqual(0, job_json['successful_update_count'])
        self.assertEqual(1, job_json['error_update_count'])
        self.assertEqual(True, job_json['completed'])
        self.assertEqual(1, len(job_json['errors']))
コード例 #8
0
 def test_save_completed(self):
     job = Job('driver', 1)
     job.increment_success_count()
     job.save()
     self.assertTrue(job.completed)
     self.assertIsNotNone(Job.find_by_uuid(job.uuid))
コード例 #9
0
 def test_save(self):
     job = Job('driver', 1)
     job.save()
     self.assertFalse(job.completed)
     self.assertIsNotNone(Job.find_by_uuid(job.uuid))
コード例 #10
0
 def test_add_error(self):
     job = Job('driver', 1)
     job.add_error(JobError('', '', 200))
     self.assertEqual(1, job.error_count)
コード例 #11
0
 def test_not_completed(self):
     job = Job('driver', 1)
     self.assertFalse(job._is_completed())
コード例 #12
0
 def test_is_completed(self):
     job = Job('driver', 1)
     job.increment_success_count()
     self.assertTrue(job._is_completed())
コード例 #13
0
 def test_increment_success_count(self):
     job = Job('driver', 1)
     job.increment_success_count()
     self.assertEqual(1, job.success_count)