/**
  *  Método responsável por Verificar comunicação entre Agente CACIC
  *  @param Symfony\Component\HttpFoundation\Request $request
  */
 public function testAction(Request $request)
 {
     $logger = $this->get('logger');
     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) or $ip_computador == '127.0.0.1') {
         $ip_computador = $request->getClientIp();
     }
     $logger->debug("Teste de Conexão GET-TEST! Ip do computador: {$ip_computador} Máscara da rede: {$netmask}");
     // 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
     if (!empty($te_so)) {
         $so = $this->getDoctrine()->getRepository('CacicCommonBundle:So')->createIfNotExist($te_so);
     } else {
         $so = null;
     }
     $rede = $this->getDoctrine()->getRepository('CacicCommonBundle:Rede')->getDadosRedePreColeta($ip_computador, $netmask);
     if (empty($te_node_address) || empty($so)) {
         $this->get('logger')->error("Erro na operação de getTest. IP = {$ip_computador} Máscara = {$netmask}. MAC = {$te_node_address}. SO = {$te_so}");
         $response = new Response();
         $response->headers->set('Content-Type', 'xml');
         $cacic_helper = new OldCacicHelper($this->get('kernel'));
         return $this->render('CacicWSBundle:Default:testUpdate.xml.twig', array('configs' => $cacic_helper->getTest($request), 'rede' => $rede, 'ws_folder' => OldCacicHelper::CACIC_WEB_SERVICES_FOLDER_NAME, 'cs_cipher' => $request->get('cs_cipher'), 'cs_compress' => $request->get('cs_compress')), $response);
     }
     #$logger->debug("444444444444444444444444444444444444: $netmask | ".$rede->getNmRede());
     $computador = $this->getDoctrine()->getRepository('CacicCommonBundle:Computador')->getComputadorPreCole($request, $te_so, $te_node_address, $rede, $so, $ip_computador);
     //$local = $this->getDoctrine()->getRepository('CacicCommonBundle:Local')->findOneBy(array( 'idLocal' => $rede->getIdLocal() ));
     $local = $rede->getIdLocal();
     //Debugging do Agente
     $debugging = TagValueHelper::getValueFromTags('DateToDebugging', $computador->getTeDebugging()) == date("Ymd") ? $computador->getTeDebugging() : (TagValueHelper::getValueFromTags('DateToDebugging', $local->getTeDebugging()) == date("Ymd") ? $local->getTeDebugging() : (TagValueHelper::getValueFromTags('DateToDebugging', $rede->getTeDebugging()) == date("Ymd") ? $rede->getTeDebugging() : ''));
     $debugging = $debugging ? TagValueHelper::getValueFromTags('DetailsToDebugging', $debugging) : '';
     // Adiciona no log de acesso. REGRA: só adiciona se o último registro foi em data diferente da de hoje
     // TODO: Colocar um parâmetro que diz quantas vezes deve ser registrado o acesso por dia
     $data_acesso = new \DateTime();
     $hoje = $data_acesso->format('Y-m-d');
     $ultimo_acesso = $this->getDoctrine()->getRepository('CacicCommonBundle:LogAcesso')->ultimoAcesso($computador->getIdComputador());
     //$ultimo_user_logado = $this->getDoctrine()->getRepository('CacicCommonBundle:LogUserLogado')->ultimoAcesso( $computador->getIdComputador() );
     /**
      * Grava os registros na Tabela Log_User_Logado
      */
     if (!empty($ultimo_login)) {
         $ultimo_user_logado = new LogUserLogado();
         $ultimo_user_logado->setIdComputador($computador);
         $ultimo_user_logado->setData($data_acesso);
         $ultimo_user_logado->setUsuario($ultimo_login);
         $this->getDoctrine()->getManager()->persist($ultimo_user_logado);
         $this->getDoctrine()->getManager()->flush();
     } else {
         $logger->error("ERRO NO GET-TEST: usuário logado não encontrado para o computador {$ip_computador}");
     }
     if (empty($ultimo_acesso)) {
         // Se for o primeiro registro grava o acesso do computador
         $logger->debug("Último acesso não encontrado. Registrando acesso para o computador {$computador} em {$hoje}");
         $log_acesso = new LogAcesso();
         $log_acesso->setIdComputador($computador);
         $log_acesso->setData($data_acesso);
         /*
          * Grava o último usuário logado no banco apenas se não estiver vazio
          */
         if (!empty($ultimo_login)) {
             $log_acesso->setUsuario($ultimo_login);
         }
         // Grava o log
         $this->getDoctrine()->getManager()->persist($log_acesso);
         $this->getDoctrine()->getManager()->flush();
     } else {
         $dt_ultimo_acesso = $ultimo_acesso->getData()->format('Y-m-d');
         // Só adiciono se a data de útimo acesso for diferente do dia de hoje
         if ($hoje != $dt_ultimo_acesso) {
             $logger->debug("Inserindo novo registro de acesso para o computador {$computador} em {$hoje}");
             $log_acesso = new LogAcesso();
             $log_acesso->setIdComputador($computador);
             $log_acesso->setData($data_acesso);
             /*
              * Grava o último usuário logado no banco apenas se não estiver vazio
              */
             if (!empty($ultimo_login)) {
                 $log_acesso->setUsuario($ultimo_login);
             }
             // Grava o log
             $this->getDoctrine()->getManager()->persist($log_acesso);
             $this->getDoctrine()->getManager()->flush();
         }
     }
     $response = new Response();
     $response->headers->set('Content-Type', 'xml');
     $cacic_helper = new OldCacicHelper($this->get('kernel'));
     $testcoleta = '[forca_coleta]' . $computador->getForcaColeta() . '[/forca_coleta]';
     return $this->render('CacicWSBundle:Default:test.xml.twig', array('configs' => $cacic_helper->getTest($request), 'computador' => $computador, 'rede' => $rede, 'testcoleta' => $testcoleta, 'debugging' => $debugging, 'ws_folder' => OldCacicHelper::CACIC_WEB_SERVICES_FOLDER_NAME, 'cs_cipher' => $request->get('cs_cipher'), 'cs_compress' => $request->get('cs_compress')), $response);
 }
 /**
  * Método que registra o Acesso e identifica o computador
  *
  * @param Request $request
  * @return JsonResponse
  */
 public function getTestAction(Request $request)
 {
     //1 - Verificar se computador existe
     $logger = $this->get('logger');
     $status = $request->getContent();
     $em = $this->getDoctrine()->getManager();
     $logger->debug("JSON getTest:\n" . $status);
     $dados = json_decode($status, true);
     if (empty($dados)) {
         $logger->error("JSON INVÁLIDO!!!!!!!!!!!!!!!!!!! Erro no getTest");
         // Retorna erro se o JSON for inválido
         $error_msg = '{
             "message": "JSON Inválido",
             "codigo": 1
         }';
         $response = new JsonResponse();
         $response->setStatusCode('500');
         $response->setContent($error_msg);
         return $response;
     }
     $logger->debug("JSON get Test status \n" . print_r(json_decode($status, true), true));
     // Identifica computador
     $computador = $this->getComputador($dados, $request);
     if (empty($computador)) {
         $logger->error("Erro na identificação do computador. Retorna mensagem de erro");
         $error_msg = '{
             "message": "Computador não identificado",
             "codigo": 2
         }';
         $response = new JsonResponse();
         $response->setStatusCode('500');
         $response->setContent($error_msg);
         return $response;
     }
     // 3 - Grava no log de acesso
     //Só adiciona se o último registro foi em data diferente da de hoje
     $data_acesso = new \DateTime();
     $hoje = $data_acesso->format('Y-m-d');
     $ultimo_acesso = $em->getRepository('CacicCommonBundle:LogAcesso')->ultimoAcesso($computador->getIdComputador());
     if (empty($ultimo_acesso)) {
         // Se for o primeiro registro grava o acesso do computador
         $logger->debug("Último acesso não encontrado. Registrando acesso para o computador {$computador} em {$hoje}");
         $log_acesso = new LogAcesso();
         $log_acesso->setIdComputador($computador);
         $log_acesso->setData($data_acesso);
         // Grava o log
         $em->persist($log_acesso);
     } else {
         $dt_ultimo_acesso = $ultimo_acesso->getData()->format('Y-m-d');
         // Adiciona se a data de útimo acesso for diferente do dia de hoje
         if ($hoje != $dt_ultimo_acesso) {
             $logger->debug("Inserindo novo registro de acesso para o computador {$computador} em {$hoje}");
             $log_acesso = new LogAcesso();
             $log_acesso->setIdComputador($computador);
             $log_acesso->setData($data_acesso);
             // Grava o log
             $em->persist($log_acesso);
         }
     }
     # TODO: Grava log de acessos de usuario do computador caso não esteja vazio
     if (!empty($dados['computador']['usuario'])) {
         $log_usuario = new LogUserLogado();
         $log_usuario->setIdComputador($computador);
         $log_usuario->setData(new \DateTime());
         $log_usuario->setUsuario($dados['computador']['usuario']);
         $em->persist($log_usuario);
     }
     $em->flush();
     $response = new JsonResponse();
     $response->setStatusCode('200');
     return $response;
 }