|
|
<?php
|
|
|
|
|
|
namespace App\Jobs;
|
|
|
|
|
|
use Illuminate\Bus\Queueable;
|
|
|
use Illuminate\Contracts\Queue\ShouldBeUnique;
|
|
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
|
|
use Illuminate\Foundation\Bus\Dispatchable;
|
|
|
use Illuminate\Queue\InteractsWithQueue;
|
|
|
use Illuminate\Queue\SerializesModels;
|
|
|
use App\Models\ProcessHistories;
|
|
|
|
|
|
|
|
|
class ProcessImagesJob implements ShouldQueue
|
|
|
{
|
|
|
use InteractsWithQueue, Queueable, SerializesModels;
|
|
|
|
|
|
public $historyId;
|
|
|
public $tries = 3;
|
|
|
|
|
|
|
|
|
/**
|
|
|
* Create a new job instance.
|
|
|
*
|
|
|
* @return void
|
|
|
*/
|
|
|
public function __construct($historyId)
|
|
|
{
|
|
|
$this->historyId = $historyId;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Execute the job.
|
|
|
*
|
|
|
* @return void
|
|
|
*/
|
|
|
public function handle()
|
|
|
{
|
|
|
$history = ProcessHistories::find($this->historyId);
|
|
|
if (!$history) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
$startQueue = now();
|
|
|
// Допустим тут время ожидания очереди (между startQueue и started_at)
|
|
|
$queueWaitTime = $startQueue->diffInSeconds($history->started_at);
|
|
|
|
|
|
// Эмуляция обработки
|
|
|
// 1. Загрузка файлов (у нас уже загружены локально, можно считать что это этап)
|
|
|
$uploadTime = rand(1,3); // псевдо
|
|
|
sleep($uploadTime);
|
|
|
|
|
|
// 2. Запрос к внешнему API для обработки каждого изображения
|
|
|
$processingStart = now();
|
|
|
$processedCount = 0;
|
|
|
foreach ($history->images as $index => $img) {
|
|
|
// Имитируем обращение к API
|
|
|
sleep(2); // эмуляция API задержки
|
|
|
$processedCount++;
|
|
|
$history->processed_count = $processedCount;
|
|
|
$history->save();
|
|
|
}
|
|
|
$processingTime = $processingStart->diffInSeconds(now());
|
|
|
|
|
|
// 3. Сохранение итогового step-файла
|
|
|
$savingStart = now();
|
|
|
// Имитируем сохранение файла (например API возвращает имя файла)
|
|
|
$stepFileName = 'step_' . time() . '.txt';
|
|
|
Storage::disk('public')->put($stepFileName, "Данные шага обработки.");
|
|
|
$savingTime = $savingStart->diffInSeconds(now());
|
|
|
|
|
|
$history->step_file_name = $stepFileName;
|
|
|
$history->finished_at = now();
|
|
|
$history->stages_timing = [
|
|
|
'queue_wait_time' => $queueWaitTime,
|
|
|
'upload_time' => $uploadTime,
|
|
|
'processing_time' => $processingTime,
|
|
|
'saving_time' => $savingTime
|
|
|
];
|
|
|
$history->save();
|
|
|
}
|
|
|
}
|