Exemple #1
0
 /**
  * Given the query, creates a command to connect to the db and generate the output file, returns the filename
  * @param $query
  * @return string
  */
 function getJobCommand($query)
 {
     global $conf;
     //map csv headers
     $columnMappings = $this->requestDataSet->displayConfiguration->csv->elementsColumn;
     $columnMappings = (array) $columnMappings;
     //Handle referenced columns
     foreach ($columnMappings as $key => $value) {
         if (strpos($value, "@") !== false) {
             $column_parts = explode("@", $value);
             $columnMappings[$key] = $column_parts[0];
         }
     }
     $columnMappings = array_flip($columnMappings);
     $end = strpos($query, 'FROM');
     $select_part = substr($query, 0, $end);
     $select_part = str_replace("SELECT", "", $select_part);
     $sql_parts = explode(",", $select_part);
     $new_select_part = "SELECT ";
     foreach ($sql_parts as $sql_part) {
         $sql_part = trim($sql_part);
         $column = $sql_part;
         $alias = "";
         //Remove "AS"
         if (strpos($sql_part, "AS") !== false) {
             $pos = strpos($column, " AS");
             $sql_part = substr($sql_part, 0, $pos);
         }
         //get only column
         if (strpos($sql_part, ".") !== false) {
             $alias = substr($sql_part, 0, 3);
             $column = substr($sql_part, 3);
         }
         //Handle derived columns
         switch ($column) {
             case "prime_vendor_name":
                 $new_column = "CASE WHEN " . $alias . $column . " IS NULL THEN 'N/A' ELSE " . $alias . $column . " END";
                 $new_select_part .= $new_column . ' AS \\"' . $columnMappings[$column] . '\\",' . "\n";
                 break;
             case "minority_type_name":
                 $new_column = "CASE \n";
                 $new_column .= "WHEN " . $alias . $column . " = 2 THEN 'Black American' \n";
                 $new_column .= "WHEN " . $alias . $column . " = 3 THEN 'Hispanic American' \n";
                 $new_column .= "WHEN " . $alias . $column . " = 7 THEN 'Non-M/WBE' \n";
                 $new_column .= "WHEN " . $alias . $column . " = 9 THEN 'Women' \n";
                 $new_column .= "WHEN " . $alias . $column . " = 11 THEN 'Individuals and Others' \n";
                 $new_column .= "ELSE 'Asian American' END";
                 $new_select_part .= $new_column . ' AS \\"' . $columnMappings[$column] . '\\",' . "\n";
                 break;
             case "vendor_type":
                 $new_column = "CASE WHEN " . $alias . $column . " ~* 's' THEN 'Yes' ELSE 'No' END";
                 $new_select_part .= $new_column . ' AS \\"' . $columnMappings[$column] . '\\",' . "\n";
                 break;
             default:
                 $new_select_part .= $alias . $column . ' AS \\"' . $columnMappings[$column] . '\\",' . "\n";
                 break;
         }
     }
     $new_select_part = rtrim($new_select_part, ",\n");
     $query = substr_replace($query, $new_select_part, 0, $end);
     try {
         $fileDir = _checkbook_project_prepare_data_feeds_file_output_dir();
         $filename = _checkbook_project_generate_uuid() . '.csv';
         $tmpDir = isset($conf['check_book']['tmpdir']) && is_dir($conf['check_book']['tmpdir']) ? rtrim($conf['check_book']['tmpdir'], '/') : '/tmp';
         $command = $conf['check_book']['data_feeds']['command'];
         if (!is_writable($tmpDir)) {
             LogHelper::log_error("{$tmpDir} is not writable. Please make sure this is writable to generate export file.");
             return $filename;
         }
         $tempOutputFile = $tmpDir . '/' . $filename;
         $outputFile = DRUPAL_ROOT . '/' . $fileDir . '/' . $filename;
         $cmd = $command . " -c \"\\\\COPY (" . $query . ") TO '" . $tempOutputFile . "'  WITH DELIMITER ',' CSV HEADER \" ";
         shell_exec($cmd);
         $move_cmd = "mv {$tempOutputFile} {$outputFile}";
         shell_exec($move_cmd);
     } catch (Exception $e) {
         $value = TextLogMessageTrimmer::$LOGGED_TEXT_LENGTH__MAXIMUM;
         TextLogMessageTrimmer::$LOGGED_TEXT_LENGTH__MAXIMUM = NULL;
         LogHelper::log_error($e);
         $msg = "Command used to generate the file: " . $command;
         $msg .= "Error generating DB command: " . $e->getMessage();
         LogHelper::log_error($msg);
         TextLogMessageTrimmer::$LOGGED_TEXT_LENGTH__MAXIMUM = $value;
     }
     return $filename;
 }
