|
@@ -31,21 +31,28 @@ class LogConsumer implements ConsumerInterface
|
|
|
*/
|
|
|
public function execute(AMQPMessage $msg)
|
|
|
{
|
|
|
- $message = '';
|
|
|
- $level = '';
|
|
|
- $channel = '';
|
|
|
+ $fields = [];
|
|
|
+ $logClass = 'LogBundle\Entity\Log';
|
|
|
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;
|
|
|
+ $json_error = json_last_error();
|
|
|
+ if (!$json_error) {
|
|
|
+ // se hace un date format previo
|
|
|
+ $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) {
|
|
|
- $message = $ex->getMessage();
|
|
|
+ $fields['message'] = $ex->getMessage();
|
|
|
}
|
|
|
|
|
|
- $log = $this->createLog($message, $level, $channel);
|
|
|
+ $log = $this->createLog($fields, $logClass);
|
|
|
if (is_null($log)) {
|
|
|
var_dump('Error: log no creado');
|
|
|
} else {
|
|
@@ -58,22 +65,26 @@ class LogConsumer implements ConsumerInterface
|
|
|
/**
|
|
|
* Crea una entidad Log y la persiste
|
|
|
*
|
|
|
- * @param string $message
|
|
|
- * @param string $level
|
|
|
- * @param string $channel
|
|
|
+ * @param array $fields
|
|
|
+ * @param string $logClass
|
|
|
*
|
|
|
* @return \WorkflowBundle\Services\LogBundle\Entity\Log
|
|
|
*/
|
|
|
- private function createLog($message, $level, $channel)
|
|
|
+ private function createLog($fields, $logClass = 'LogBundle\Entity\Log')
|
|
|
{
|
|
|
- $logClass = 'LogBundle\Entity\Log';
|
|
|
- if ($message !== '' && class_exists($logClass)) {
|
|
|
- $log = new $logClass();
|
|
|
- $log->setMessage($message);
|
|
|
- $log->setLevel($level);
|
|
|
- $log->setChannel($channel);
|
|
|
-
|
|
|
+ if (class_exists($logClass)) {
|
|
|
$em = $this->serviceContainer->get('doctrine.orm.entity_manager');
|
|
|
+
|
|
|
+ $log = new $logClass();
|
|
|
+ $log->setMessage($fields['message']);
|
|
|
+ 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);
|