/**
  *
  * 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()));
 }
예제 #2
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;
 }