Exemple #2
0
 /**
  * Executes the shell commands with error logging
  * @param $commands
  */
 private function processCommands($commands)
 {
     $current_command = "";
     try {
         foreach ($commands as $command) {
             $current_command = $command;
             shell_exec($command);
         }
     } catch (Exception $e) {
         $value = TextLogMessageTrimmer::$LOGGED_TEXT_LENGTH__MAXIMUM;
         TextLogMessageTrimmer::$LOGGED_TEXT_LENGTH__MAXIMUM = NULL;
         LogHelper::log_error($e);
         $msg = "Command used to generate the file: " . $current_command;
         $msg .= "Error generating DB command: " . $e->getMessage();
         LogHelper::log_error($msg);
         TextLogMessageTrimmer::$LOGGED_TEXT_LENGTH__MAXIMUM = $value;
     }
 }
Exemple #3
0
    return;
}*/
$dir .= '/' . $conf['check_book']['ref_data_dir'];
if (!file_prepare_directory($dir, FILE_CREATE_DIRECTORY)) {
    LogHelper::log_error("Could not prepare directory {$dir} for generating reference data.");
    echo $failure;
    return;
}
/*if(!is_link($dir) && !@chmod($dir,0777)){
  LogHelper::log_error("Could not change permissions to 777 for $dir.");
  echo $failure;
  return;
}*/
foreach ($ref_data_queries as $file_name => $ref_data_query) {
    $file = DRUPAL_ROOT . '/' . $dir . '/' . $file_name . '.csv';
    $command = $conf['check_book']['data_feeds']['command'] . " -c \"\\\\COPY (" . $ref_data_query . ") TO '" . $file . "'  WITH DELIMITER ',' CSV HEADER QUOTE '\\\"' ESCAPE '\\\"' \" ";
    try {
        LogHelper::log_notice("Command for generating {$file_name} ref data: " . $command);
        shell_exec($command);
        LogHelper::log_notice("Completed executing DB query for {$file_name}. " . (is_file($file) ? "Generated file : {$file}" : "Could not generate file for {$file_name}"));
    } catch (Exception $e) {
        $value = TextLogMessageTrimmer::$LOGGED_TEXT_LENGTH__MAXIMUM;
        TextLogMessageTrimmer::$LOGGED_TEXT_LENGTH__MAXIMUM = NULL;
        LogHelper::log_error($e);
        LogHelper::log_error("Erorr executing DB query for generating {$file_name} ref data: " . $command . ". Exception is: " . $e);
        TextLogMessageTrimmer::$LOGGED_TEXT_LENGTH__MAXIMUM = $value;
        echo $failure;
        return;
    }
}
echo $success;
Exemple #4
0
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Affero General Public License for more details.
* 
* You should have received a copy of the GNU Affero General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * Script to handle process queue jobs.
 */
set_time_limit(0);
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
//_drush_bootstrap_drupal_full();
define('MAXIMUM_JOBS_TO_RUN', 1);
TextLogMessageTrimmer::$LOGGED_TEXT_LENGTH__MAXIMUM = 512 * 10;
// Make sure data is not getting updated:
// TODO - This  will be handled by server scripts.
$log_id = date('mdYHis');
LogHelper::log_notice("{$log_id}: Cron invoked for processing next job in queue.");
if (!QueueUtil::isJobsInProgress()) {
    LogHelper::log_notice("{$log_id}: No job is in progress. Getting next job.");
    try {
        $job_details = QueueUtil::getNextJob();
    } catch (Exception $claim_exception) {
        LogHelper::log_error("{$log_id}: Error while fetching job from queue: " . $claim_exception);
        return;
    }
    if ($job_details) {
        try {
            $job_id = $job_details['job_id'];