/** * Deletes a task from the queue. * @param string uuid * @param boolean force - if true will bypass in progress check and delete task. (default false) * @return boolean success */ public static function remove($id = null, $force = false) { self::loadQueuetask(); $retval = self::$QueueTask->remove($id, $force); QueueUtil::clearCache(); return $retval; }
/** * Testing getting a configuration option. * @param key to search for * @return mixed result of configuration key. * @access public */ static function getConfig($key) { if (isset(self::$configs[$key])) { return self::$configs[$key]; } //try configure setting if (self::$configs[$key] = Configure::read("Queue.{$key}")) { return self::$configs[$key]; } //try load configuration file and try again. Configure::load('queue'); self::$configs = Configure::read('Queue'); if (self::$configs[$key] = Configure::read("Queue.{$key}")) { return self::$configs[$key]; } return null; }
/** * Set and error and return false * @param string message * @return false * @access private */ public function __errorAndExit($message) { $this->errors[$this->id][] = $message; QueueUtil::writeLog('Error: ' . $message); return false; }
/** * Script to send notification emails */ require_once DRUPAL_ROOT . '/includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); //_drush_bootstrap_drupal_full(); try { $completedJobRequests = QueueUtil::getPendingEmailsInfo(); LogHelper::log_debug($completedJobRequests); } catch (Exception $claimException) { LogHelper::log_debug("{$logId}: Error while fetching job from queue: " . $claimException); return; } foreach ($completedJobRequests as $request) { LogHelper::log_info($request); try { global $conf; $dir = variable_get('file_public_path', 'sites/default/files') . '/' . $conf['check_book']['data_feeds']['output_file_dir']; $file = $dir . '/' . $request['filename']; $params = array("download_url" => $file, "download_url_compressed" => $file . '.zip', "expiration_date" => date('d-M-Y', $request['end_time'] + 3600 * 24 * 7), "contact_email" => $request['contact_email'], "tracking_num" => $request['token']); LogHelper::log_debug($params); $response = drupal_mail('checkbook_datafeeds', "download_notification", $request['contact_email'], null, $params); LogHelper::log_debug($response); if ($response['result']) { QueueUtil::updateJobRequestEmailStatus($request['rid']); } } catch (Exception $claimException) { LogHelper::log_debug("Error while Sending Email Notification: " . $claimException . $params); return; } }
/** * Reschedule a task based on reschedule * @param string uuid * @return boolean success */ private function __reschedule($id = null) { if ($id) { $this->id = $id; } if (!$this->exists()) { return $this->__errorAndExit("QueueTask {$this->id} not found."); } QueueUtil::writeLog('Rescheduling ' . $this->id . ' to '); }
/** * For records under 200,000, user will download the file immediately. * An entry will be made in both the custom_queue_job & custom_queue_request. * * @return string * @throws Exception */ function queueImmediateRequest() { try { // validateRequest: if (!$this->validateRequest()) { return $this->response; } if (!isset($this->requestDataSet)) { // Prepare dataSet: $this->setRequestDataSet(); } $queue_request_token = NULL; // Get queue request: $queue_criteria = $this->getQueueCriteria($this->requestSearchCriteria->getCriteria()); $sql_query = get_db_query(TRUE, $this->requestDataSet->name, $this->requestDataSet->columns, $this->requestDataSet->parameters, $this->requestDataSet->sortColumn, $this->requestDataSet->startWith, $this->requestDataSet->limit, NULL); if (isset($this->requestDataSet->adjustSql)) { eval($this->requestDataSet->adjustSql); } $token = $this->generateToken(); $criteria = $this->requestSearchCriteria->getCriteria(); // Prepare new queue request: $queue_request['token'] = $token; $queue_request['name'] = strtolower($criteria['global']['type_of_data']); $queue_request['request'] = $queue_criteria; $queue_request['request_criteria'] = json_encode($criteria); $queue_request['status'] = 4; // N/A - no file to generate if ($this->requestSearchCriteria->getUserCriteria()) { $queue_request['user_criteria'] = json_encode($this->requestSearchCriteria->getUserCriteria()); } $queue_request['data_command'] = $sql_query; QueueUtil::createImmediateNewQueueRequest($queue_request); return $token; } catch (Exception $e) { LogHelper::log_error('Error Processing Queue Request: ' . $e); throw new Exception('Error Processing Queue Request.'); } }
/** * Function to track queue request details. * * @static * * @param string $token * Track token * * @return array|null * Request Details */ static function getRequestDetailsByToken($token) { global $conf; if (empty($token)) { return NULL; } $job_details = QueueUtil::getRequestDetailsByToken($token); if (isset($job_details['file_name'])) { $dir = variable_get('file_public_path', 'sites/default/files') . '/' . $conf['check_book']['data_feeds']['output_file_dir']; $file = $dir . '/' . $job_details['file_name']; if (is_file($file)) { $job_details['file_path'] = $file; } if (is_file($file . '.zip')) { $job_details['compressed_file_path'] = $file . '.zip'; } } return $job_details; }
} else { // Do not expect this to occur. LogHelper::log_notice("{$log_id}: Could not claim the Job {$job_id}."); LogHelper::log_notice("{$log_id}: Started udpating failed status(COULD NOT CLAIM THE JOB) 3 for job {$job_id}."); $job_details = array('status' => 3, 'end_time' => time()); $job_log = "~~{$log_id}: COULD NOT CLAIM THE JOB on " . date("m-d-Y, H:i:s"); QueueUtil::updateJobDetails($job_id, $job_details, $job_log); LogHelper::log_notice("{$log_id}: Completed udpating failed status(COULD NOT CLAIM THE JOB) 3 for job {$job_id}."); } } catch (JobRecoveryException $jre) { LogHelper::log_error("{$log_id}: Job recoverable Exception occured while processing job {$job_id}. Exception is " . $jre); LogHelper::log_notice("{$log_id}: Started recovering job to set staus to 0 for job {$job_id}."); $job_details = array('status' => 0, 'start_time' => NULL, 'end_time' => NULL); $job_log = "~~{$log_id}: Job recovered for job {$job_id} on " . date("m-d-Y, H:i:s") . ". Exception is " . $jre->getMessage(); QueueUtil::updateJobDetails($job_id, $job_details, $job_log); LogHelper::log_notice("{$log_id}: Completed recovering job and updated staus to 0 for job {$job_id} for reprocessing."); } catch (Exception $exception) { LogHelper::log_error("{$log_id}: Error while processing queue job {$job_id}. Exception is " . $exception); LogHelper::log_notice("{$log_id}: Started udpating failed status 3 for job {$job_id}."); $job_details = array('status' => 3, 'end_time' => time()); $job_log = "~~{$log_id}: Error while processing queue job on " . date("m-d-Y, H:i:s") . ". Exception is " . $exception->getMessage(); QueueUtil::updateJobDetails($job_id, $job_details, $job_log); LogHelper::log_notice("{$log_id}: Completed udpating failed status 3 for job {$job_id}."); } } else { LogHelper::log_notice("{$log_id}: No requests are found for processing. Sleep until next job is available."); } } else { LogHelper::log_notice("{$log_id}: Currently a job is in progress. Skipping processing next job until current job is finished."); } LogHelper::log_notice("{$log_id}: Completed process queue cron.");
public function test_typeValidateAllowed() { QueueUtil::getConfig('allowedTypes'); QueueUtil::$configs['allowedTypes'] = array(1, 2); $data = array('QueueTask' => array('type' => 3, 'command' => '/url/to/queue')); $count = $this->QueueTask->find('count'); $result = $this->QueueTask->save($data); $this->assertFalse($result); $this->assertEqual($this->QueueTask->find('count'), $count); $this->assertTrue(!empty($this->QueueTask->validationErrors['type'])); //But a valid type works $data = array('QueueTask' => array('type' => 1, 'command' => 'Model::action()')); $result = $this->QueueTask->save($data); $this->assertTrue(!empty($result)); $this->assertEqual($this->QueueTask->find('count'), $count + 1); $this->assertTrue(empty($this->QueueTask->validationErrors['type'])); }