Esempio n. 1
0
 /**
  * Update computador. JSON Recebido:
  *
  * {
  *       "host": "127.0.0.1",
  *       "mac_address": "00:00:00:00:00:00",
  *       "ping_date": "2015-12-03 10:44:55.614790",
  *       "network_ip": "10.209.111.0",
  *       "local": "DEPEX",
  *       "netmask": "255.255.255.0",
  *       "so_name": "Microsoft Windows Vista SP0 - SP2, Server 2008, or Windows 7 Ultimate",
  *       "so_version": "Microsoft Windows Vista SP0 - SP2, Server 2008, or Windows 7 Ultimate",
  *       "accuracy": "100",
  *       "so_vendor": "Microsoft",
  *       "so_os_family": "Windows",
  *       "so_type": "general purpose",
  *       "so_cpe": ""
  * }
  *
  * @param $host
  * @Route("/computador/{host}", name="computador_ping")
  * @Method("POST")
  *
  */
 public function computadorPingAction($host, 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 do computador {$host}");
         // 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 o computador com IP = {$host}\n" . $status);
     // Primeiro procura computador pelo MAC
     if (!empty($dados['mac_address'])) {
         $computador = $em->getRepository("CocarBundle:Computador")->findOneBy(array('mac_address' => $dados['mac_address']));
         // Ve se ja existe um de mesmo IP cadastrado
         $computador_ip = $em->getRepository("CocarBundle:Computador")->findOneBy(array('host' => $dados['host']));
         if (empty($computador) && empty($computador_ip)) {
             // Nao achei nem pelo MAC nem pelo IP. Cria um computador
             $logger->debug("Adicionando computador com IP = " . $dados['host'] . " e MAC = " . $dados['mac_address']);
             $computador = new Computador();
         } elseif (empty($computador) && !empty($computador_ip)) {
             // Nao achei pelo MAC, mas achei pelo IP. Considera esse
             $computador = $computador_ip;
         } elseif (!empty($computador_ip)) {
             // Aqui o MAC não é vazio nem o IP. Verifica se é uma atualização de MAC
             $ip_old = $computador_ip->getHost();
             $ip = $computador->getHost();
             if ($ip != $ip_old) {
                 $logger->debug("Atualização de IP. Adicionando MAC " . $dados['mac_address'] . " para o IP {$ip}. Removendo MAc do IP {$ip_old}");
                 // O MAC mudou de IP. O IP velho fica sem MAC
                 $computador_ip->setMacAddress(null);
                 $em->persist($computador_ip);
             }
         } else {
             // Para todos os outros casos considero somente o MAC atual. Não precisa fazer nada
         }
     } else {
         $computador = $em->getRepository("CocarBundle:Computador")->findOneBy(array('host' => $dados['host']));
         if (empty($computador)) {
             // Cria o computador
             $computador = new Computador();
         }
     }
     // Adiciona informações da coleta
     $computador->setHost($dados['host']);
     $computador->setMacAddress($dados['mac_address']);
     $computador->setLocal($dados['local']);
     $computador->setName($dados['name']);
     $computador->setNetmask($dados['netmask']);
     $computador->setAccuracy($dados['accuracy']);
     $computador->setSoCpe($dados['so_cpe']);
     $computador->setSoName($dados['so_name']);
     $computador->setSoOsFamily($dados['so_os_family']);
     $computador->setSoType($dados['so_type']);
     $computador->setSoVendor($dados['so_vendor']);
     $computador->setSoVersion($dados['so_version']);
     // Verifica se o Cacic esta instalado e procura o computador
     $cacic = $this->container->get('kernel')->getBundle('CacicCommonBundle');
     if (!empty($cacic)) {
         $cacic_id = $computador->getCacicId();
         if (empty($cacic_id)) {
             // Procura primeiro pelo MAC
             $cacic_comp = $em->getRepository("CacicCommonBundle:Computador")->findOneBy(array('teNodeAddress' => $computador->getMacAddress()));
             if (empty($cacic_comp)) {
                 $cacic_comp = $em->getRepository("CacicCommonBundle:Computador")->findOneBy(array('teIpComputador' => $computador->getHost()));
             }
             if (!empty($cacic_comp)) {
                 // Vê se o computador é considerado ativo no Cacic
                 $computador->setCacicId($cacic_comp->getIdComputador());
                 $computador->setActive($cacic_comp->getAtivo());
             }
         } else {
             $cacic_comp = $em->getRepository("CacicCommonBundle:Computador")->find($cacic_id);
             $computador->setActive($cacic_comp->getAtivo());
         }
     }
     // Registra o ping
     $ping = new PingComputador();
     $ping->setComputador($computador);
     $ping_date = new \DateTime($dados['ping_date']);
     $ping->setDate($ping_date);
     // Persiste as informações
     try {
         $em->persist($computador);
         $em->flush();
         $em->persist($ping);
         $em->flush();
     } catch (\Exception $e) {
         // Ainda assim retorna como sucesso
         $logger->error("Entrada repetida para computador " . $dados['host'] . " na data " . $dados['ping_date']);
         $logger->error($e->getMessage());
     }
     // Se tudo deu certo, retorna
     $response = new JsonResponse();
     $response->setStatusCode('200');
     return $response;
 }
Esempio n. 2
0
 /**
  * Add printerCounter
  *
  * @param PrinterCounter $printerCounter
  * @return Entity
  */
 public function addPingComputador(PingComputador $pingComputador)
 {
     $pingComputador->setComputador($this);
     $this->pingComputador[] = $pingComputador;
     return $this;
 }