PMC-963 We need a new artisan command to run the pending jobs, because we need to load the workspace configuration

This commit is contained in:
Roly Rudy Gutierrez Pinto
2019-07-18 13:53:43 -04:00
parent 08f4e9a052
commit 73fda41918
4 changed files with 180 additions and 1 deletions

View File

@@ -1,5 +1,6 @@
<?php
use ProcessMaker\Core\JobsManager;
use ProcessMaker\Model\Process;
use ProcessMaker\Validation\MySQL57;
@@ -390,6 +391,21 @@ CLI::taskArg("workspace-name", true, true);
CLI::taskRun("run_check_queries_incompatibilities");
/*********************************************************************/
/**
* This command executes "artisan" loading the workspace connection parameters
*/
CLI::taskName('artisan');
CLI::taskDescription(<<<EOT
This command executes "artisan" loading the workspace parameters.
Example:
./processmaker artisan queue:work --workspace=workflow
To see other command options please refer to the artisan help.
php artisan --help
EOT
);
CLI::taskRun("run_artisan");
/**
* Function run_info
*
@@ -1462,4 +1478,35 @@ function check_queries_incompatibilities($wsName)
} else {
echo ">> No MySQL 5.7 incompatibilities in variables found for this workspace." . PHP_EOL;
}
}
}
/**
* This function obtains the connection parameters and passes them to the artisan.
* All artisan options can be applied. For more information on artisan options use
* php artisan --help
* @param array $args
*/
function run_artisan($args)
{
$jobsManager = JobsManager::getSingleton()->init();
$workspace = $jobsManager->getOptionValueFromArguments($args, "--workspace");
if ($workspace !== false) {
config(['system.workspace' => $workspace]);
$tries = $jobsManager->getOptionValueFromArguments($args, "--tries");
if ($tries === false) {
$tries = $jobsManager->getTries();
}
$processmakerPath = PROCESSMAKER_PATH;
$otherOptions = "--processmakerPath={$processmakerPath} ";
$options = implode(" ", $args)
. " --tries={$tries}";
CLI::logging("> artisan {$options}\n");
passthru(PHP_BINARY . " artisan {$otherOptions} {$options}");
} else {
CLI::logging("> The --workspace option is undefined.\n");
}
}

View File

@@ -55,6 +55,33 @@ class JobsManager
'TASK',
];
/**
* Get delay property.
* @return int
*/
public function getDelay()
{
return $this->delay;
}
/**
* Get tries property.
* @return int
*/
public function getTries()
{
return $this->tries;
}
/**
* Get retryAfter property.
* @return int
*/
public function getRetryAfter()
{
return $this->retryAfter;
}
/**
* It obtains a single object to be used as a record of the whole environment.
*
@@ -70,6 +97,7 @@ class JobsManager
/**
* This initialize environment configuration values.
* @return JobsManager
*/
public function init()
{
@@ -79,6 +107,7 @@ class JobsManager
$this->retryAfter = $envs['retry_after'];
config(['queue.connections.database.retry_after' => $this->retryAfter]);
return $this;
}
/**
@@ -167,4 +196,24 @@ class JobsManager
return $instance;
}
/**
* This gets the value of the option specified in the second parameter from an
* array that represents the arguments.
* If the option is not found, it returns false.
* @param array $arguments
* @param string $option
* @return string|boolean
*/
public function getOptionValueFromArguments($arguments, $option, $allocationSeparator = "=")
{
$option = $option . $allocationSeparator;
$result = preg_grep("/{$option}/", $arguments);
if (empty($result)) {
return false;
}
$string = array_pop($result);
$value = str_replace($option, "", $string);
return trim($value);
}
}