• Nenhum resultado encontrado

3.3 COMPOSIÇÃO DAS ESTRATÉGIAS

3.3.1 Mapeamento e Desenvolvimento

3.3.1.3 Estratégia baseada em CLI e NETCONF

Assim como os web services REST e SOAP foram desenvolvidos de uma forma que pudessem ser avaliados, através de ferramentas específicas, as aplicações CLI e NETCONF que compõem o cenário de testes seguiram as mesmas metodologias. Essas aplicações ficam dispostas na camada de apresentação e, análogas aos web services, fazem o uso das APIs CLI e NETCONF. O desenvolvimento de ambas foi baseado na simulação por meio de software, utilizando os comandos mapeados pelas APIs, não se valendo de protocolos específicos para a exposição de funcionalidades (tarefas de gerência de configuração) aos usuários finais como a transformação dessas tarefas em recursos REST (através da interface uniforme do HTTP) ou serviços SOAP (por meio de protocolo de mesmo nome para troca de mensagens).

As aplicações descritas nesta seção basicamente invocam os métodos estabelecidos nas APIs da camada de acesso, sendo tratadas como softwares dispostos diretamente no computador usuário e que executam as tarefas no dispositivo de rede, não passando por nenhum intermediador ou gateway como acontece com o acesso através de web services. Esses sim se valem de um mediador – servidor de aplicação – para suas requisições, e que por meio de arquiteturas específicas abstraem todos os detalhes de implementação e executam funções únicas e bem definidas sobre o dispositivo de rede.

A simulação do comportamento de um administrador de redes durante a execução de suas tarefas de gerência de configuração é uma definição para essas estratégias. Essa simulação passa somente pelo acesso, através do protocolo SSH-2, ao dispositivo e a execução de comandos, análogo ao cenário onde um administrador executa as tarefas através de um terminal de emulação como, por exemplo, PuTTY11.

Novamente, valendo-se da substituição de parâmetros, dessa vez com acesso direto aos métodos apresentados pela camada de acesso, as estratégias CLI e NETCONF executam as tarefas de gerência de configuração mapeadas pela camada subjacente. O trecho de código apresentado no quadro 20 demonstra esse acesso para algumas tarefas. Para a aplicação CLI cabe somente a responsabilidade de alimentar os métodos com os valores desejados, recuperar o seu retorno e registrar o tempo de execução. No trecho de código apresentado pelo quadro 20, a variável nomeDoArquivo tem seu valor substituído na porção

xx pelo id da VLAN onde a aplicação foi executada e salvando, ao término das repetições, o tempo total de cada execução.

Quadro 20 – Trecho de código da aplicação CLI.

//Itero sobre o número total de tarefas (14)

while (nrTarefa < nrTotalTarefas) {

nrIteracaoRodada = 0;

dadosParaArquivo = "";

duracaoExecucaoRodada = 0;

//Itero sobre o total de execuções sobre cada tarefa (30)

while (nrIteracaoRodada < nrTotalIteracoes) {

switch (nrTarefa) {

case 1: {

nomeDoArquivo = "TAREFA1\\CLI_TAREFA1_TIMES_VLANxx.csv";

//Gravo o tempo inicial e entro no switch para cada tarefa

inicioExecucaoRodada = System.currentTimeMillis();

RouterFuntions.getRunningConfigurationRouter(router);

//Pego o tempo final da execução da tarefa

terminoExecucaoRodada = System.currentTimeMillis();

break;

}

case 12: {

nomeDoArquivo = "TAREFA12\\CLI_TAREFA12_TIMES_VLANxx.csv";

RouterFuntions.configureInterface(router, port, interfaceAddress, subnetMask, MTU, description);

break;

}

case 14: {

nomeDoArquivo = "TAREFA14\\CLI_TAREFA14_TIMES_VLANxx.csv";

RouterFuntions.disableInterface(router, port);

break;

}

}

//Calculo o tempo de execução total

duracaoExecucaoRodada = terminoExecucaoRodada - inicioExecucaoRodada;

registraTempoExecucao.add((int) duracaoExecucaoRodada);

if (nrIteracaoRodada == 0) { dadosParaArquivo = "iteracao;duracao\n"; dadosParaArquivo = dadosParaArquivo + nrIteracaoRodada + ";" + duracaoExecucaoRodada + "\n"; } else { dadosParaArquivo = dadosParaArquivo + nrIteracaoRodada + ";" + duracaoExecucaoRodada + "\n"; } nrIteracaoRodada++;

//Pausa de 10 segundos entre execuções de uma mesma tarefa

Thread.sleep(10000);

}

nrTarefa++;

//Pausa de 1 minuto entre tarefas Thread.sleep(60000);

//Crio o arquivo CSV com a duração de cada rodada para cada tarefa CreateFile.CreateFile(caminhoDoArquivo, nomeDoArquivo + ".csv", dadosParaArquivo.toString());

}

