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; } }