Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Foundation/Cloud/FailedJobProvider.php
Строк: 218
<?php

namespace IlluminateFoundationCloud;

use 
CarbonCarbonImmutable;
use 
DateTimeInterface;
use 
IlluminateContractsEncryptionStringEncrypter;
use 
IlluminateHttpClientConnectionException;
use 
IlluminateQueueFailedCountableFailedJobProvider;
use 
IlluminateQueueFailedFailedJobProviderInterface;
use 
IlluminateQueueFailedPrunableFailedJobProvider;
use 
IlluminateSupportFacadesHttp;
use 
IlluminateSupportStr;
use 
RuntimeException;

class 
FailedJobProvider implements FailedJobProviderInterfaceCountableFailedJobProviderPrunableFailedJobProvider
{
    
/**
     * The connected queue instance.
     *
     * @var ?IlluminateFoundationCloudQueue
     */
    
protected $queue null;

    
/**
     * The loaded failed jobs keyed by ID.
     *
     * @var array<string, object>
     */
    
protected $loadedFailedJobs = [];

    
/**
     * Create a new instance.
     */
    
public function __construct(
        protected 
FailedJobProviderInterface $failer,
        protected 
Events $events,
        protected 
StringEncrypter $encrypter,
    ) {
        
//
    
}

    
/**
     * Log a failed job into storage.
     *
     * @param  string  $connection
     * @param  string  $queue
     * @param  string  $payload
     * @param  Throwable  $exception
     * @return string|null
     */
    
public function log($connection$queue$payload$exception)
    {
        if (
$connection !== 'cloud') {
            return 
$this->failer->log(...func_get_args());
        }

        if (
$this->queue === null) {
            throw new 
RuntimeException('The failed job provider does not have a configured queue');
        }

        
$timestamp CarbonImmutable::now('UTC');
        
$processingJobDetails $this->queue->processingJobDetails();

        
$this->events->emit([
            
'_cloud_event' => 'failed_job',
            
'id' => $id Str::uuid7($timestamp)->toString(),
            
'queue' => $processingJobDetails['queue'],
            
'started_at' => $processingJobDetails['started_at']->toDateTimeString('microsecond'),
            
'attempts' => $processingJobDetails['attempts'],
            
'payload' => $payload,
            
'exception' => (string) mb_convert_encoding($exception'UTF-8'),
        ]);

        
$this->queue->finishProcessingJob(timestamp$timestamp);

        return 
$id;
    }

    
/**
     * Get the IDs of all of the failed jobs.
     *
     * @param  string|null  $queue
     * @return array
     */
    
public function ids($queue null)
    {
        return 
$this->failer->ids(...func_get_args());
    }

    
/**
     * Get a list of all of the failed jobs.
     *
     * @return array
     */
    
public function all()
    {
        return 
$this->failer->all(...func_get_args());
    }

    
/**
     * Get a single failed job.
     *
     * @param  mixed  $id
     * @return object|null
     */
    
public function find($id)
    {
        if (! 
str_starts_with($id'https://')) {
            return 
$this->failer->find($id);
        }

        
$response Http::connectTimeout(10)
            ->
timeout(10)
            ->
retry(31000fn ($exception) => $exception instanceof ConnectionException)
            ->
throw()
            ->
get($id);

        return 
$this->loadedFailedJobs[$id] = json_decode($this->encrypter->decryptString($response->body()), flagsJSON_THROW_ON_ERROR);
    }

    
/**
     * Delete a single failed job from storage.
     *
     * @param  mixed  $id
     * @return bool
     */
    
public function forget($id)
    {
        if (! 
str_starts_with($id'https://')) {
            return 
$this->failer->forget($id);
        }

        if (
is_null($job $this->loadedFailedJobs[$id] ?? null)) {
            return 
false;
        }

        
$this->events->emit([
            
'_cloud_event' => 'failed_job',
            
'id' => $job->id,
            
'queue' => $job->queue,
            
'retried_at' => CarbonImmutable::now('UTC')->toDateTimeString('microsecond'),
        ]);

        return 
true;
    }

    
/**
     * Flush all of the failed jobs from storage.
     *
     * @param  int|null  $hours
     * @return void
     */
    
public function flush($hours null)
    {
        
$this->failer->flush(...func_get_args());
    }

    
/**
     * Count the failed jobs.
     *
     * @param  string|null  $connection
     * @param  string|null  $queue
     * @return int
     */
    
public function count($connection null$queue null)
    {
        if (! 
$this->failer instanceof CountableFailedJobProvider) {
            return 
0;
        }

        return 
$this->failer->count(...func_get_args());
    }

    
/**
     * Prune all of the entries older than the given date.
     *
     * @param  DateTimeInterface  $before
     * @return int
     */
    
public function prune(DateTimeInterface $before)
    {
        if (! 
$this->failer instanceof PrunableFailedJobProvider) {
            return 
0;
        }

        return 
$this->failer->prune(...func_get_args());
    }

    
/**
     * Set the connected queue instance.
     *
     * @param  IlluminateFoundationCloudQueue  $queue
     * @return $this
     */
    
public function setQueue($queue)
    {
        
$this->queue $queue;

        return 
$this;
    }
}
Онлайн: 1
Реклама