Passed
Pull Request — master (#6)
by Matt
02:21 queued 43s
created

ListAllCacheRulesCommand   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 84
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 48
dl 0
loc 84
rs 10
c 0
b 0
f 0
wmc 11

3 Methods

Rating   Name   Duplication   Size   Complexity  
A execute() 0 29 3
A configure() 0 8 1
B getRules() 0 41 7
1
<?php
2
3
namespace Incapsula\Command;
4
5
use function json_encode;
6
use Symfony\Component\Console\Helper\Table;
7
use Symfony\Component\Console\Input\InputInterface;
8
use Symfony\Component\Console\Input\InputOption;
9
use Symfony\Component\Console\Output\OutputInterface;
10
11
class ListAllCacheRulesCommand extends SitesListCommand
12
{
13
    protected function configure()
14
    {
15
        parent::configure();
16
17
        $this
18
            ->setName('sites:listcacherules')
19
            ->addOption('json', null, InputOption::VALUE_NONE, 'Output as JSON')
20
            ->setDescription('List all cache rules for all sites');
21
    }
22
23
    protected function execute(InputInterface $input, OutputInterface $output)
24
    {
25
        $rules = $this->getRules();
26
27
        if (true === $input->getOption('json')) {
28
            $output->write(json_encode($rules));
29
30
            return 0;
31
        }
32
33
        $table = new Table($output);
34
        $table->setHeaders(['Site ID', 'Site Name', 'Rule ID', 'Action', 'Disabled?', 'Rule Name', 'Rule Filter', 'TTL']);
35
36
        foreach ($rules as $rule) {
37
            $table->addRow([
38
                $rule['site_id'],
39
                $rule['site_name'],
40
                $rule['rule_id'],
41
                $rule['action'],
42
                $rule['disabled'],
43
                $rule['name'],
44
                $rule['filter'],
45
                $rule['ttl'],
46
            ]);
47
        }
48
49
        $table->render();
50
51
        return 0;
52
    }
53
54
    private function getRules()
55
    {
56
        $api = $this->client->sites();
57
        $sites = $this->getSites();
58
        $rules = [];
59
60
        foreach ($sites as $site) {
61
            $page = 0;
62
            while (true) {
63
                $response = $api->listCacheRules($site['site_id'], 50, $page);
64
65
                if (empty($response)) {
66
                    break;
67
                }
68
69
                foreach ($response as $ruleType => $rulesOfType) {
70
                    foreach ($rulesOfType as $ruleData) {
71
                        $ttl = '';
72
73
                        if (isset($ruleData['ttl'], $ruleData['ttlUnit'])) {
74
                            $ttl = sprintf('%s %s', $ruleData['ttl'], $ruleData['ttlUnit']);
75
                        }
76
77
                        $rules[] = [
78
                            'site_id' => $site['site_id'],
79
                            'site_name' => $site['display_name'],
80
                            'rule_id' => $ruleData['id'],
81
                            'action' => $ruleType,
82
                            'disabled' => $ruleData['disabled'],
83
                            'name' => $ruleData['name'],
84
                            'filter' => $ruleData['filter'],
85
                            'ttl' => $ttl,
86
                        ];
87
                    }
88
                }
89
90
                ++$page;
91
            }
92
        }
93
94
        return $rules;
95
    }
96
}
97