コード例 #1
0
 /**
  * Given a 'type' of job, run the job.  This is for non-monitor jobs only.
  * @param $type
  * @param MessageLogger $messageLogger
  * @param $isJobInProgress
  * @throws FailedToSaveModelException
  */
 public static function runNonMonitorJob($type, MessageLogger $messageLogger, &$isJobInProgress)
 {
     assert('is_string($type) && $type != "Monitor"');
     assert('is_bool($isJobInProgress)');
     try {
         JobInProcess::getByType($type);
         $messageLogger->addInfoMessage("Existing job detected");
         $isJobInProgress = true;
     } catch (NotFoundException $e) {
         $jobInProcess = new JobInProcess();
         $jobInProcess->type = $type;
         $jobInProcess->save();
         $startDateTime = $jobInProcess->createdDateTime;
         $jobClassName = $type . 'Job';
         $job = new $jobClassName();
         $job->setMessageLogger($messageLogger);
         $ranSuccessfully = $job->run();
         $errorMessage = $job->getErrorMessage();
         $jobInProcess->delete();
         $jobLog = new JobLog();
         $jobLog->type = $type;
         $jobLog->startDateTime = $startDateTime;
         $jobLog->endDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
         if ($ranSuccessfully) {
             $messageLogger->addInfoMessage("Job completed successfully");
             $jobLog->status = JobLog::STATUS_COMPLETE_WITHOUT_ERROR;
         } else {
             $messageLogger->addInfoMessage("Job completed with errors");
             $jobLog->status = JobLog::STATUS_COMPLETE_WITH_ERROR;
             $jobLog->message = $errorMessage;
         }
         $jobLog->isProcessed = false;
         if (!$jobLog->save()) {
             throw new FailedToSaveModelException();
         }
         $stuckJob = StuckJob::getByType($type);
         $stuckJob->quantity = 0;
         if (!$stuckJob->save()) {
             throw new FailedToSaveModelException();
         }
     }
 }