/** * Gera relatório com histórico de coletas para o computador/classe escolhidos * * @param Request $request * @param $idComputador * @param $classe * @return Response */ public function historicoAction(Request $request, $idComputador, $classe) { $em = $this->getDoctrine()->getManager(); $locale = $request->getLocale(); $logger = $this->get('logger'); $historico = $em->getRepository('CacicCommonBundle:ComputadorColetaHistorico')->listar($limit = 100, $idComputador, $classe); $saida = array(); foreach ($historico as $coletas) { #$logger->debug("333333333333333333333333333333 ".$coletas['nmPropertyName']. " ".$coletas['teClassPropertyValue']); $saida[$coletas['dtHrInclusao']->format('d-m-Y')][$coletas['nmPropertyName']] = TagValueHelper::getTableValues($coletas['teClassPropertyValue']); } return $this->render('CacicRelatorioBundle:Computador:historico.html.twig', array('saida' => $saida, 'classe' => $classe, 'idioma' => $locale)); }
public function getComputadorPreCole(Request $request, $te_so, $te_node_adress, $rede, $so, $ip_computador) { //recebe dados via POST, deCripata dados, e attribui a variaveis $computer_system = OldCacicHelper::deCrypt($request, $request->request->get('ComputerSystem'), true); $network_adapter = OldCacicHelper::deCrypt($request, $request->request->get('NetworkAdapterConfiguration'), true); $operating_system = OldCacicHelper::deCrypt($request, $request->request->get('OperatingSystem'), true); $te_versao_cacic = $request->request->get('te_versao_cacic'); $te_versao_gercols = $request->request->get('te_versao_gercols'); $data = new \DateTime('NOW'); //armazena data Atual //vefifica se existe SO coletado se não, insere novo SO $computador = $this->findOneBy(array('teNodeAddress' => $te_node_adress, 'idSo' => $so->getIdSo())); //inserção de dado se for um novo computador if (empty($computador)) { $computador = new Computador(); $computador->setTeNodeAddress($te_node_adress); $computador->setIdSo($so); $computador->setIdRede($rede); $computador->setDtHrInclusao($data); $computador->setTePalavraChave($request->get('PHP_AUTH_PW')); $computador->setAtivo(true); $this->getEntityManager()->persist($computador); } // Atualiza subrede se houve mudança de subrede para o computador #if ($computador->getIdRede() != $rede) { #error_log("Atualizando subrede paara o computador ".$computador->getTeIpComputador()." Antiga: ".$computador->getIdRede()->getNmRede()." | Nova: ".$rede->getNmRede()); # $computador->setIdRede($rede); #} $computador->setDtHrUltAcesso($data); $computador->setTeVersaoCacic($te_versao_cacic); $computador->setTeVersaoGercols($te_versao_gercols); $computador->setTeUltimoLogin(TagValueHelper::getValueFromTags('UserName', $computer_system)); $computador->setTeIpComputador($ip_computador); $computador->setNmComputador(TagValueHelper::getValueFromTags('Caption', $computer_system)); $computador->setAtivo(true); $this->getEntityManager()->persist($computador); $acoes = $this->getEntityManager()->getRepository('CacicCommonBundle:Acao')->findAll(); //inserção ações de coleta a nova maquina foreach ($acoes as $acao) { $acao_so = $this->getEntityManager()->getRepository('CacicCommonBundle:AcaoSo')->findBy(array('rede' => $rede, 'so' => $so, 'acao' => $acao)); if (empty($acao_so)) { $acao_so = new AcaoSo(); $acao_so->setRede($rede); $acao_so->setSo($so); $acao_so->setAcao($acao); $this->getEntityManager()->persist($acao_so); } } //persistir dados $this->getEntityManager()->flush(); return $computador; }
/** * [MODAL] Exibe dados do computador e informações sobre coleta */ public function detalharAction($idComputador, Request $request) { $logger = $this->container->get('logger'); //if ( ! $request->isXmlHttpRequest() ) // Verifica se é uma requisição AJAX // throw $this->createNotFoundException( 'Página não encontrada!' ); $d = $this->getDoctrine(); $computador = $d->getRepository('CacicCommonBundle:Computador')->find((int) $idComputador); $ultimo_acesso = $d->getRepository('CacicCommonBundle:LogAcesso')->ultimoUserName($idComputador); if (!$computador) { throw $this->createNotFoundException('Página não encontrada!'); } $usuario = $this->getUser()->getIdUsuario(); $nivel = $this->getDoctrine()->getRepository('CacicCommonBundle:Usuario')->nivel($usuario); if ($request->get('ativar')) { if (!$this->get('security.context')->isGranted('ROLE_ADMIN')) { throw $this->createAccessDeniedException('Operação disponível somente para administradores'); } $computador->setAtivo(true); $computador->setIdUsuarioExclusao(null); $computador->setDtHrExclusao(null); $d->getManager()->persist($computador); $d->getManager()->flush(); $this->get('session')->getFlashBag()->add('success', 'Computador ativado com sucesso!'); return $this->redirect($this->generateUrl($request->get('_route'), $request->get('_route_params'))); } if ($request->get('desativar')) { if (!$this->get('security.context')->isGranted('ROLE_ADMIN')) { throw $this->createAccessDeniedException('Operação disponível somente para administradores'); } $computador->setAtivo(false); $computador->setIdUsuarioExclusao($this->getUser()); $computador->setDtHrExclusao(new \DateTime()); $d->getManager()->persist($computador); $d->getManager()->flush(); $this->get('session')->getFlashBag()->add('success', 'Computador ativado com sucesso!'); return $this->redirect($this->generateUrl($request->get('_route'), $request->get('_route_params'))); } if ($request->get('forcarColeta')) { if (!$this->get('security.context')->isGranted('ROLE_ADMIN')) { throw $this->createAccessDeniedException('Operação disponível somente para administradores'); } $computador->setAtivo(true); $computador->setForcaColeta('true'); $d->getManager()->persist($computador); $d->getManager()->flush(); $this->get('session')->getFlashBag()->add('success', 'Coleta forçada com sucesso!'); return $this->redirect($this->generateUrl($request->get('_route'), $request->get('_route_params'))); } $coleta = $d->getRepository('CacicCommonBundle:ComputadorColeta')->getDadosColetaComputador($computador); $isNotebook = $computador->getIsNotebook(); //$logger->debug("isNotebook%%%%%%%%%%% $isNotebook"); $dadosColeta = array(); // Inicializa o array que agrupa os dados de coleta por Classe $software = array(); // Coloca a coleta de software num array separado $listaClasses = array(); $listaSoftwares = array(); foreach ($coleta as $v) { //$idClass = $v->getClassProperty()->getIdClass()->getIdClass(); // Vamos tratar primeiro a exceção, para o caso da classe ser software $propriedade = $v[0]->getClassProperty(); $classe = $propriedade->getIdClass()->getNmClassName(); $nome_propriedade = $propriedade->getNmPropertyName(); if ($classe == 'SoftwareList') { // O identificador do software está armazenado na propriedade // Coleta de Software $software[$nome_propriedade]['displayName'] = $v['displayName']; if (empty($v['displayName'])) { // Alguns softwares não têm nome. É absurdo mas acontece $software[$nome_propriedade]['displayName'] = $nome_propriedade; } $software[$nome_propriedade]['displayVersion'] = $v['displayVersion']; $software[$nome_propriedade]['URLInfoAbout'] = $v['URLInfoAbout']; $software[$nome_propriedade]['publisher'] = $v['publisher']; } else { // Outras coletas $dadosColeta[$classe][$nome_propriedade]['nmPropertyName'] = $propriedade->getNmPropertyName(); $dadosColeta[$classe][$nome_propriedade]['tePropertyDescription'] = $propriedade->getTePropertyDescription(); // Trata o valor antes de enviar $valor = TagValueHelper::getTableValues($v[0]->getTeClassPropertyValue()); $dadosColeta[$classe][$nome_propriedade]['teClassPropertyValue'] = $valor; } //if ( array_key_exists( $idClass, $dadosColeta ) ) // $dadosColeta[ $idClass ] = array(); //$dadosColeta[ $idClass ][] = $v; } // Única maneira de verificar se é ativo. Bug bizarro do PHP $sql = "SELECT (\n CASE WHEN ativo = 'f' THEN 'falso'\n ELSE 'verdadeiro'\n END) as show_ativo FROM computador WHERE id_computador = {$idComputador}\n "; $stmt = $d->getManager()->getConnection()->prepare($sql); $stmt->execute(); $ativo = $stmt->fetchAll(); $ativo = $ativo[0]['show_ativo']; return $this->render('CacicCommonBundle:Computador:detalhar.html.twig', array('computador' => $computador, 'ultimoAcesso' => $ultimo_acesso, 'dadosColeta' => $dadosColeta, 'software' => $software, 'ativo' => $ativo, 'nivel' => $nivel)); }
/** * Método responsável por enviar as configurações de Patrimônio necessarias ao Agente CACIC * @param Symfony\Component\HttpFoundation\Request $request */ public function mapaAction(Request $request) { $logger = $this->get('logger'); $em = $this->getDoctrine()->getManager(); OldCacicHelper::autenticaAgente($request); $strNetworkAdapterConfiguration = OldCacicHelper::deCrypt($request, $request->get('NetworkAdapterConfiguration')); $strComputerSystem = OldCacicHelper::deCrypt($request, $request->get('ComputerSystem')); $strOperatingSystem = OldCacicHelper::deCrypt($request, $request->request->get('OperatingSystem')); $te_node_address = TagValueHelper::getValueFromTags('MACAddress', $strNetworkAdapterConfiguration); $netmask = TagValueHelper::getValueFromTags('IPSubnet', $strNetworkAdapterConfiguration); $te_so = $request->get('te_so'); $ultimo_login = TagValueHelper::getValueFromTags('UserName', $strComputerSystem); $ip_computador = $request->get('te_ip_computador'); $versaoAgente = $request->get('te_versao_cacic'); if (empty($ip_computador)) { $ip_computador = TagValueHelper::getValueFromTags('IPAddress', $strNetworkAdapterConfiguration); } if (empty($ip_computador)) { $ip_computador = $request->getClientIp(); } // Caso não tenha encontrado, tenta pegar a variável da requisição if (empty($te_node_address)) { $te_node_address = $request->get('te_node_address'); } if (empty($netmask)) { $netmask = $request->get('netmask'); } //vefifica se existe SO coletado se não, insere novo SO $so = $em->getRepository('CacicCommonBundle:So')->createIfNotExist($te_so); $rede = $em->getRepository('CacicCommonBundle:Rede')->getDadosRedePreColeta($ip_computador, $netmask); // Retorna falso por padrão $modPatrimonio = "false"; if (empty($te_node_address) || empty($so)) { $this->get('logger')->error("Erro na operação de getMapa. IP = {$ip_computador} Máscara = {$netmask}. MAC = {$te_node_address}. SO = {$te_so}"); $response = new Response(); $response->headers->set('Content-Type', 'xml'); return $this->render('CacicWSBundle:Default:mapa.xml.twig', array('mensagem' => "", 'modPatrimonio' => "false"), $response); } $computador = $em->getRepository('CacicCommonBundle:Computador')->getComputadorPreCole($request, $te_so, $te_node_address, $rede, $so, $ip_computador); $idComputador = $computador->getIdComputador(); $logger->debug("Teste de Conexão GET-MAPA ! Ip do computador: {$ip_computador} Máscara da rede: {$netmask} MAC Address: {$te_node_address} ID Computador: {$idComputador}"); $patr = $em->getRepository('CacicCommonBundle:AcaoRede')->findOneBy(array('rede' => $rede->getIdRede(), 'acao' => 'col_patr')); /** * Se o módulo estiver habilitado, verifica se existe coleta de patrimônio */ if (!empty($patr)) { $result = $em->getRepository('CacicCommonBundle:ComputadorColeta')->getDadosColetaComputador($computador, 'Patrimonio'); /** * Caso não exista nenhuma coleta, envia "true" para o agente. */ if (empty($result)) { $logger->debug("COLETA DE PATRIMÔNIO INEXISTENTE!!! COLETANDO..."); $modPatrimonio = "true"; } } /** * Força coleta do patrimônio */ $forcaPatrimonio = $computador->getForcaPatrimonio(); if ($forcaPatrimonio == "S") { $logger->debug("COLETA FORÇADA DE PATRIMÔNIO: {$forcaPatrimonio}"); $modPatrimonio = "true"; $computador->setForcaPatrimonio('N'); $em->persist($computador); } $em->flush(); /** * Mensagem a ser exibida na tela de Pop-Up do patrimônio */ $mensagem = $em->getRepository('CacicCommonBundle:ConfiguracaoPadrao')->findOneBy(array('idConfiguracao' => 'msg_popup_patrimonio')); if (!empty($mensagem)) { $mensagem = $mensagem->getVlConfiguracao(); } else { $mensagem = "Pop-up de patrimônio"; } //$mensagem = implode('',$mensagem); $logger->debug("RESULTADO DO PATRIMÔNIO: {$modPatrimonio}"); // Retorna patrimônio $response = new Response(); $response->headers->set('Content-Type', 'xml'); return $this->render('CacicWSBundle:Default:mapa.xml.twig', array('mensagem' => $mensagem, 'modPatrimonio' => $modPatrimonio), $response); }
/** * Método responsável por verificar e e enviar os Hashes ao Agente CACIC * @param Symfony\Component\HttpFoundation\Request $request */ public function updateAction(Request $request) { $logger = $this->get('logger'); OldCacicHelper::autenticaAgente($request); $strNetworkAdapterConfiguration = OldCacicHelper::deCrypt($request, $request->get('NetworkAdapterConfiguration')); $te_node_address = TagValueHelper::getValueFromTags('MACAddress', $strNetworkAdapterConfiguration); $netmask = TagValueHelper::getValueFromTags('IPSubnet', $strNetworkAdapterConfiguration); $ip_computador = $request->get('te_ip_computador'); if (empty($ip_computador)) { $ip_computador = TagValueHelper::getValueFromTags('IPAddress', $strNetworkAdapterConfiguration); } if (empty($ip_computador) or $ip_computador == '127.0.0.1') { $ip_computador = $request->getClientIp(); } /** * Caso não tenha encontrado, tenta pegar a variável da requisição */ if (empty($te_node_address)) { $te_node_address = $request->get('te_node_address'); } if (empty($netmask)) { $netmask = $request->get('netmask'); } /** * Executa atualização forçada se algum dos parâmetros obrigatórios estiver vazio */ $rede = $this->getDoctrine()->getRepository('CacicCommonBundle:Rede')->getDadosRedePreColeta($ip_computador, $netmask); $local = $rede->getIdLocal(); $configs = $this->getDoctrine()->getRepository('CacicCommonBundle:ConfiguracaoLocal')->listarPorLocal($local->getIdLocal()); $rede = $this->getDoctrine()->getRepository('CacicCommonBundle:Rede')->getDadosRedePreColeta($ip_computador, $netmask); $redes_versoes_modulos = $this->getDoctrine()->getRepository('CacicCommonBundle:RedeVersaoModulo')->findBy(array('idRede' => $rede->getIdRede())); $nm_user_login_updates = OldCacicHelper::enCrypt($request, $rede->getNmUsuarioLoginServUpdates()); $senha_serv_updates = OldCacicHelper::enCrypt($request, $rede->getTeSenhaLoginServUpdates()); $logger->debug("Teste de Conexão GET-UPDATE! Ip do computador: {$ip_computador} Máscara da rede: {$netmask} MAC Address: {$te_node_address}"); $response = new Response(); $response->headers->set('Content-Type', 'xml'); return $this->render('CacicWSBundle:Default:update.xml.twig', array('configs' => $configs, 'rede' => $rede, 'redes_versoes_modulos' => $redes_versoes_modulos, 'main_program' => OldCacicHelper::CACIC_MAIN_PROGRAM_NAME . '.exe', 'folder_name' => OldCacicHelper::CACIC_LOCAL_FOLDER_NAME, 'nm_user_login_updates' => $nm_user_login_updates, 'senha_serv_updates' => $senha_serv_updates, 'cs_compress' => $request->get('cs_compress'), 'cs_cipher' => $request->get('cs_cipher'), 'ws_folder' => OldCacicHelper::CACIC_WEB_SERVICES_FOLDER_NAME), $response); }
/** * Processa informações de coleta * * @param $strNewClassValues * @param $arrCollectsDefClasses * @param $strCollectType * @param $strClassName * @param $computador */ public function coletaGeral($strNewClassValues, $arrCollectsDefClasses, $strCollectType, $strClassName, $computador) { $logger = $this->get('logger'); $logger->debug("Processando classe WMI: {$strClassName}"); // Armazeno todas as propriedades dessa classe enviadas pela requisição $arrTagsNames = TagValueHelper::getTagsFromValues($strNewClassValues); // Agora gravo todas as propriedades dessa classe na tabela de computadores foreach ($arrTagsNames as $classPropertyName) { $logger->debug("Processando a proriedade WMI {$classPropertyName} para a classe {$strClassName}"); // Pega classe $idClass = $this->getDoctrine()->getRepository('CacicCommonBundle:Classe')->findOneBy(array('nmClassName' => $strClassName)); // Caso a propriedade ainda não esteja cadastrada no banco, crio na hora if (array_key_exists($classPropertyName, $arrCollectsDefClasses[$strCollectType][$strClassName])) { // Somente armazeno o valor que já existe $idClassProperty = $arrCollectsDefClasses[$strCollectType][$strClassName][$classPropertyName]['idClassProperty']; $logger->debug("Propriedade encontrada: {$classPropertyName} id_class_property = {$idClassProperty}. Apenas atualizar"); } else { // Se não existir cria a propriedade $logger->info("Criando propriedade {$classPropertyName} para a classe {$strClassName}"); $classPropertyObject = new ClassProperty(); $classPropertyObject->setIdClass($idClass); $classPropertyObject->setNmPropertyName($classPropertyName); $classPropertyObject->setTePropertyDescription('On the fly created Property'); $this->getDoctrine()->getManager()->persist($classPropertyObject); $this->getDoctrine()->getManager()->flush(); // Finalmente adiciono no array de classes e propriedades $idClassProperty = $classPropertyObject->getIdClassProperty(); $property = array('idClassProperty' => $idClassProperty, 'nmFunctionPreDb' => null); $arrCollectsDefClasses[$strCollectType][$strClassName][$classPropertyName] = $property; } //error_log("888888888888888888888888888888888888888888888: $strClassName | $idClassProperty | $classPropertyName"); // Chama função que grava a propriedade $this->gerColsSetProperty($classPropertyName, $strNewClassValues, $idClassProperty, $computador); } }