+use Throwable;
use yii\queue\RetryableJobInterface;
use yii_app\services\LogService;
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;
}
+
+
}