예제 #1
0
 /**
  * Setup executor properties and validate job
  *
  * @param SyrupJob $job
  */
 public final function build(SyrupJob $job)
 {
     $this->validateJob($job);
     $this->job = new Job();
     $this->job->build($job);
     $this->jobResult = new JobResult($this->job);
     $this->stopwatch->start(self::STOPWATCH_ORCHESTRATION_EVENT);
     //@TODO new feature - better handling with sapi errors - send errorNotification
     try {
         $this->token = new StorageApi\Token($this->storageApi);
     } catch (StorageApiException $e) {
         throw new UserException(sprintf("Invalid token for job %d", $this->job->getId()), $e);
     }
     $this->jobEsManager = $this->jobManagerFactory->createJobManager($this->token);
     $this->componentsList = new KbcComponentsList($this->storageApi);
     $orchestration = $this->orchestrationManager->findOrchestrationById($this->job->getOrchestrationId(), $this->token);
     if (!$orchestration) {
         throw new UserException(sprintf("Orchestration %s not found", $this->job->getOrchestrationId()));
     } else {
         $this->orchestration = $orchestration;
     }
     $this->orchestrationManager->updateLastExecutedJob($this->orchestration, $this->job);
     // validation for empty orchestrations
     $hasActiveTasks = false;
     if ($this->job->getTasks()) {
         foreach ($this->job->getTasks() as $task) {
             if (!empty($task->active)) {
                 $hasActiveTasks = true;
             }
         }
     }
     if ($hasActiveTasks === false) {
         throw new UserException(self::ERROR_NO_TASK);
     }
 }
예제 #2
0
 /**
  * Check if job is using task phases
  *
  * @param Job $job
  * @return bool
  */
 private function usePhases(Job $job)
 {
     $usePhases = false;
     if (is_array($job->getTasks())) {
         foreach ($job->getTasks() as $task) {
             if (!empty($task->phase)) {
                 $usePhases = true;
             }
         }
     }
     return $usePhases;
 }
예제 #3
0
 /**
  * @param Job $job
  * @param StorageApi\UniqueManager $uniqueGenerator
  * @return Elasticsearch\Job
  */
 private function buildEsJob(Job $job, StorageApi\UniqueManager $uniqueGenerator)
 {
     //@FIXME replace with jobfactory https://github.com/keboola/syrup/wiki/Upgrade
     $jobId = $uniqueGenerator->generateId();
     $runId = $uniqueGenerator->generateRunId($uniqueGenerator->getRunId());
     $job->setId($jobId);
     $job->setRunId($runId);
     return new Elasticsearch\Job($this->objectEncryptor, ['id' => $jobId, 'lockName' => KeboolaOrchestratorBundle::SYRUP_COMPONENT_NAME . '-' . $job->getProjectId() . '-' . $job->getOrchestrationId(), 'runId' => $runId, 'nestingLevel' => 0, 'project' => ['id' => $job->getProjectId(), 'name' => $job->getTokenOwnerName()], 'token' => ['id' => $job->getTokenId(), 'description' => $job->getTokenDesc(), 'token' => $this->encryptToken($job->getToken())], 'component' => KeboolaOrchestratorBundle::SYRUP_COMPONENT_NAME, 'command' => 'run', 'params' => array('config' => $job->getConfig(), 'orchestration' => array('id' => $job->getOrchestrationId(), 'name' => $job->getOrchestrationName()), 'initializedBy' => $job->getInitializedBy(), 'initiator' => array('id' => $job->getInitiatorTokenId(), 'description' => $job->getInitiatorTokenDesc(), 'userAgent' => $job->getInitiatorUserAgent()), 'notificationsEmails' => $job->getNotificationsEmails(), 'tasks' => $job->getTasks()), 'process' => ['host' => gethostname(), 'pid' => posix_getpid()], 'createdTime' => $job->getCreatedTime()->format('c')]);
 }
예제 #4
0
 /**
  * @param Job $job
  * @return Phase[]
  */
 private function createPhases(Job $job)
 {
     /** @var StorageApi\OrchestrationTask[] $orchestrationTasks */
     $orchestrationTasks = array();
     if ($job->getTasks()) {
         $orchestrationTasks = array_map(function ($line) {
             $task = new StorageApi\OrchestrationTask();
             $task->fromArray(json_decode(json_encode($line), true));
             return $task;
         }, $job->getTasks());
     }
     /**
      * @var Phase[] $phases
      */
     $phases = array();
     $prevPhase = false;
     foreach ($orchestrationTasks as $orchestrationTask) {
         if ($orchestrationTask->getPhase() !== $prevPhase || $orchestrationTask->getPhase() == null) {
             $phase = new Phase($job);
             $phases[count($phases)] = $phase;
             $this->jobResult->addPhase($phase);
         }
         $taskResult = new TaskResult($orchestrationTask);
         $this->jobResult->addTaskResult($taskResult);
         $phases[count($phases) - 1]->addTaskResult($taskResult);
         $prevPhase = $orchestrationTask->getPhase();
     }
     return $phases;
 }