Completed
Branch feature/redis (23fb44)
by Matthew
05:31
created

DtcQueueExtension::configRabbitMQ()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 12
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 4

Importance

Changes 0
Metric Value
dl 0
loc 12
ccs 8
cts 8
cp 1
rs 9.2
c 0
b 0
f 0
cc 4
eloc 7
nc 4
nop 2
crap 4
1
<?php
2
3
namespace Dtc\QueueBundle\DependencyInjection;
4
5
use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
6
use Symfony\Component\Config\Definition\Processor;
7
use Symfony\Component\DependencyInjection\ContainerBuilder;
8
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
9
use Symfony\Component\Config\FileLocator;
10
use Symfony\Component\DependencyInjection\Loader;
11
12
class DtcQueueExtension extends Extension
13
{
14 4
    public function load(array $configs, ContainerBuilder $container)
15
    {
16 4
        $processor = new Processor();
17 4
        $configuration = new Configuration();
18
19 4
        $config = $processor->processConfiguration($configuration, $configs);
20 4
        $this->configBeanstalkd($config, $container);
21 4
        $this->configRabbitMQ($config, $container);
22 4
        $this->configRedis($config, $container);
23
24 4
        $container->setParameter('dtc_queue.manager.job', $config['manager']['job']);
25 4
        $container->setParameter('dtc_queue.odm.document_manager', $config['odm']['document_manager']);
26 4
        $container->setParameter('dtc_queue.orm.entity_manager', $config['orm']['entity_manager']);
27 4
        $container->setParameter('dtc_queue.manager.run', isset($config['manager']['run']) ? $config['manager']['run'] : $config['manager']['job']);
28 4
        $container->setParameter('dtc_queue.manager.job_timing', isset($config['manager']['job_timing']) ? $config['manager']['job_timing'] : $container->getParameter('dtc_queue.manager.run'));
29 4
        $container->setParameter('dtc_queue.priority.direction', $config['priority']['direction']);
30 4
        $container->setParameter('dtc_queue.priority.max', $config['priority']['max']);
31 4
        $container->setParameter('dtc_queue.retry.max.retries', $config['retry']['max']['retries']);
32 4
        $container->setParameter('dtc_queue.retry.max.failures', $config['retry']['max']['failures']);
33 4
        $container->setParameter('dtc_queue.retry.max.exceptions', $config['retry']['max']['exceptions']);
34 4
        $container->setParameter('dtc_queue.retry.max.stalls', $config['retry']['max']['stalls']);
35 4
        $container->setParameter('dtc_queue.retry.auto.failure', $config['retry']['auto']['failure']);
36 4
        $container->setParameter('dtc_queue.retry.auto.exception', $config['retry']['auto']['exception']);
37 4
        $this->configClasses($config, $container);
38 4
        $this->configRecordTimings($config, $container);
39 4
        $this->configAdmin($config, $container);
40 4
        $this->configDeprecated($config, $container);
41
42
        // Load Grid if Dtc\GridBundle Bundle is registered
43 4
        $yamlLoader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
44
45 4
        $yamlLoader->load('queue.yml');
46 4
    }
47
48 4
    protected function configDeprecated(array $config, ContainerBuilder $container)
49
    {
50 4
        if (isset($config['default_manager'])) {
51
            $container->setParameter('dtc_queue.manager.job', $config['default_manager']);
52
        }
53 4
        if (isset($config['run_manager'])) {
54
            $container->setParameter('dtc_queue.manager.run', $config['run_manager']);
55
        }
56 4
        if (isset($config['job_timing_manager'])) {
57
            $container->setParameter('dtc_queue.manager.run', $config['job_timing_manager']);
58
        }
59 4
        if (isset($config['document_manager'])) {
60
            $container->setParameter('dtc_queue.odm.document_manager', $config['document_manager']);
61
        }
62 4
        if (isset($config['entity_manager'])) {
63
            $container->setParameter('dtc_queue.odm.entity_manager', $config['entity_manager']);
64
        }
65 4
        $this->configClassDeprecated($config, $container);
66 4
        $this->configOtherDeprecated($config, $container);
67 4
    }
68
69 4
    protected function configClassDeprecated(array $config, ContainerBuilder $container)
70
    {
71 4
        if (isset($config['class_job'])) {
72
            $container->setParameter('dtc_queue.class.job', $config['class_job']);
73
        }
74 4
        if (isset($config['class_job_archive'])) {
75
            $container->setParameter('dtc_queue.class.job_archive', $config['class_job_archive']);
76
        }
77 4
        if (isset($config['class_run'])) {
78
            $container->setParameter('dtc_queue.class.run', $config['class_run']);
79
        }
80 4
        if (isset($config['class_run_archive'])) {
81
            $container->setParameter('dtc_queue.class.run_archive', $config['class_run_archive']);
82
        }
83 4
        if (isset($config['class_job_timing'])) {
84
            $container->setParameter('dtc_queue.class.job_timing', $config['class_job_timing']);
85
        }
86 4
    }
87
88 4
    protected function configOtherDeprecated(array $config, ContainerBuilder $container)
89
    {
90 4
        if (isset($config['record_timings'])) {
91
            $container->setParameter('dtc_queue.timings.record', $config['record_timings']);
92
        }
93 4
        if (isset($config['record_timings_timezone_offset'])) {
94
            $container->setParameter('dtc_queue.timings.timezone_offset', $config['record_timings_timezone_offset']);
95
        }
96 4
        if (isset($config['record_timings_timezone_offset'])) {
97
            $container->setParameter('dtc_queue.timings.timezone_offset', $config['record_timings_timezone_offset']);
98
        }
99 4
        if (isset($config['priority_max'])) {
100
            $container->setParameter('dtc_queue.priority.max', $config['priority_max']);
101
        }
102 4
        if (isset($config['priority_direction'])) {
103
            $container->setParameter('dtc_queue.priority.direction', $config['priority_direction']);
104
        }
105 4
    }
106
107 4
    protected function configRedis(array $config, ContainerBuilder $container)
108
    {
109 4
        $container->setParameter('dtc_queue.redis.prefix', $config['redis']['prefix']);
110 4
        if (isset($config['redis']['snc_redis']['type'])) {
111
            $container->setParameter('dtc_queue.redis.snc_redis.type', $config['redis']['snc_redis']['type']);
112
            $container->setParameter('dtc_queue.redis.snc_redis.alias', $config['redis']['snc_redis']['alias']);
113 4
        } elseif (isset($config['redis']['predis']['dsn'])) {
114
            $container->setParameter('dtc_queue.redis.predis.dsn', $config['redis']['predis']['dsn']);
115 4
        } elseif (isset($config['redis']['predis']['connection_parameters']['host'])) {
116
            $container->setParameter('dtc_queue.redis.predis.connection_parameters', $config['redis']['predis']['connection_parameters']);
117 4
        } elseif (isset($config['redis']['phpredis']['host'])) {
118
            $container->setParameter('dtc_queue.redis.phpredis', $config['redis']['phpredis']);
119
        }
120 4
    }
121
122 4
    protected function configAdmin(array $config, ContainerBuilder $container)
123
    {
124 4
        $container->setParameter('dtc_queue.admin.chartjs', $config['admin']['chartjs']);
125 4
    }
126
127 4
    protected function configClasses(array $config, ContainerBuilder $container)
128
    {
129 4
        $container->setParameter('dtc_queue.class.job', isset($config['class']['job']) ? $config['class']['job'] : null);
130 4
        $container->setParameter('dtc_queue.class.job_archive', isset($config['class']['job_archive']) ? $config['class']['job_archive'] : null);
131 4
        $container->setParameter('dtc_queue.class.run', isset($config['class']['run']) ? $config['class']['run'] : null);
132 4
        $container->setParameter('dtc_queue.class.run_archive', isset($config['class']['run_archive']) ? $config['class']['run_archive'] : null);
133 4
        $container->setParameter('dtc_queue.class.job_timing', isset($config['class']['job_timing']) ? $config['class']['job_timing'] : null);
134 4
    }
135
136 4
    protected function configRecordTimings(array $config, ContainerBuilder $container)
137
    {
138 4
        $container->setParameter('dtc_queue.timings.record', isset($config['timings']['record']) ? $config['timings']['record'] : false);
139 4
        $container->setParameter('dtc_queue.timings.timezone_offset', $config['timings']['timezone_offset']);
140 4
    }
141
142 4
    protected function configRabbitMQ(array $config, ContainerBuilder $container)
143
    {
144 4
        if (isset($config['rabbit_mq'])) {
145 1
            foreach (['host', 'port', 'user', 'password'] as $value) {
146 1
                if (!isset($config['rabbit_mq'][$value])) {
147 1
                    throw new InvalidConfigurationException('dtc_queue: rabbit_mq must have '.$value.' in config.yml');
148
                }
149
            }
150 1
            $config['rabbit_mq']['queue_args']['max_priority'] = $config['priority']['max'];
151 1
            $container->setParameter('dtc_queue.rabbit_mq', $config['rabbit_mq']);
152
        }
153 4
    }
154
155 4
    protected function configBeanstalkd(array $config, ContainerBuilder $container)
156
    {
157 4
        if (isset($config['beanstalkd'])) {
158 1
            if (!isset($config['beanstalkd']['host'])) {
159 1
                throw new InvalidConfigurationException('dtc_queue: beanstalkd requires host in config.yml');
160
            }
161
        }
162
163 4
        if (isset($config['beanstalkd']['host'])) {
164 1
            $container->setParameter('dtc_queue.beanstalkd.host', $config['beanstalkd']['host']);
165
        }
166 4
        if (isset($config['beanstalkd']['tube'])) {
167 1
            $container->setParameter('dtc_queue.beanstalkd.tube', $config['beanstalkd']['tube']);
168
        }
169 4
    }
170
171 1
    public function getAlias()
172
    {
173 1
        return 'dtc_queue';
174
    }
175
}
176