From d13d0223c68d237298ce28bcb4666c12a42b71cb Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Wed, 22 Jan 2025 09:27:14 -0800 Subject: [PATCH 1/4] Fix retries for sync requests --- .../ScriptRunners/ScriptMicroserviceRunner.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/ProcessMaker/ScriptRunners/ScriptMicroserviceRunner.php b/ProcessMaker/ScriptRunners/ScriptMicroserviceRunner.php index 26b3caa32f..9865020d55 100644 --- a/ProcessMaker/ScriptRunners/ScriptMicroserviceRunner.php +++ b/ProcessMaker/ScriptRunners/ScriptMicroserviceRunner.php @@ -8,6 +8,7 @@ use Illuminate\Support\Facades\Log; use ProcessMaker\Exception\ConfigurationException; use ProcessMaker\Exception\ScriptException; +use ProcessMaker\Exception\ScriptTimeoutException; use ProcessMaker\GenerateAccessToken; use ProcessMaker\Models\EnvironmentVariable; use ProcessMaker\Models\Script; @@ -95,7 +96,16 @@ public function run($code, array $data, array $config, $timeout, $user, $sync, $ $response->throw(); - return $response->json(); + $result = $response->json(); + + if ($sync && $result['status'] === 'error') { + if (str_starts_with($result['message'], 'Command exceeded timeout of')) { + throw new ScriptTimeoutException($result['message']); + } + throw new ScriptException($result['message']); + } + + return $result; } private function getEnvironmentVariables(User $user) From dcb1cc0226c8509157662917e2307ca9f16209f3 Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Wed, 22 Jan 2025 10:31:10 -0800 Subject: [PATCH 2/4] Make script tasks run synchronously --- ProcessMaker/Jobs/ErrorHandling.php | 12 ++++++++++++ ProcessMaker/Jobs/RunScriptTask.php | 2 +- .../ScriptRunners/ScriptMicroserviceRunner.php | 10 +++------- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/ProcessMaker/Jobs/ErrorHandling.php b/ProcessMaker/Jobs/ErrorHandling.php index f33d994c32..ea0049a742 100644 --- a/ProcessMaker/Jobs/ErrorHandling.php +++ b/ProcessMaker/Jobs/ErrorHandling.php @@ -5,6 +5,8 @@ use Illuminate\Support\Arr; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Notification; +use ProcessMaker\Exception\ScriptException; +use ProcessMaker\Exception\ScriptTimeoutException; use ProcessMaker\Models\Process; use ProcessMaker\Models\ProcessRequest; use ProcessMaker\Models\ProcessRequestToken; @@ -204,4 +206,14 @@ public function setDefaultsFromDataSourceConfig(array $config) 'retry_wait_time' => Arr::get($endpointConfig, 'retry_wait_time', 5), ]; } + + public static function convertResponseToException($result) + { + if ($result['status'] === 'error') { + if (str_starts_with($result['message'], 'Command exceeded timeout of')) { + throw new ScriptTimeoutException($result['message']); + } + throw new ScriptException($result['message']); + } + } } diff --git a/ProcessMaker/Jobs/RunScriptTask.php b/ProcessMaker/Jobs/RunScriptTask.php index 5558c23fa5..ec8ac42b23 100644 --- a/ProcessMaker/Jobs/RunScriptTask.php +++ b/ProcessMaker/Jobs/RunScriptTask.php @@ -108,7 +108,7 @@ public function action(ProcessRequestToken $token = null, ScriptTaskInterface $e 'attempts' => $this->attemptNum, ], ]; - $response = $script->runScript($data, $configuration, $token->getId(), $errorHandling->timeout(), 0, $metadata); + $response = $script->runScript($data, $configuration, $token->getId(), $errorHandling->timeout(), 1, $metadata); if (!config('script-runner-microservice.enabled') || ($scriptExecutor && $scriptExecutor->type === ScriptExecutorType::Custom)) { diff --git a/ProcessMaker/ScriptRunners/ScriptMicroserviceRunner.php b/ProcessMaker/ScriptRunners/ScriptMicroserviceRunner.php index 9865020d55..b6e84c7f43 100644 --- a/ProcessMaker/ScriptRunners/ScriptMicroserviceRunner.php +++ b/ProcessMaker/ScriptRunners/ScriptMicroserviceRunner.php @@ -7,9 +7,8 @@ use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Log; use ProcessMaker\Exception\ConfigurationException; -use ProcessMaker\Exception\ScriptException; -use ProcessMaker\Exception\ScriptTimeoutException; use ProcessMaker\GenerateAccessToken; +use ProcessMaker\Jobs\ErrorHandling; use ProcessMaker\Models\EnvironmentVariable; use ProcessMaker\Models\Script; use ProcessMaker\Models\User; @@ -98,11 +97,8 @@ public function run($code, array $data, array $config, $timeout, $user, $sync, $ $result = $response->json(); - if ($sync && $result['status'] === 'error') { - if (str_starts_with($result['message'], 'Command exceeded timeout of')) { - throw new ScriptTimeoutException($result['message']); - } - throw new ScriptException($result['message']); + if ($sync) { + ErrorHandling::convertResponseToException($result); } return $result; From cba3d436238b2ed854f9faee39a7133b73fdb101 Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Mon, 27 Jan 2025 16:40:30 -0800 Subject: [PATCH 3/4] Always update data --- ProcessMaker/Jobs/RunScriptTask.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/ProcessMaker/Jobs/RunScriptTask.php b/ProcessMaker/Jobs/RunScriptTask.php index ec8ac42b23..4e83d63d9e 100644 --- a/ProcessMaker/Jobs/RunScriptTask.php +++ b/ProcessMaker/Jobs/RunScriptTask.php @@ -110,10 +110,7 @@ public function action(ProcessRequestToken $token = null, ScriptTaskInterface $e ]; $response = $script->runScript($data, $configuration, $token->getId(), $errorHandling->timeout(), 1, $metadata); - if (!config('script-runner-microservice.enabled') || - ($scriptExecutor && $scriptExecutor->type === ScriptExecutorType::Custom)) { - $this->updateData($response); - } + $this->updateData($response); } catch (ConfigurationException $exception) { $this->unlock(); $this->updateData(['output' => $exception->getMessageForData($token)]); From 007e383e618fdfcb2167214de802b19ba23cea76 Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Tue, 28 Jan 2025 10:36:36 -0800 Subject: [PATCH 4/4] Fix query condition parenthesis (causing test failure) --- ProcessMaker/Traits/TaskControllerIndexMethods.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ProcessMaker/Traits/TaskControllerIndexMethods.php b/ProcessMaker/Traits/TaskControllerIndexMethods.php index 540091431a..0db2577e36 100644 --- a/ProcessMaker/Traits/TaskControllerIndexMethods.php +++ b/ProcessMaker/Traits/TaskControllerIndexMethods.php @@ -151,9 +151,13 @@ private function excludeNonVisibleTasks($query, $request) $nonSystem = filter_var($request->input('non_system'), FILTER_VALIDATE_BOOLEAN); $allTasks = filter_var($request->input('all_tasks'), FILTER_VALIDATE_BOOLEAN); $query->when(!$allTasks, function ($query) { - $query->where('element_type', '=', 'task'); - $query->orWhere('element_type', '=', 'serviceTask'); - $query->where('element_name', '=', 'AI Assistant'); + $query->where(function ($query) { + $query->where('element_type', '=', 'task'); + $query->orWhere(function ($query) { + $query->where('element_type', '=', 'serviceTask'); + $query->where('element_name', '=', 'AI Assistant'); + }); + }); }) ->when($nonSystem, function ($query) { $query->nonSystem();