コード例 #1
0
 /**
  * Função para identificar o computador
  *
  * @param $dados JSON da requisitção
  * @param Request $request
  * @return Computador|null|object Computador identificado
  */
 public function getComputador($dados, Request $request)
 {
     $logger = $this->get('logger');
     $em = $this->getDoctrine()->getManager();
     $so_json = $dados['computador']['operatingSystem'];
     $rede_json = $dados['computador']['networkDevices'];
     // Eduardo: 2015-02-05
     // Verifica o caso da rede aparecer vazia
     $rede1 = @$rede_json[0];
     if (empty($rede1)) {
         $logger->error("COMPUTADOR: erro na identificação da rede. JSON sem informações de rede válidas. IP do computador: " . $request->getClientIp());
         $logger->error(print_r($dados, true));
         return null;
     }
     // Eduardo: 2015-05-18
     // Verifica se o nome do SO existe e não é vazio
     if (empty($so_json)) {
         $logger->error("COMPUTADOR: SO não identificado! JSON não enviou o SO");
         $logger->error(print_r($so_json, true));
         return null;
     }
     $nomeOs = @$so_json['nomeOs'];
     if (empty($nomeOs)) {
         $logger->error("COMPUTADOR: SO vazio! So com nome vazio enviado.");
         $logger->error(print_r($so_json, true));
         return null;
     }
     $te_node_address = $rede1['mac'];
     $ip_computador = $rede1['ipv4'];
     $netmask = $rede1['netmask_ipv4'];
     $usuario = $dados['computador']['usuario'];
     $nmComputador = $dados['computador']['nmComputador'];
     $versaoAgente = $dados['computador']['versaoAgente'];
     // Atualiza versão do GerCols se existir
     if (array_key_exists('versaoGercols', $dados['computador'])) {
         $versaoGercols = $dados['computador']['versaoGercols'];
     } else {
         $versaoGercols = null;
     }
     // TESTES: Se IP for vazio, tenta pegar da conexão
     if (empty($ip_computador) || $ip_computador == '127.0.0.1') {
         $ip_computador = $request->getClientIp();
     }
     // Pega rede e SO
     $rede = $em->getRepository('CacicCommonBundle:Rede')->getDadosRedePreColeta($ip_computador, $netmask);
     $so = $em->getRepository('CacicCommonBundle:So')->createIfNotExist($nomeOs);
     $tipo = $so->getTipo();
     if (array_key_exists('tipo', $so_json)) {
         if (!empty($so_json['tipo'])) {
             $tipo_so = $em->getRepository('CacicCommonBundle:TipoSo')->createIfNotExist($so_json['tipo']);
         } else {
             // Se não encontrar o tipo considera Windows como padrão
             $tipo_so = $em->getRepository("CacicCommonBundle:TipoSo")->findOneBy(array('tipo' => 'windows'));
         }
         $so->setTipo($tipo_so);
         $em->persist($so);
     } elseif (empty($tipo)) {
         // Considera Windows por padrão
         $tipo_so = $em->getRepository("CacicCommonBundle:TipoSo")->findOneBy(array('tipo' => 'windows'));
         $so->setTipo($tipo_so);
         $em->persist($so);
     }
     // Regra: MAC e SO são únicos e não podem ser nulos
     // Se SO ou MAC forem vazios, tenta atualizar forçadamente
     if (empty($te_node_address) || empty($so)) {
         $logger->error("COMPUTADOR: Erro na identificação do computador. IP = {$ip_computador} Máscara = {$netmask}. MAC = {$te_node_address}. SO =" . $nomeOs);
         return null;
     }
     $computador = $em->getRepository('CacicCommonBundle:Computador')->findOneBy(array('teNodeAddress' => $te_node_address, 'idSo' => $so));
     $data = new \DateTime('NOW');
     //armazena data Atual
     //2 - Insere computador que não existe
     if (empty($computador)) {
         $logger->debug("Inserindo novo computador para MAC = {$te_node_address} e SO = " . $so_json['nomeOs']);
         $computador = new Computador();
         $computador->setTeNodeAddress($te_node_address);
         $computador->setIdSo($so);
         $computador->setIdRede($rede);
         $computador->setDtHrInclusao($data);
         $computador->setTeIpComputador($ip_computador);
         $computador->setDtHrUltAcesso($data);
         $computador->setTeVersaoCacic($versaoAgente);
         $computador->setTeVersaoGercols($versaoGercols);
         $computador->setNmComputador($nmComputador);
         $computador->setAtivo(true);
         if (!empty($usuario) or $usuario != "0") {
             $computador->setTeUltimoLogin($usuario);
         }
         $em->persist($computador);
     } else {
         $logger->debug("Atualizando hora de último acesso do computador para MAC = {$te_node_address} e SO = " . $so_json['nomeOs']);
         $computador->setIdSo($so);
         $computador->setIdRede($rede);
         $computador->setDtHrUltAcesso($data);
         $computador->setTeIpComputador($ip_computador);
         $computador->setTeUltimoLogin($usuario);
         $computador->setTeVersaoCacic($versaoAgente);
         $computador->setTeVersaoGercols($versaoGercols);
         $computador->setNmComputador($nmComputador);
         $computador->setAtivo(true);
         //Atualiza hora de inclusão
         $em->persist($computador);
     }
     return $computador;
 }