Fonte: Elaborado pelo autor.

O diagrama de sequência apresentado na figura 12 demostra, de forma abrangente e sem especificar uma determinada tarefa, os procedimentos realizados durante a execução da aplicação CLI.

Figura 12 – Diagrama de sequência da aplicação CLI.

Fonte: Elaborado pelo autor.

O trecho de código apresentado no quadro 21 demonstra que, além de executar as tarefas de gerência de configuração por meio do protocolo NETCONF, cabe à aplicação coordenar o sequenciamento das mensagens através das constantes apresentadas no quadro 12 e efetuar a troca dos parâmetros, quando necessário, antes da execução de cada tarefa. Essa ordenação foi apresentada na seção 2.1.2.3 e visa garantir o correto pareamento, no momento da conexão, entre o cliente que recebe uma mensagem denominada <hello> no formato XML e responde, para o dispositivo de rede, com uma mensagem semelhante, alterando somente elementos internos com intuito de dar prosseguimento à execução das tarefas. Nota-se também nesse trecho de código a diferença entre as aplicações CLI e NETCONF: na aplicação CLI, cada tarefa invoca um método específico para sua execução;

já para NETCONF o método RunMultipleCommands, responsável pela execução dos comandos, é chamado diretamente recebendo como parâmetros as mensagens RPC definidas em variáveis ou constantes. As linhas que tratam da medição e registro do tempo de execução foram omitidas desse trecho de código.

Quadro 21 – Trecho de código da aplicação NETCONF.

switch (nrTarefa) {

case 1: {

nomeDoArquivo = "TAREFA1\\NETCONF_TAREFA1_TIMES_VLANxx";

ExecMultipleCommands.RunMultipleCommands(router, NETCONFConstants.hello);

ExecMultipleCommands.RunMultipleCommands(router,

NETCONFConstants.getRunningConfigurationRouter);

ExecMultipleCommands.RunMultipleCommands(router, NETCONFConstants.closeSession);

break;

}

case 12: {

nomeDoArquivo = "TAREFA12\\NETCONF_TAREFA12_TIMES_VLANxx";

ExecMultipleCommands.RunMultipleCommands(router, NETCONFConstants.hello);

ExecMultipleCommands.RunMultipleCommands(router, NETCONFCommands.configureInterface);

ExecMultipleCommands.RunMultipleCommands(router, NETCONFConstants.closeSession);

break;

}

case 14: {

nomeDoArquivo = "TAREFA14\\NETCONF_TAREFA14_TIMES_VLANxx";

ExecMultipleCommands.RunMultipleCommands(router, NETCONFConstants.hello);

ExecMultipleCommands.RunMultipleCommands(router, NETCONFCommands.shutdownInterface);

ExecMultipleCommands.RunMultipleCommands(router, NETCONFConstants.closeSession);

break;

} }

Fonte: Elaborado pelo autor.

A figura 13 apresenta a sequência dos procedimentos realizados durante a execução da aplicação NETCONF sem especificar uma determinada tarefa. Nota-se que para essa aplicação existe um maior número de interações entre os objetos, sendo uma prática inerente ao protocolo NETCONF.

Figura 13 – Diagrama de sequência da aplicação NETCONF.

Fonte: Elaborado pelo autor.

Cabe salientar que ambas as aplicações, CLI e NETCONF, possuem mecanismos desenvolvidos para que o tempo da execução de cada tarefa possa ser mensurado e armazenado para posterior análise estatística (conforme apresentado no quadro 20), o que as diferencia das estratégias baseadas em web services que têm esse tempo de execução coletado por ferramentas externas como será apresentado na seção 3.4.