/** * 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; }
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; }