Skip to content

Commit

Permalink
Merge pull request php-amqplib#17 from marcw/feat-data-collector
Browse files Browse the repository at this point in the history
Adds Configuration class and data collector
  • Loading branch information
videlalvaro committed Feb 2, 2012
2 parents 365e756 + 3db3910 commit 090908e
Show file tree
Hide file tree
Showing 7 changed files with 402 additions and 182 deletions.
48 changes: 48 additions & 0 deletions DataCollector/MessageDataCollector.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php

namespace OldSound\RabbitMqBundle\DataCollector;

use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\HttpKernel\DataCollector\DataCollector;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

/**
* MessageDataCollector
*
* @author Marc Weistroff <marc.weistroff@sensio.com>
*/
class MessageDataCollector extends DataCollector
{
private $channels;

public function __construct($channels)
{
$this->channels = $channels;
$this->data = array();
}

function collect(Request $request, Response $response, \Exception $exception = null)
{
foreach ($this->channels as $channel) {
foreach ($channel->getBasicPublishLog() as $log) {
$this->data[] = $log;
}
}
}

public function getName()
{
return 'rabbit_mq';
}

public function getPublishedMessagesCount()
{
return count($this->data);
}

public function getPublishedMessagesLog()
{
return $this->data;
}
}
145 changes: 145 additions & 0 deletions DependencyInjection/Configuration.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
<?php

namespace OldSound\RabbitMqBundle\DependencyInjection;

use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
use Symfony\Component\Config\Definition\Builder\NodeBuilder;

/**
* Configuration
*
* @author Marc Weistroff <marc.weistroff@sensio.com>
*/
class Configuration implements ConfigurationInterface
{
public function addExchangeConfiguration(NodeBuilder $nb, array $defaultValues = array())
{
$defaults = array(
'passive' => false,
'durable' => true,
'auto_delete' => false,
'internal' => false,
'nowait' => false,
'arguments' => null,
'tickets' => null,
);

$defaults = array_merge($defaults, $defaultValues);

return $nb
->arrayNode('exchange_options')
->children()
->scalarNode('name')->end()
->scalarNode('type')->end()
->booleanNode('passive')->defaultValue($defaults['passive'])->end()
->booleanNode('durable')->defaultValue($defaults['durable'])->end()
->booleanNode('auto_delete')->defaultValue($defaults['auto_delete'])->end()
->booleanNode('internal')->defaultValue($defaults['internal'])->end()
->booleanNode('nowait')->defaultValue($defaults['nowait'])->end()
->scalarNode('arguments')->defaultValue($defaults['arguments'])->end()
->scalarNode('ticket')->defaultValue($defaults['tickets'])->end()
->end()
->end()
;
}

public function addQueueConfiguration(NodeBuilder $nb)
{
return $nb
->arrayNode('queue_options')
->children()
->scalarNode('name')->end()
->booleanNode('passive')->defaultFalse()->end()
->booleanNode('durable')->defaultTrue()->end()
->booleanNode('exclusive')->defaultFalse()->end()
->booleanNode('auto_delete')->defaultFalse()->end()
->booleanNode('nowait')->defaultFalse()->end()
->scalarNode('arguments')->defaultNull()->end()
->scalarNode('ticket')->defaultNull()->end()
->end()
->end()
;
}

public function getConfigTreeBuilder()
{
$tb = new TreeBuilder();
$node = $tb
->root('old_sound_rabbit_mq')
->children()
->booleanNode('debug')->defaultValue('%kernel.debug%')->end()
->arrayNode('connections')
->useAttributeAsKey('key')
->addDefaultsIfNotSet()
->canBeUnset()
->prototype('array')
->children()
->scalarNode('host')->defaultValue('localhost')->end()
->scalarNode('port')->defaultValue(5672)->end()
->scalarNode('user')->defaultValue('guest')->end()
->scalarNode('password')->defaultValue('guest')->end()
->scalarNode('vhost')->defaultValue('/')->end()
->end()
->end()
->end()
// producers
->arrayNode('producers')
->canBeUnset()
->useAttributeAsKey('key')
->prototype('array')
->children()
->scalarNode('connection')->defaultValue('default')->end();
$node = $this->addExchangeConfiguration($node, array('durable' => false, 'auto_delete' => true, 'internal' => false))
->end()
->end()
->end()
// consumers
->arrayNode('consumers')
->canBeUnset()
->useAttributeAsKey('key')
->prototype('array')
->children()
->scalarNode('connection')->defaultValue('default')->end();
$node = $this->addExchangeConfiguration($node);
$node = $this->addQueueConfiguration($node)
->scalarNode('callback')->end()
->end()
->end()
->end()
->arrayNode('rpc_clients')
->canBeUnset()
->useAttributeAsKey('key')
->prototype('array')
->children()
->scalarNode('connection')->defaultValue('default')->end()
->end()
->end()
->end()
->arrayNode('rpc_servers')
->canBeUnset()
->useAttributeAsKey('key')
->prototype('array')
->children()
->scalarNode('connection')->defaultValue('default')->end()
->scalarNode('callback')->end()
->end()
->end()
->end()
->arrayNode('anon_consumers')
->canBeUnset()
->useAttributeAsKey('key')
->prototype('array')
->children()
->scalarNode('connection')->defaultValue('default')->end();
$this->addExchangeConfiguration($node)
->scalarNode('callback')->end()
->end()
->end()
->end()
;

return $tb;
}
}

Loading

0 comments on commit 090908e

Please sign in to comment.