Exemple #1
0
 /**
  * Maps the information of a row in the UwsJobs table to an object
  * @param array $row database row
  * @return array$jobUWS
  */
 private function _objectFromRow($row)
 {
     //create new job object
     $jobUWS = new Uws_Model_Resource_JobSummaryType("job");
     $jobUWS->jobId = $row['jobId'];
     $jobUWS->runId = $row['runId'];
     $jobUWS->ownerId = $row['ownerId'];
     $jobUWS->phase = $row['phase'];
     $jobUWS->quote = $row['quote'];
     if ($row['startTime'] !== "0000-00-00 00:00:00" && $row['startTime'] != NULL) {
         $datetime = new DateTime($row['startTime']);
         $jobUWS->startTime = $datetime->format('c');
     }
     if ($row['endTime'] !== "0000-00-00 00:00:00" && $row['endTime'] != NULL) {
         $datetime = new DateTime($row['endTime']);
         $jobUWS->endTime = $datetime->format('c');
     }
     $jobUWS->executionDuration = intval($row['executionDuration']);
     if ($row['destruction'] !== "0000-00-00 00:00:00" && $row['destruction'] != NULL) {
         $datetime = new DateTime($row['destruction']);
         $jobUWS->destruction = $datetime->format('c');
     }
     //parameters
     $params = Zend_Json::decode($row['parameters']);
     if ($params) {
         foreach ($params as $param) {
             $jobUWS->addParameter($param['id'], $param['value'], $param['byReference'], $param['isPost']);
         }
     }
     //results
     $results = Zend_Json::decode($row['results']);
     if ($results) {
         foreach ($results as $result) {
             $jobUWS->addResult($result['id'], $result['reference']['href']);
         }
     }
     //errorSummary
     $errors = Zend_Json::decode($row['errorSummary']);
     if ($errors) {
         foreach ($errors['messages'] as $error) {
             $jobUWS->addError($error);
         }
     }
     //jobInfo
     $jobUWS->jobInfo = $row['jobInfo'];
     return $jobUWS;
 }
Exemple #2
0
 public function getJob($requestParams)
 {
     // get the job id
     $id = $requestParams['wild0'];
     // set resource
     $this->setResource(Query_Model_Resource_AbstractQuery::factory());
     $resourceClass = get_class($this->getResource());
     // get the job
     $row = $this->getResource()->fetchRow($id);
     if (empty($row)) {
         throw new Daiquiri_Exception_NotFound();
     }
     if ($row['user_id'] !== Daiquiri_Auth::getInstance()->getCurrentId()) {
         throw new Daiquiri_Exception_Forbidden();
     }
     // fetch table statistics
     $stat = $this->getResource()->fetchTableStats($row['database'], $row['table']);
     $job = array_merge($row, $stat);
     // fill UWS object with information
     $jobUWS = new Uws_Model_Resource_JobSummaryType("job");
     $jobUWS->jobId = $job['id'];
     $jobUWS->ownerId = Daiquiri_Auth::getInstance()->getCurrentUsername();
     $jobUWS->phase = Query_Model_Uws::$status[Query_Model_Uws::$statusQueue[$job['status']]];
     // convert timestamps to ISO 8601
     if ($resourceClass == 'Query_Model_Resource_QQueueQuery') {
         if ($job['timeExecute'] !== "0000-00-00 00:00:00") {
             $datetimeStart = new DateTime($job['timeExecute']);
             $jobUWS->startTime = $datetimeStart->format('c');
         }
         if ($job['timeFinish'] !== "0000-00-00 00:00:00") {
             $datetimeEnd = new DateTime($job['timeFinish']);
             $jobUWS->endTime = $datetimeEnd->format('c');
         }
     } else {
         // for simple queue
         $datetime = new DateTime($job['time']);
         $jobUWS->startTime = $datetime->format('c');
         $jobUWS->endTime = $datetime->format('c');
     }
     // obtain queue information
     $queues = array();
     if ($resourceClass::$hasQueues === true) {
         $queues = $this->getResource()->fetchQueues();
         // find the queue
         foreach ($queues as $queue) {
             if ($queue['name'] === $job['queue']) {
                 $jobUWS->executionDuration = $queue['timeout'];
                 break;
             }
         }
     } else {
         // no queue information - execution infinite
         $jobUWS->executionDuration = 0;
     }
     // no destruction time supported, so return hillariously high number
     $datetime = new DateTime('31 Dec 2999');
     $jobUWS->destruction = $datetime->format('c');
     // fill the parameter part of the UWS with the original information stored in the queue
     foreach ($job as $key => $value) {
         // allowed parameters
         switch ($key) {
             case 'database':
             case 'table':
             case 'query':
             case 'actualQuery':
             case 'queue':
                 $jobUWS->addParameter($key, $value);
                 break;
             default:
                 break;
         }
     }
     // add link to results if needed
     if ($jobUWS->phase === "COMPLETED") {
         foreach (Daiquiri_Config::getInstance()->getQueryDownloadAdapter() as $adapter) {
             $id = $adapter['suffix'];
             $href = Daiquiri_Config::getInstance()->getSiteUrl() . '/query/download/stream/table/' . urlencode($job['table']) . '/format/' . $adapter['format'];
             $jobUWS->addResult($id, $href);
         }
     } else {
         if ($jobUWS->phase === "ERROR") {
             $jobUWS->addError($job['error']);
         }
     }
     return $jobUWS;
 }