/** * 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; }