Passed
Pull Request — master (#6)
by Matt
03:20
created

ListAllCacheRulesCommand   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 82
Duplicated Lines 0 %

Importance

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

3 Methods

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