Completed
Push — master ( 5fe2ea...bba9f0 )
by Matthew
13:23
created

DtcQueueExtension::configRabbitMQ()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 12
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 20

Importance

Changes 0
Metric Value
dl 0
loc 12
ccs 0
cts 12
cp 0
rs 9.2
c 0
b 0
f 0
cc 4
eloc 7
nc 4
nop 2
crap 20
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
    public function load(array $configs, ContainerBuilder $container)
15
    {
16
        $processor = new Processor();
17
        $configuration = new Configuration();
18
19
        $config = $processor->processConfiguration($configuration, $configs);
20
        $this->configBeanstalkd($config, $container);
21
        $this->configRabbitMQ($config, $container);
22
23
        $container->setParameter('dtc_queue.default_manager', $config['default_manager']);
24
        $container->setParameter('dtc_queue.document_manager', $config['document_manager']);
25
        $container->setParameter('dtc_queue.entity_manager', $config['entity_manager']);
26
        $container->setParameter('dtc_queue.run_manager', isset($config['run_manager']) ? $config['run_manager'] : $config['default_manager']);
27
        $container->setParameter('dtc_queue.priority_max', $config['priority_max']);
28
        $container->setParameter('dtc_queue.priority_direction', $config['priority_direction']);
29
        $this->configClasses($config, $container);
30
        $this->configRecordTimings($config, $container);
31
        $this->configAdmin($config, $container);
32
33
        // Load Grid if Dtc\GridBundle Bundle is registered
34
        $yamlLoader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
35
36
        $yamlLoader->load('queue.yml');
37
    }
38
39
    protected function configAdmin(array $config, ContainerBuilder $container)
40
    {
41
        $container->setParameter('dtc_queue.admin.chartjs', $config['admin']['chartjs']);
42
    }
43
44
    protected function configClasses(array $config, ContainerBuilder $container)
45
    {
46
        $container->setParameter('dtc_queue.class_job', isset($config['class_job']) ? $config['class_job'] : null);
47
        $container->setParameter('dtc_queue.class_job_archive', isset($config['class_job_archive']) ? $config['class_job_archive'] : null);
48
        $container->setParameter('dtc_queue.class_run', isset($config['class_run']) ? $config['class_run'] : null);
49
        $container->setParameter('dtc_queue.class_run_archive', isset($config['class_run_archive']) ? $config['class_run_archive'] : null);
50
        $container->setParameter('dtc_queue.class_job_timing', isset($config['class_job_timing']) ? $config['class_job_timing'] : null);
51
    }
52
53
    protected function configRecordTimings(array $config, ContainerBuilder $container)
54
    {
55
        $container->setParameter('dtc_queue.record_timings', isset($config['record_timings']) ? $config['record_timings'] : false);
56
        $container->setParameter('dtc_queue.record_timings_timezone_offset', $config['record_timings_timezone_offset']);
57
        if ($config['record_timings_timezone_offset'] > 24 || $config['record_timings_timezone_offset'] < -24) {
58
            throw new \InvalidArgumentException('Invalid record_timings_timezone_offset: '.$config['record_timings_timezone_offset']);
59
        }
60
    }
61
62
    protected function configRabbitMQ(array $config, ContainerBuilder $container)
63
    {
64
        if (isset($config['rabbit_mq'])) {
65
            foreach (['host', 'port', 'user', 'password'] as $value) {
66
                if (!isset($config['rabbit_mq'][$value])) {
67
                    throw new InvalidConfigurationException('dtc_queue: rabbit_mq must have '.$value.' in config.yml');
68
                }
69
            }
70
            $config['rabbit_mq']['queue_args']['max_priority'] = $config['priority_max'];
71
            $container->setParameter('dtc_queue.rabbit_mq', $config['rabbit_mq']);
72
        }
73
    }
74
75
    protected function configBeanstalkd(array $config, ContainerBuilder $container)
76
    {
77
        if (isset($config['beanstalkd'])) {
78
            if (!isset($config['beanstalkd']['host'])) {
79
                throw new InvalidConfigurationException('dtc_queue: beanstalkd requires host in config.yml');
80
            }
81
        }
82
83
        if (isset($config['beanstalkd']['host'])) {
84
            $container->setParameter('dtc_queue.beanstalkd.host', $config['beanstalkd']['host']);
85
        }
86
        if (isset($config['beanstalkd']['tube'])) {
87
            $container->setParameter('dtc_queue.beanstalkd.tube', $config['beanstalkd']['tube']);
88
        }
89
    }
90
91
    public function getAlias()
92
    {
93
        return 'dtc_queue';
94
    }
95
}
96