RetryCommand   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 91
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 6

Importance

Changes 0
Metric Value
wmc 10
lcom 2
cbo 6
dl 0
loc 91
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 7 1
A configure() 0 6 1
A execute() 0 25 5
A retryJob() 0 13 3
1
<?php
2
3
namespace SfCod\QueueBundle\Command;
4
5
use SfCod\QueueBundle\Entity\Job;
6
use SfCod\QueueBundle\Failer\FailedJobProviderInterface;
7
use SfCod\QueueBundle\Service\JobQueue;
8
use Symfony\Component\Console\Command\Command;
9
use Symfony\Component\Console\Input\InputInterface;
10
use Symfony\Component\Console\Input\InputOption;
11
use Symfony\Component\Console\Output\OutputInterface;
12
use Symfony\Component\Console\Style\SymfonyStyle;
13
14
/**
15
 * Class ReleaseFailedCommand
16
 *
17
 * @author Virchenko Maksim <[email protected]>
18
 *
19
 * @package SfCod\QueueBundle\Command
20
 */
21
class RetryCommand extends Command
22
{
23
    /**
24
     * @var JobQueue
25
     */
26
    protected $queue;
27
28
    /**
29
     * @var FailedJobProviderInterface
30
     */
31
    protected $failer;
32
33
    /**
34
     * RetryCommand constructor.
35
     *
36
     * @param JobQueue $queue
37
     * @param FailedJobProviderInterface $failer
38
     */
39
    public function __construct(JobQueue $queue, FailedJobProviderInterface $failer)
40
    {
41
        $this->queue = $queue;
42
        $this->failer = $failer;
43
44
        parent::__construct();
45
    }
46
47
    /**
48
     * Configure command
49
     */
50
    protected function configure()
51
    {
52
        $this->setName('job-queue:retry')
53
            ->setDescription('Release failed job(s).')
54
            ->addOption('id', null, InputOption::VALUE_OPTIONAL, 'Job id to retry, if not set all failed jobs will be affected.', null);
55
    }
56
57
    /**
58
     * Execute command
59
     *
60
     * @param InputInterface $input
61
     * @param OutputInterface $output
62
     *
63
     * @return int|void|null
64
     */
65
    public function execute(InputInterface $input, OutputInterface $output)
66
    {
67
        $io = new SymfonyStyle($input, $output);
68
69
        $jobsCount = 0;
70
        if (is_null($input->getOption('id'))) {
71
            foreach ($this->failer->all() as $job) {
72
                if ($this->retryJob($job)) {
73
                    ++$jobsCount;
74
                }
75
            }
76
        } else {
77
            $job = $this->failer->find($input->getOption('id'));
78
79
            if ($job) {
80
                $this->retryJob($job);
81
82
                ++$jobsCount;
83
            }
84
        }
85
86
        $io->success(sprintf("[%d] job(s) has been released.\n", $jobsCount));
87
88
        return 0;
89
    }
90
91
    /**
92
     * Retry job
93
     *
94
     * @param Job $job
95
     *
96
     * @return bool
97
     */
98
    protected function retryJob(Job $job): bool
99
    {
100
        $payload = $job->getPayload();
101
102
        if ($payload && isset($payload['job'], $payload['data'])) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $payload of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
103
            $this->queue->push($payload['job'], $payload['data']);
104
            $this->failer->forget($job->getId());
105
106
            return true;
107
        }
108
109
        return false;
110
    }
111
}
112