From: Vladimir Fomichev Date: Fri, 17 Oct 2025 12:40:50 +0000 (+0300) Subject: Добавляем логирование X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=62ee0733d2e6554a9b7d16bea0b3b69eae4ff669;p=erp24_rep%2Fyii-erp24%2F.git Добавляем логирование --- diff --git a/erp24/jobs/SendRequestUploadDataToJob.php b/erp24/jobs/SendRequestUploadDataToJob.php index f0ba5c20..497a35a3 100644 --- a/erp24/jobs/SendRequestUploadDataToJob.php +++ b/erp24/jobs/SendRequestUploadDataToJob.php @@ -7,6 +7,7 @@ namespace yii_app\jobs; +use Throwable; use yii\queue\RetryableJobInterface; use yii_app\services\LogService; use yii_app\services\UploadService; @@ -14,18 +15,58 @@ use yii_app\services\UploadService; class SendRequestUploadDataToJob implements RetryableJobInterface { public $decodingResult; - public function execute($queue) { - $request = $this->decodingResult; - $result = UploadService::processingUpload($request); + public function execute($queue) + { + // на всякий случай + if (function_exists('set_time_limit')) { @set_time_limit(0); } + + try { + // 1) Нормализуем вход к массиву + $request = $this->decodingResult; + + // 2) Базовая валидация (добавьте обязательные ключи, если знаете) + if (!is_array($request) || $request === []) { + throw new \RuntimeException('Request payload is empty or not an array after normalization'); + } + + // 3) Вызов сервиса + $result = UploadService::processingUpload($request); + + // при необходимости что-то сделать с $result + return $result; + } catch (Throwable $e) { + // подробный лог + проброс дальше, чтобы queue отметила как fail и сработал retry + LogService::apiErrorLog(json_encode([ + 'error_id' => 900, + 'error' => $e->getMessage(), + 'trace' => $e->getTraceAsString(), + 'payload_type' => is_object($this->decodingResult) ? get_class($this->decodingResult) : gettype($this->decodingResult), + ], JSON_UNESCAPED_UNICODE)); + + throw $e; + } } - public function getTtr() { - return 600; + public function getTtr() + { + // дайте больше времени, если загрузки реально долгие + return 900; // 15 минут (поставьте под ваш сценарий) } - public function canRetry($attempt, $error) { - LogService::apiErrorLog(json_encode(["error_id" => 900, "error" => $error->getMessage()], JSON_UNESCAPED_UNICODE)); + public function canRetry($attempt, $error) + { + // безопасный лог даже если $error не Throwable (на всякий случай) + $msg = $error instanceof Throwable ? $error->getMessage() : (is_scalar($error) ? (string)$error : json_encode($error, JSON_UNESCAPED_UNICODE)); + LogService::apiErrorLog(json_encode([ + 'error_id' => 900, + 'error' => $msg, + 'attempt' => $attempt, + ], JSON_UNESCAPED_UNICODE)); + + // до 3 попыток return $attempt < 3; } + + }