|
@@ -0,0 +1,98 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace WorkflowBundle\Services;
|
|
|
+
|
|
|
+use OldSound\RabbitMqBundle\RabbitMq\ConsumerInterface;
|
|
|
+use PhpAmqpLib\Message\AMQPMessage;
|
|
|
+use WebserviceBundle\Services\Webservice;
|
|
|
+use Symfony\Component\DependencyInjection\ContainerInterface;
|
|
|
+
|
|
|
+class LogConsumer implements ConsumerInterface
|
|
|
+{
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @var Webservice
|
|
|
+ */
|
|
|
+ protected $webservice = null;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @var string
|
|
|
+ */
|
|
|
+ protected $logPostUrl = null;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @var ContainerInterface
|
|
|
+ */
|
|
|
+ protected $serviceContainer;
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param ContainerInterface $serviceContainer
|
|
|
+ */
|
|
|
+ public function __construct(ContainerInterface $serviceContainer)
|
|
|
+ {
|
|
|
+ $this->serviceContainer = $serviceContainer;
|
|
|
+ if ($serviceContainer->has('webservice')) {
|
|
|
+ $this->webservice = $serviceContainer->get('webservice');
|
|
|
+ }
|
|
|
+ if ($serviceContainer->hasParameter('log_post_url')) {
|
|
|
+ $this->logPostUrl = $serviceContainer->getParameter('log_post_url');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * $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 = '';
|
|
|
+ try {
|
|
|
+ $msgBody = json_decode($msg->body, true);
|
|
|
+ if (!json_last_error() && isset($msgBody['message'])) {
|
|
|
+ $message = $msgBody['message'];
|
|
|
+ }
|
|
|
+ } catch (\Exception $ex) {
|
|
|
+ $message = $ex->getMessage();
|
|
|
+ }
|
|
|
+
|
|
|
+ $log = $this->createLog($message);
|
|
|
+ if (is_null($log)) {
|
|
|
+ var_dump('Error: log no creado');
|
|
|
+ } else {
|
|
|
+ var_dump($log);
|
|
|
+ }
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Crea una entidad Log y la persiste
|
|
|
+ *
|
|
|
+ * @param string $message
|
|
|
+ *
|
|
|
+ * @return \WorkflowBundle\Services\LogBundle\Entity\Log
|
|
|
+ */
|
|
|
+ private function createLog($message)
|
|
|
+ {
|
|
|
+ $logClass = 'LogBundle\Entity\Log';
|
|
|
+ if ($message && class_exists($logClass)) {
|
|
|
+ $log = new $logClass();
|
|
|
+ $log->setMessage($message);
|
|
|
+
|
|
|
+ $em = $this->serviceContainer->get('doctine.entity_manager');
|
|
|
+ $validator = $this->serviceContainer->get('validator');
|
|
|
+ if ($validator->validate($log)->count() == 0) {
|
|
|
+ $em->persist($log);
|
|
|
+ $em->flush($log);
|
|
|
+
|
|
|
+ return $log;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|