1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- <?php
- namespace WorkflowBundle\Services;
- use OldSound\RabbitMqBundle\RabbitMq\ConsumerInterface;
- use PhpAmqpLib\Message\AMQPMessage;
- use Symfony\Component\DependencyInjection\ContainerInterface;
- class LogConsumer implements ConsumerInterface
- {
- /**
- * @var ContainerInterface
- */
- protected $serviceContainer;
- /**
- * @param ContainerInterface $serviceContainer
- */
- public function __construct(ContainerInterface $serviceContainer)
- {
- $this->serviceContainer = $serviceContainer;
- }
- /**
- * $msg will be an instance of `PhpAmqpLib\Message\AMQPMessage`
- * with the $msg->body being the data sent over RabbitMQ.
- *
- * @param AMQPMessage $msg
- */
- public function execute(AMQPMessage $msg)
- {
- $message = '';
- $level = '';
- $channel = '';
- try {
- $msgBody = json_decode($msg->body, true);
- if (!json_last_error() && isset($msgBody['message']) && !empty($msgBody['message'])) {
- $message = $msgBody['message'];
- $level = isset($msgBody['level_name']) ? $msgBody['level_name'] : $level;
- $channel = isset($msgBody['channel']) ? $msgBody['channel'] : $channel;
- }
- } catch (\Exception $ex) {
- $message = $ex->getMessage();
- }
-
- $log = $this->createLog($message, $level, $channel);
- if (is_null($log)) {
- var_dump('Error: log no creado');
- } else {
- var_dump(sprintf("ID: %s Message: %s", $log->getId(), $log->getMessage()));
- }
-
- return;
- }
-
- /**
- * Crea una entidad Log y la persiste
- *
- * @param string $message
- * @param string $level
- * @param string $channel
- *
- * @return \WorkflowBundle\Services\LogBundle\Entity\Log
- */
- private function createLog($message, $level, $channel)
- {
- $logClass = 'LogBundle\Entity\Log';
- if ($message !== '' && class_exists($logClass)) {
- $log = new $logClass();
- $log->setMessage($message);
- $log->setLevel($level);
- $log->setChannel($channel);
- $em = $this->serviceContainer->get('doctrine.orm.entity_manager');
- $validator = $this->serviceContainer->get('validator');
- if ($validator->validate($log)->count() == 0) {
- $em->persist($log);
- $em->flush($log);
- return $log;
- }
- }
-
- return null;
- }
- }
|