/** * @param $serie * @Route("/printer/{serie}", name="printer_counter_update") * @Method("POST") */ public function printerAction($serie, Request $request) { $em = $this->getDoctrine()->getManager(); $logger = $this->get('logger'); $status = $request->getContent(); $dados = json_decode($status, true); if (empty($dados)) { $logger->error("JSON INVÁLIDO!!!!!!!!!!!!!!!!!!! Erro no envio das informações da impressora {$serie}"); // Retorna erro se o JSON for inválido $error_msg = '{ "message": "JSON Inválido", "codigo": 1 }'; $response = new JsonResponse(); $response->setStatusCode('500'); $response->setContent($error_msg); return $response; } $logger->debug("Atualizando informações para a impressora com IP = {$serie}\n" . $status); $printer = $em->getRepository('CocarBundle:Printer')->findOneBy(array('serie' => $serie)); $ip_addr = $dados['ip_address']; if (empty($printer)) { $logger->error("COLETA: Impressora não cadastrada: {$serie}. Inserindo...."); // Insere impressora que não estiver cadastrada $printer = new Printer(); // FIXME: Deve ser retornado pelo Cocar $data = new \DateTime(); $printer->setCommunitySnmpPrinter('public'); $printer->setHost($ip_addr); $printer->setSerie($serie); $printer->setDescription('Impressora detectada automaticamente em ' . $data->format('d/m/Y')); $printer->setName("Impressora {$serie}"); } $counter = new PrinterCounter(); // Atualiza impressora sempre que alterar o serial $printer->setSerieSimpress(substr($serie, 0, 14)); if (!empty($dados['model'])) { $printer->setName($dados['model']); } if (!empty($dados['description'])) { $printer->setDescription($dados['description']); } if (!empty($dados['local'])) { $printer->setLocal($dados['local']); } if (!empty($dados['netmask'])) { $printer->setNetmask($dados['netmask']); } // Grava o contador $counter->setPrinter($printer); $counter->setPrints($dados['counter']); $counter->setDate($dados['counter_time']); try { $em->persist($printer); $em->flush(); $em->persist($counter); $em->flush(); } catch (\Exception $e) { // Ainda assim retorna como sucesso $logger->error("Entrada repetida para impressora " . $serie . "na data " . $dados['counter_time']); } $response = new JsonResponse(); $response->setStatusCode('200'); return $response; }