Completed
Push — master ( ecd220...59c7a5 )
by GBProd
02:21
created

ProvidingProgressBar   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 81
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Test Coverage

Coverage 41.3%

Importance

Changes 5
Bugs 1 Features 1
Metric Value
wmc 7
c 5
b 1
f 1
lcom 1
cbo 7
dl 0
loc 81
ccs 19
cts 46
cp 0.413
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A onFinishedProviding() 0 6 1
A onIndexedDocument() 0 6 2
B __construct() 0 26 1
A onStartedHandling() 0 7 1
A onStartedProviding() 0 13 2
1
<?php
2
3
namespace GBProd\ElasticsearchDataProviderBundle\Command;
4
5
use Symfony\Component\Console\Output\OutputInterface;
6
use Symfony\Component\Console\Helper\ProgressBar;
7
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
8
use GBProd\ElasticsearchDataProviderBundle\Event\HasStartedHandling;
9
use GBProd\ElasticsearchDataProviderBundle\Event\HasStartedProviding;
10
use GBProd\ElasticsearchDataProviderBundle\Event\HasFinishedProviding;
11
use GBProd\ElasticsearchDataProviderBundle\Event\HasIndexedDocument;
12
13
/**
14
 * Progress bar for providing
15
 * 
16
 * @author gbprod <[email protected]>
17
 */
18
class ProvidingProgressBar
19
{
20
    const PROGRESS_BAR_TEMPLATE = ' %current%/%max% [%bar%] %percent:3s%% %elapsed:6s%/%estimated:-6s% %memory:6s%';
21
    
22
    /**
23
     * @var OutputInterface
24
     */
25
    private $output;
26
    
27
    /**
28
     * @var ProgressBar
29
     */
30
    private $progressBar;
31
    
32
    /**
33
     * @param EventDispatcherInterface $dispatcher
34
     * @param OutputInterface          $output
35
     */
36 1
    public function __construct(
37
        EventDispatcherInterface $dispatcher, 
38
        OutputInterface $output
39
    ) {
40 1
        $this->output = $output;
41
        
42 1
        $dispatcher->addListener(
43 1
            'elasticsearch.has_started_handling',
44 1
            [$this, 'onStartedHandling']
45 1
        );
46
47 1
        $dispatcher->addListener(
48 1
            'elasticsearch.has_started_providing',
49 1
            [$this, 'onStartedProviding']
50 1
        );
51
        
52 1
        $dispatcher->addListener(
53 1
            'elasticsearch.has_finished_providing',
54 1
            [$this, 'onFinishedProviding']
55 1
        );
56
        
57 1
        $dispatcher->addListener(
58 1
            'elasticsearch.has_indexed_document',
59 1
            [$this, 'onIndexedDocument']
60 1
        );
61 1
    }
62
    
63
    public function onStartedHandling(HasStartedHandling $event) 
64
    {
65
        $this->output->writeln(sprintf(
66
            '<info>Start running <comment>%d</comment> providers</info>', 
67
            count($event->getEntries())
68
        ));
69
    }
70
    
71
    public function onStartedProviding(HasStartedProviding $event)
72
    {
73
        $this->output->writeln(sprintf(
74
            '<info> - Running <comment>%s</comment> provider</info>',
75
            get_class($event->getEntry()->getProvider())
76
        ));
77
        
78
        $count = $event->getEntry()->getProvider()->count();
79
        if (null !== $count) {
80
            $this->progressBar = new ProgressBar($this->output, $count);
81
            $this->progressBar->setFormat(self::PROGRESS_BAR_TEMPLATE);
82
        } 
83
    }
84
    
85
    public function onFinishedProviding(HasFinishedProviding $event)
1 ignored issue
show
Unused Code introduced by
The parameter $event is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
86
    {
87
        $this->progressBar->finish();
88
        $this->output->writeln('');
89
        $this->progressBar = null;
90
    }
91
92
    public function onIndexedDocument(HasIndexedDocument $event) 
1 ignored issue
show
Unused Code introduced by
The parameter $event is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
93
    {
94
        if ($this->progressBar) {
95
            $this->progressBar->advance();
96
        }
97
    }
98
}
99