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..4e83d63d9e 100644 --- a/ProcessMaker/Jobs/RunScriptTask.php +++ b/ProcessMaker/Jobs/RunScriptTask.php @@ -108,12 +108,9 @@ 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)) { - $this->updateData($response); - } + $this->updateData($response); } catch (ConfigurationException $exception) { $this->unlock(); $this->updateData(['output' => $exception->getMessageForData($token)]); diff --git a/ProcessMaker/ScriptRunners/ScriptMicroserviceRunner.php b/ProcessMaker/ScriptRunners/ScriptMicroserviceRunner.php index 26b3caa32f..b6e84c7f43 100644 --- a/ProcessMaker/ScriptRunners/ScriptMicroserviceRunner.php +++ b/ProcessMaker/ScriptRunners/ScriptMicroserviceRunner.php @@ -7,8 +7,8 @@ use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Log; use ProcessMaker\Exception\ConfigurationException; -use ProcessMaker\Exception\ScriptException; use ProcessMaker\GenerateAccessToken; +use ProcessMaker\Jobs\ErrorHandling; use ProcessMaker\Models\EnvironmentVariable; use ProcessMaker\Models\Script; use ProcessMaker\Models\User; @@ -95,7 +95,13 @@ public function run($code, array $data, array $config, $timeout, $user, $sync, $ $response->throw(); - return $response->json(); + $result = $response->json(); + + if ($sync) { + ErrorHandling::convertResponseToException($result); + } + + return $result; } private function getEnvironmentVariables(User $user) 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();