123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- <?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)
- {
- $fields = [];
- $logClass = 'LogBundle\Entity\Log';
- try {
- $msgBody = json_decode($msg->body, true);
- $json_error = json_last_error();
- if (!$json_error) {
- // se hace un date format previo
- if (isset($msgBody['datetime']) && isset($msgBody['datetime']['date'])) {
- $d = new \DateTime($msgBody['datetime']['date']);
- } else {
- $d = new DateTime("now");
- }
- $fields['dateCreated'] = $d;
- $fields['singleMessage'] = isset($msgBody['message']) ? $msgBody['message'] : "";
- $fields['context'] = isset($msgBody['context']) ? json_encode($msgBody['context']) : "";
- $fields['levelName'] = isset($msgBody['level_name']) ? $msgBody['level_name'] : "";
- $fields['channel'] = isset($msgBody['channel']) ? $msgBody['channel'] : "";
- $fields['extra'] = isset($msgBody['extra']) ? json_encode($msgBody['extra']) : "";
- $fields['exchange'] = $msg->has('exchange') ? $msg->get('exchange') : "";
- $fields['routingKey'] = $msg->has('routing_key') ? $msg->get('routing_key') : "";
- $msgBody['datetime'] = date('Y-m-d H:i:s', strtotime($msgBody['datetime']['date']));
- $fields['message'] = $this->serviceContainer->get('monolog_line_formatter')->format($msgBody);
- if (isset($msgBody['context']['deviceId']) && isset($msgBody['context']['deviceType'])) {
- $logClass = 'LogBundle\Entity\DeviceLog';
- $fields['deviceId'] = $msgBody['context']['deviceId'];
- $fields['deviceType'] = $msgBody['context']['deviceType'];
- }
- } else {
- $fields['message'] = "Error json: {$json_error}";
- }
- } catch (\Exception $ex) {
- $fields['message'] = $ex->getMessage();
- }
- $log = $this->createLog($fields, $logClass);
- 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 array $fields
- * @param string $logClass
- *
- * @return \WorkflowBundle\Services\LogBundle\Entity\Log
- */
- private function createLog($fields, $logClass = 'LogBundle\Entity\Log')
- {
- if (class_exists($logClass)) {
- $em = $this->serviceContainer->get('doctrine.orm.entity_manager');
- $log = new $logClass();
- $log->setMessage($fields['message']);
- if ($logClass == 'LogBundle\Entity\Log') {
- if (isset($fields['singleMessage'])) {
- $log->setSingleMessage(substr($fields['singleMessage'], 0, 128));
- } else {
- $log->setSingleMessage("");
- }
- if (isset($fields['dateCreated'])) {
- $log->setDateCreated($fields['dateCreated']);
- } else {
- $log->setDateCreated(new DateTime("now"));
- }
- if (isset($fields['context'])) {
- $log->setContext(substr($fields['context'], 0, 128));
- } else {
- $log->setContext("");
- }
- if (isset($fields['levelName'])) {
- $log->setLevelName(substr($fields['levelName'], 0, 32));
- } else {
- $log->setLevelName("");
- }
- if (isset($fields['channel'])) {
- $log->setChannel(substr($fields['channel'], 0, 32));
- } else {
- $log->setChannel("");
- }
- if (isset($fields['extra'])) {
- $log->setExtra(substr($fields['extra'], 0, 128));
- } else {
- $log->setExtra("");
- }
- if (isset($fields['exchange'])) {
- $log->setExchange(substr($fields['exchange'], 0, 32));
- } else {
- $log->setExchange("");
- }
- if (isset($fields['routingKey'])) {
- $log->setRoutingKey(substr($fields['routingKey'], 0, 32));
- } else {
- $log->setRoutingKey("");
- }
- }
- if (isset($fields['deviceId']) && isset($fields['deviceType'])) {
- $device = $em->getRepository('LicenseBundle:Device')->findOneBy([
- 'deviceId' => $fields['deviceId'],
- 'deviceType' => $fields['deviceType'],
- ]);
- $log->setDevice($device);
- }
- $validator = $this->serviceContainer->get('validator');
- if ($validator->validate($log)->count() == 0) {
- $em->persist($log);
- $em->flush($log);
- return $log;
- }
- }
- return null;
- }
- }
|