public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$container->setParameter('tolerance.aop.enabled', $config['aop']);
$loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
$loader->load('waiter.xml');
if ($config['aop']['enabled']) {
$loader->load('operations/aop.xml');
$this->loadAop($container, $config['aop']);
}
if ($config['operation_runner_listener']) {
$loader->load('operations/listeners.xml');
}
if ($config['tracer']['enabled']) {
$loader->load('tracer.xml');
$container->setParameter('tolerance.tracer.service_name', $config['tracer']['service_name']);
if (array_key_exists('zipkin', $config['tracer'])) {
if (array_key_exists('http', $config['tracer']['zipkin'])) {
$container->setParameter('tolerance.tracer.zipkin.http.base_url', $config['tracer']['zipkin']['http']['base_url']);
$tracer = 'tolerance.tracer.zipkin.http';
}
}
if (!isset($tracer)) {
throw new \InvalidArgumentException('No tracer configured');
}
if (null !== ($runner = $config['tracer']['operation_runner'])) {
$container->getDefinition($tracer)->addTag('tolerance.operation_wrapper', ['runner' => $runner, 'methods' => 'trace']);
}
$container->setAlias('tolerance.tracer', $tracer);
if ($container->getParameter('kernel.debug')) {
$loader->load('tracer/debug.xml');
}
if (interface_exists('GuzzleHttp\\ClientInterface')) {
if (version_compare(ClientInterface::VERSION, '6.0') >= 0) {
$loader->load('tracer/guzzle/6.x.xml');
} else {
$loader->load('tracer/guzzle/4.x-5.x.xml');
}
}
if ($config['tracer']['rabbitmq']['enabled']) {
$container->setParameter('tolerance.tracer.rabbitmq.enabled', true);
$container->setParameter('tolerance.tracer.rabbitmq.consumers', $config['tracer']['rabbitmq']['consumers']);
}
}
foreach ($config['operation_runners'] as $name => $operationRunner) {
$name = sprintf('tolerance.operation_runners.%s', $name);
$this->createOperationRunnerDefinition($container, $name, $operationRunner);
}
if (array_key_exists('metrics', $config)) {
$loader->load('metrics.xml');
$this->createMetricCollectors($container, $config['metrics']['collectors']);
$this->createMetricPublishers($container, $config['metrics']['publishers']);
// Configure the metrics command
$container->getDefinition('tolerance.metrics.command.collect_and_publish')->replaceArgument(0, new Reference($config['metrics']['command']['collector']))->replaceArgument(1, new Reference($config['metrics']['command']['publisher']));
// Configure the request listeners
if (array_key_exists('request', $config['metrics'])) {
$this->configureRequestListeners($container, $config['metrics']);
}
}
}