%PDF- %PDF-
Direktori : /home/silvzytp/crm-dub-code/vendor/laravel/framework/src/Illuminate/Queue/Failed/ |
Current File : //home/silvzytp/crm-dub-code/vendor/laravel/framework/src/Illuminate/Queue/Failed/DynamoDbFailedJobProvider.php |
<?php namespace Illuminate\Queue\Failed; use Aws\DynamoDb\DynamoDbClient; use DateTimeInterface; use Exception; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Date; class DynamoDbFailedJobProvider implements FailedJobProviderInterface { /** * The DynamoDB client instance. * * @var \Aws\DynamoDb\DynamoDbClient */ protected $dynamo; /** * The application name. * * @var string */ protected $applicationName; /** * The table name. * * @var string */ protected $table; /** * Create a new DynamoDb failed job provider. * * @param \Aws\DynamoDb\DynamoDbClient $dynamo * @param string $applicationName * @param string $table * @return void */ public function __construct(DynamoDbClient $dynamo, $applicationName, $table) { $this->table = $table; $this->dynamo = $dynamo; $this->applicationName = $applicationName; } /** * Log a failed job into storage. * * @param string $connection * @param string $queue * @param string $payload * @param \Throwable $exception * @return string|int|null */ public function log($connection, $queue, $payload, $exception) { $id = json_decode($payload, true)['uuid']; $failedAt = Date::now(); $this->dynamo->putItem([ 'TableName' => $this->table, 'Item' => [ 'application' => ['S' => $this->applicationName], 'uuid' => ['S' => $id], 'connection' => ['S' => $connection], 'queue' => ['S' => $queue], 'payload' => ['S' => $payload], 'exception' => ['S' => (string) $exception], 'failed_at' => ['N' => (string) $failedAt->getTimestamp()], 'expires_at' => ['N' => (string) $failedAt->addDays(3)->getTimestamp()], ], ]); return $id; } /** * Get a list of all of the failed jobs. * * @return array */ public function all() { $results = $this->dynamo->query([ 'TableName' => $this->table, 'Select' => 'ALL_ATTRIBUTES', 'KeyConditionExpression' => 'application = :application', 'ExpressionAttributeValues' => [ ':application' => ['S' => $this->applicationName], ], 'ScanIndexForward' => false, ]); return collect($results['Items'])->sortByDesc(function ($result) { return (int) $result['failed_at']['N']; })->map(function ($result) { return (object) [ 'id' => $result['uuid']['S'], 'connection' => $result['connection']['S'], 'queue' => $result['queue']['S'], 'payload' => $result['payload']['S'], 'exception' => $result['exception']['S'], 'failed_at' => Carbon::createFromTimestamp( (int) $result['failed_at']['N'] )->format(DateTimeInterface::ISO8601), ]; })->all(); } /** * Get a single failed job. * * @param mixed $id * @return object|null */ public function find($id) { $result = $this->dynamo->getItem([ 'TableName' => $this->table, 'Key' => [ 'application' => ['S' => $this->applicationName], 'uuid' => ['S' => $id], ], ]); if (! isset($result['Item'])) { return; } return (object) [ 'id' => $result['Item']['uuid']['S'], 'connection' => $result['Item']['connection']['S'], 'queue' => $result['Item']['queue']['S'], 'payload' => $result['Item']['payload']['S'], 'exception' => $result['Item']['exception']['S'], 'failed_at' => Carbon::createFromTimestamp( (int) $result['Item']['failed_at']['N'] )->format(DateTimeInterface::ISO8601), ]; } /** * Delete a single failed job from storage. * * @param mixed $id * @return bool */ public function forget($id) { $this->dynamo->deleteItem([ 'TableName' => $this->table, 'Key' => [ 'application' => ['S' => $this->applicationName], 'uuid' => ['S' => $id], ], ]); return true; } /** * Flush all of the failed jobs from storage. * * @param int|null $hours * @return void * * @throws \Exception */ public function flush($hours = null) { throw new Exception("DynamoDb failed job storage may not be flushed. Please use DynamoDb's TTL features on your expires_at attribute."); } }