/** * * Tela de importação de arquivo CSV com registros de Computadores */ public function importarcsvAction(Request $request) { $form = $this->createFormBuilder()->add('arquivocsv', 'file', array('label' => 'Arquivo', 'attr' => array('accept' => '.csv')))->getForm(); if ($request->isMethod('POST')) { $form->bindRequest($request); if ($form['arquivocsv']->getData() instanceof \Symfony\Component\HttpFoundation\File\UploadedFile) { // Executa a importação do arquivo - grava no diretório web/upload/migracao $dirMigracao = realpath(dirname(__FILE__) . '/../../../../web/upload/migracao/'); $fileName = 'Comp_U' . $this->getUser()->getIdUsuario() . 'T' . time() . '.csv'; $form['arquivocsv']->getData()->move($dirMigracao, $fileName); $em = $this->getDoctrine()->getManager(); // Abre o arquivo salvo e começa a rotina de importação dos dados do CSV $csv = file($dirMigracao . '/' . $fileName); foreach ($csv as $k => $v) { // Valida a linha $v = explode(';', trim(str_replace(array('"', '\\N'), '', $v))); if (count($v) != 13) { continue; } $so = $this->getDoctrine()->getRepository('CacicCommonBundle:So')->find((int) $v[1]); $rede = $this->getDoctrine()->getRepository('CacicCommonBundle:Rede')->findOneByTeIpRede($v[2]); $comp = new Computador(); if ($so) { $comp->setIdSo($so); } if ($rede) { $comp->setIdRede($rede); } $comp->setTeNodeAddress($v[0]); $comp->setTePalavraChave($v[3]); $comp->setTeIpComputador($v[4]); $comp->setDtHrInclusao($v[5] ? new \Datetime($v[5]) : null); $comp->setDtHrUltAcesso($v[6] ? new \Datetime($v[6]) : null); $comp->setTeVersaoCacic($v[7]); $comp->setTeVersaoGercols($v[8]); $comp->setDtHrColetaForcadaEstacao($v[9] ? new \Datetime($v[9]) : null); $comp->setTeNomesCurtosModulos($v[10]); $comp->setIdConta($v[11]); $comp->setNmComputador($v[12]); $em->persist($comp); } $em->flush(); // Persiste os dados dos Computadores $this->get('session')->getFlashBag()->add('success', 'Importação realizada com sucesso!'); } else { $this->get('session')->getFlashBag()->add('error', 'Arquivo CSV inválido!'); } return $this->redirect($this->generateUrl('cacic_migracao_computador')); } return $this->render('CacicCommonBundle:Computador:importarcsv.html.twig', array('form' => $form->createView())); }
/** * 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; }