Example #1
0
 def process_results(self, ch, method, properties, taskrecord):
     '''
     Processing results received from workers and end points
     '''
     self.log.info(
         'Received task results for job {0}'.format(
             properties.correlation_id))
     # Check if task is registered to this dispatcher
     if self._retreive_job(properties.correlation_id) is not None:
         # Re-Register the job with the dispatcher
         jobrecord = self._retreive_job(properties.correlation_id)
         job = Job().load(jobrecord)
         self.log.info('Found job in DB: {0}'.format(job.state.id))
         self.log.info('Task results: {0}'.format(taskrecord))
         # Turn the taskrecord into a project Task instance
         updated_task = Task().load(taskrecord)            
         # Update the job with the new task results
         job.update_tasks(updated_task, force=True)
         self._start_next_task(job)
     elif properties.correlation_id == 'update_task':
         self.log.info('Task results: {0}'.format(taskrecord))
         # Turn the taskrecord into a project Task instance
         updated_task = Task().load(taskrecord)
         number_of_updated_tasks = 0
         jobid = self._retreive_jobid(updated_task.state.id)
         jobrecord = self._retreive_job(jobid)
         if jobrecord is not None:
             job = Job().load(jobrecord)
             self.log.info('Found in DB job: {0}'.format(job.state.id))
             for task in job.state.tasks:
                 if updated_task.state.id == task.state.id:
                     job.update_tasks(updated_task)
                     number_of_updated_tasks += 1
                     self._start_next_task(job)
             if number_of_updated_tasks == 0:
                 self.log.warn('Task with id {0} not found in its parent job (possible?)'.format(
                               updated_task.state.id))
         else:
             self.log.warn('No parent job found for Task with id {0}'.format(
                                   updated_task.state.id))
     else:
         self.log.warn('No job found for job ID: {0}'.format(properties.correlation_id))