Esempio n. 1
0
 /**
  * @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;
 }