PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO DE JANEIRO TRAFFIC INSPECTOR: MONITORAMENTO DO FLUXO DE MENSAGENS NO MIDDLEWARE SDDL Matheus Felipe Ferreira Maciel PROJETO FINAL DE GRADUAÇÃO CENTRO TÉCNICO CIENTÍFICO - CTC DEPARTAMENTO DE INFORMÁTICA Curso de Graduação em Engenharia da Computação Rio de Janeiro, junho de 2012 Matheus Felipe Ferreira Maciel Traffic Inspector: Monitoramento do fluxo de mensagens no middleware SDDL Relatório de Projeto Final, apresentado como requisito parcial para a obtenção do titulo de Engenheiro de Computação. Orientador: Markus Endler Rio de Janeiro Junho de 2012. Agradecimentos À minha família, por acreditarem no meu potencial e me darem todo suporte emocional necessário para que eu conseguisse viver a uma distância tão grande. Mesmo quando meu futuro acadêmico e profissional pareceu incerto, vocês me deram força para continuar tentando. À minha namorada, que me mostrou como é necessário controlar meu temperamento e manter o controle mesmo em situações onde todas as saídas são complexas. Aos meus companheiros do curso Student to Business, que me mostraram que não existem limites para o que podemos atingir desde que não desistamos de tentar. Nunca conheci indivíduos tão aplicados e determinados a ascender como pessoas e profissionais em toda minha vida. Ao meu orientador, Markus Endler, por ter me dado a oportunidade de executar o projeto quando nada parecia certo sobre meu futuro acadêmico. Tenho muito respeito pelo seu trabalho e agradeço pelo conhecimento adquirido durante a execução do projeto. À equipe do LAC, que me apresentou um novo universo relativo a desenvolvimento de software e novas ferramentas da computação que eu nunca tive contato até a execução desse projeto. Resumo Maciel, Matheus. Markus Endler. Monitoramento do fluxo de mensagens no middleware SDDL. Rio de Janeiro, 2012. 33 p. Relatório Final de Projeto Final II – Departamento de Informática. Pontifícia Universidade Católica do Rio de Janeiro. A proposta desse trabalho é o desenvolvimento de um sistema de monitoramento de mensagens trocadas durante uma comunicação DDS. Esse sistema tem como objetivo auxiliar o desenvolvimento da arquitetura ContextNet, mais precisamente da camada SDDL. Palavras-chave DDS, ContextNet, SDDL, Traffic, Inspector. Abstract Maciel, Matheus., Markus Endler. Monitoramento do fluxo de mensagens no middleware SDDL. Rio de Janeiro, 2012. 33 p. Relatório Final de Projeto Final II – Departamento de Informática. Pontifícia Universidade Católica do Rio de Janeiro. The purpose of this project is the development of a system capable of monitoring message exchanging in a DDS based communication environment. This system has the final objective of helping further development of the ContextNet architecture, more precisely the SDDL layer. Keywords DDS, ContextNet, SDDL, Traffic, Inspector. Sumário 1. Introdução ............................................................................................................. 1 1.1. Objetivos do projeto........................................................................................ 1 1.2. Contextualização do problema..................................................................... 1 2. Estado da Arte...................................................................................................... 3 3. Proposta................................................................................................................. 5 4. Plano de Ação ...................................................................................................... 7 5. Middleware DDS................................................................................................... 8 5.1. O que é DDS ...................................................................................................... 8 5.2. Funcionamento do DDS ................................................................................. 8 6. SDDL ..................................................................................................................... 11 6.1. O que é o SDDL .............................................................................................. 11 6.2. Componentes do SDDL ................................................................................ 11 6.2.1. RUDP .............................................................................................................. 12 6.3. Exemplos de uso do SDDL.......................................................................... 13 7. Traffic Inspector................................................................................................. 15 7.1. MVC.................................................................................................................... 15 7.2. Tópicos DDS e estruturas de dados ......................................................... 16 7.2.1. TruckInformationTopic.............................................................................. 16 7.2.1. TruckGroupInfoTopic ................................................................................ 17 7.2.3. LoadReportTopic ........................................................................................ 17 7.3. Interface ............................................................................................................ 18 7.3.1. Truck Traking Information........................................................................ 18 7.3.2. Group Information ...................................................................................... 22 7.3.3. Gateway Load Information ....................................................................... 24 7.3.4. Custom Data Filtering................................................................................ 26 7.4. Comunicação .................................................................................................. 28 7.4.1. Recebimento/Processamento ................................................................. 28 7.5. Base de Dados................................................................................................ 29 7.5.1. Escrita no banco de dados ...................................................................... 29 7.5.2. Leitura do banco de dados ...................................................................... 30 7.6. Atualização do Traffic Inspector................................................................ 31 8. Considerações Finais.............................................................................. 32 9. Referências Bibliográficas...................................................................... 33 Lista de Figuras Figura 1 – Camadas do ContextNet.................................................................... 2 Figura 2 – Esquemático da comunicação DDS............................................... 9 Figura 3 – Componentes do SDDL.................................................................... 11 Figura 4 – Arquitetura de uma aplicação para monitoramento de veículos.................................................................................................................... 14 Figura 5 – Aba Truck Tracking Information do Traffic Inspector............. 19 Figura 6 – Aba Truck Tracking Information após a identificação de mensagens.............................................................................................................. 22 Figura 7 – Aba Group Information.................................................................... 23 Figura 8 – Aba Gateway Load Information..................................................... 25 Figura 9 – Aba Custom Data Filtering.............................................................. 27 1. Introdução 1.1. Objetivos do projeto Desenvolver um programa de aplicação capaz de monitorar o tráfego de dados em um sistema distribuído baseado no middleware SDDL [1] que utiliza o padrão Data Distribution Service (DDS), da OMG. As principais funcionalidades do programa, denominado Traffic Inspector, incluem: monitorar o fluxo de mensagens nos tópicos DDS pertinentes, apresentar os dados obtidas no monitoramento e possibilitar registro dos mesmos em um banco de dados a fim de permitir a sua análise após o monitoramento. 1.2. Contextualização do problema A coordenação e comunicação em aplicações distribuídas com muitos usuários móveis, em áreas como transporte, segurança, logística e outros, requer o monitoramento de milhares de dispositivos e capacidade de comunicação entre estes, de preferência em tempo real. O desenvolvimento de tais aplicações distribuídas móveis nunca foi uma tarefa fácil, tendo em vista a quantidade de fatores desafiadores, tais como: a mobilidade dos usuários e seus dispositivos, a limitação de recursos dos dispositivos, a instabilidade das conexões sem fio, a variação intrínseca no numero de participantes, etc. Uma das questões mais complexas em relação a esse tipo de desenvolvimento é a comunicação entre os nós da aplicação móvel. Os nós podem possuir sistemas operacionais diferentes, utilizar protocolos de comunicação diversos ou estarem em redes nas quais a qualidade e a confiabilidade da conexão não são garantidas e variam rapidamente. Todos esses aspectos costumam ser fatores de risco no desenvolvimento dessas aplicações e sempre são características prioritárias para uma aplicação distribuída móvel. Motivado por esse desafio, iniciou-se no LAC da PUC-Rio, o desenvolvimento do ContextNet, um projeto que tem como desenvolver protocolos, serviços e ferramentas que auxiliem o desenvolvimento e gerenciamento de aplicações distribuídas para colaboração e coordenação móvel, com ciência de contexto individual e coletiva. Para tal, define uma arquitetura em várias camadas e serviços (vide Figura 1). A camada sobre a qual esse projeto atua é a camada Scalable Data Distribution Layer (SDDL), que trata da distribuição de dados de contexto (p.ex. a 1 localização) dos dispositivos móveis e da comunicação eficiente com os dispositivos móveis, em larga escala [1]. Figura 1: Camadas do ContextNet Um aspecto importante do desenvolvimento de qualquer aplicação baseada no middleware SDDL é a necessidade de monitorar e visualizar o fluxo de dados trafegados entre os nós do seu núcleo (que utilizam a tecnologia DDS), a sua distribuição de carga e o seu desempenho. Nesse caso específico, era desejada uma ferramenta que permitisse a visualização das mensagens que trafegavam durante as comunicações, como forma de depurar, testar e avaliar desenvolvimento realizado. A partir dessa necessidade, o Traffic Inspector foi desenvolvido. 2 2. Estado da Arte Quando tratamos do monitoramento e detecção de problemas de redes, existem diversos programas disponíveis no mercado. Muitos desses programas se destinam à verificação de banda utilizada por estações e dispositivos de rede ou verificação de pacotes UDP ou TCP, conhecidos como packet sniffers. Ferramentas como o FlowScan analisam os dados exportados por um roteador baseado em IP [7]. Essa ferramenta se destina especificamente para fluxos de pacotes de rede Internet, não sendo aplicável ao caso do SDDL, onde os objetos de interesse são mensagens DDS. Outra ferramenta que poderia ser útil durante os testes realizados pelos desenvolvedores do SDDL é o Lilith Lights, que tem como objetivos apresentar a comunicação entre clusters e a utilização de CPU dos mesmos. Essa aplicação auxilia a depuração de código executado em diversas máquinas, apontando gargalos em algoritmos [8]. As ferramentas apresentadas acima não são capazes de resolver o problema principal apresentado aos desenvolvedores do SDDL: a visualização das mensagens DDS transmitidas entre os nós que fazem parte da rede núcleo do SDDL. Mesmo que um packet sniffer fosse capaz de identificar os pacotes de rede sendo trocados durante uma comunicação, os desenvolvedores teriam grandes dificuldades para identificar as mensagens DDS correspondentes e descobrir o que ocorre de fato durante o processo de troca de mensagens DDS entre os nós do SDDL. Como não encontramos ferramentas de domínio público destinadas à verificação dos dados transmitidos por aplicações que utilizam o padrão DDS para efetuar suas comunicações, se fez necessário desenvolver uma nova aplicação para resolver o problema. Para que um programa represente o estado da arte nesse assunto, é necessário que ele resolva os problemas relacionados aos testes do SDDL. O primeiro problema vital é a visualização do grande fluxo de dados que transitam na rede, originados tanto dos nós móveis (informações de contexto), como dos nós da rede núcleo SDDL, como por exemplo, as mensagens trocadas entre PoAManagers, Gateways e GroupDefiners. Essa visualização deve ser realizada em tempo real e deve ser organizada de tal maneira que o usuário encontre a informação desejada com a devida facilidade. 3 Outro problema vital é a avaliação dos dados obtidos durante um teste do SDDL. Uma aplicação ideal deve ser capaz de armazenar os dados obtidos de forma segura e confiável, deixando essas informações disponíveis para consultas posteriores. Uma vez que esses requisitos sejam alcançados, uma aplicação terá atingido o nível ideal para monitorar as atividades relacionadas ao desenvolvimento do SDDL, podendo vir a ter valor nos trabalhos futuros relacionados à arquitetura ContextNet.. 4 3. Proposta Para solucionar o problema de monitoramento e visualização do trafego de dados no middleware SDDL, um software com interface gráfica para usuários deve ser desenvolvido. Dessa forma, o usuário pode interagir com as informações em tempo real conforme elas são publicadas pelos nós móveis que estejam conectados a rede. A abordagem convencional para a dificuldade de inspeção de um grande volume de mensagens/dados gerados continuamente é a utilização de filtros sobre os tópicos DDS, de acordo com parâmetros bem definidos ou mesmo filtros personalizados pelo usuário. Vale notar que, como se trata de uma ferramenta de monitoramento, ela somente mostra o tráfego a partir do momento da sua entrada na mesma, sendo que o tráfego de mensagens/dados ocorridos antes disso não são capturados/visualizados. Para melhorar a utilidade do programa, a ele foi adicionada uma função de armazenamento persistente das informações que trafegaram durante a sua execução, para facilitar a análise posterior dos dados. Para que esse programa seja utilizável na prática, os seguintes requisitos tiveram que ser satisfeitos: • O Traffic Inspector deve possuir uma interface gráfica coesa e concisa, para que os desenvolvedores possam testar o SDDL sem que haja confusão sobre os dados que trafegam na rede; • Possuir uma forma de persistência para que os desenvolvedores possam posteriormente verificar os resultados dos testes de carga para corrigir problemas; • Aplicar filtros seletivos sobre os dados, facilitando a visualização dos dados/mensagens que são relevantes para a tarefa específica do desenvolvedor/testador; • Aplicar filtros especificados pelo desenvolvedor em tempo real, para que os usuários do programa sejam capazes de adicionar parâmetros a filtragem que não estão previstos nos filtros padrões da aplicação. Como dito na seção anterior, não existem softwares de domínio púbico para monitoramento em sistemas baseados no padrão DDS. Com o cumprimento dos requisitos listados acima, um software capaz de realizar tal inspeção de tráfego e auxiliar os desenvolvedores será desenvolvido. A partir desse ponto, é possível caminhar mais ainda em direção a uma solução geral que possa atender outras 5 aplicações que o SDDL possa vir a ter no futuro. Ou seja, o Traffic Inspector poderia ser ampliado para inspecionar qualquer ferramenta que utilizar o middleware SDDL com as devidas modificações no código fonte. O programa oferece uma interface gráfica para a verificação do tráfego de nós móveis, atividades de grupos e carga dos servidores bem como a persistência de dados no banco de dados e a filtragem em tempo real dos mesmos. 6 4. Plano de Ação Para realizar um projeto como o Traffic Inspector, se fez necessário um estudo de diversas áreas do curso de engenharia de computação. Para desenvolver um programa que possuísse uma interface gráfica, existem algumas opções de linguagens de programação. Devido ao ambiente de trabalho e o conhecimento da equipe envolvida no SDDL, a linguagem Java foi escolhida para a tarefa. Esse requisito dificultou o desenvolvimento do projeto devido ao meu conhecimento reduzido sobre o assunto, embora não tenha impedido que a tarefa fosse realizada com sucesso. Os componentes Swing de Java foram utilizados para desenvolver a interface gráfica de forma a permitir que o software opere em diversos sistemas operacionais que tem suporte para essa linguagem. Em se tratando de conexão e comunicação de redes, o DDS teve que ser estudado, já que se trata do padrão utilizado pela camada SDDL da arquitetura ContextNet. Anterior a esse projeto, eu não possuía qualquer conhecimento sobre middlewares para computação distribuída e sobre esse padrão DDS, em particular. Completar os objetivos de fazer a persistência dos dados monitorados exigiu conhecimento sobre bancos de dados obtidos anteriormente em matérias da graduação que me forneceram a base para dominar desde queries SQL até como integrar um banco de dados a uma aplicação Java. O resultado final do projeto foi um sistema Java capaz de monitorar o funcionamento da camada SDDL na qual ele está inserido. Esse sistema agrega boa parte do conhecimento obtido durante todo o curso e ferramentas de diversos assuntos que se integram cada vez mais no cenário atual de desenvolvimento de aplicações comerciais. Para executar esse projeto foram, portanto, necessários estudos e aprofundamento em diferentes áreas de conhecimento da Computação. O cronograma de execução das tarefas para a realização dele se encontra abaixo: Atividade / Mês Estudo SDDL / DDS Estudo Java / SQL Modelagem do Traffic Inspector Montagem da interface do Traffic Inspector Desenvolvimento do Traffic Inspector Abril Maio X X Junho X X X X X X X 7 5. Middleware DDS 5.1. O que é DDS? A comunicação de dados costuma ser um problema complexo e caro no ciclo de desenvolvimento de aplicações distribuídas. Isso levou a comunidade de computação a desenvolver padrões de middleware tais como o CORBA, o COM, Web Services, etc. Um desses padrões de middleware de comunicação é conhecido como DDS (Data Distribution Service), conhecido padrão middleware de comunicações que foi concebido e é mantido pelo OMG (Object Management Group). Através da simplificação da API de comunicação entre computadores, o desenvolvimento de aplicações distribuídas se torna mais simples e menos propenso a erros, alem de facilitar a interoperabilidade dos componentes distribuídos, possivelmente desenvolvidos em linguagens de programação diferentes e executando plataformas distintas. Ou seja, os middlewares de comunicações foram desenvolvidos para servir como uma camada que atua entre o sistema operacional e os softwares de aplicação e que torna a comunicação entre computadores mais simples e mais eficiente. Tais ferramentas foram desenvolvidas com o objetivo de facilitar o desenvolvimento de aplicações, assim como a manutenção e o entendimento de como dados são servidos e recebidos por serviços que as utilizem. Middlewares desse tipo são utilizados em diversos nichos de mercado que variam de dispositivos móveis até grandes aplicações empresariais de bancos de dados: Os middlewares atuam nesses ambientes de forma a tornar os requisitos de qualidade alcançáveis e facilitar a comunicação entre essas diferentes aplicações. Com o crescimento da necessidade de integração de aplicações outrora independentes ao contexto de uma organização ou serviço tornam os middlewares cada vez mais válidos no desenvolvimento de novas tecnologias [4]. 5.2. Funcionamento do DDS O DDS trabalha como uma camada entre a aplicação e o sistema operacional, tendo como dever transferir mensagens entre publishers (Publicadores) e subscribers (Assinantes). Quando ambos os lados de uma comunicação utilizam 8 DDS, é possível transferir mensagens entre eles sendo que o DDS controla os casos em que informações são perdidas, simplificando código e economizando tempo para os desenvolvedores. A escolha do DDS se deu devido a garantia de consistência na transferência de dados entre diferentes plataformas e sistemas operacionais, além de posse de políticas de QoS (Quality of Service) que definem a janela de tempo que uma mensagem é armazenada e como ela deve ser apresentada para os subscribers. Um modelo DDS de comunicação tem alguns elementos básicos que o compõe. Esses elementos tornam a comunicação possível em um ambiente do tipo Publisher/Subscriber. Dentre esses elementos básicos, o tópico tem papel importante. Esse elemento contém dados de um tipo de mensagem trocada nesse ambiente, bem como informações sobre sua disponibilidade e distribuição. Os publishers e subscribers mencionados anteriormente também são elementos básicos da comunicação que, por agruparem DataWriters/DataReaders, são efetivamente capazes de controlar o fluxo de informações na comunicação. Os DataWriters/DataReaders são entidades que escrevem ou recebem mensagens de um tipo de dado utilizado na comunicação, sempre se referindo a um único tópico. Os DataWriters são as entidades responsáveis pela escrita e os DataReaders são responsáveis pela leitura. Figura 2: Esquemático da comunicação DDS Em relação ao fluxo de dados, a comunicação ocorre quando a seção que publica informações (publishers) escreve um dado utilizando um DataWriter. Em seguida, esse dado é publicado pelo publisher, tendo como objetivo todos os 9 subscribers associados ao tópico em questão. A comunicação é finalizada quando cada subscriber entrega a mensagem ao DataReader. Vale notar que o sistema identifica se um tópico é válido verificando se os tipos de dados, o nome e as políticas de QoS são iguais: Somente se essas características são condizentes ocorre a comunicação correta entre os dois (vide Figura 2). O DDS e os tópicos utilizados são relevantes para o desenvolvimento do Traffic Inspector, por serem a base da comunicação utilizada no SDDL. O SDDL utiliza uma grande quantidade de tópicos que se referem a informações como localização de um nó móvel, grupos (de nós) definidos durante a execução das comunicações, carga de processamento atual dos servidores e outros tópicos genéricos utilizados no nível do protocolo de aplicação, como mensagens de texto simples. Cada um desses tópicos necessita de um DataReader correspondente essencialmente, um stub gerado pelo DDS encapsulando os detalhes da comunicação através do protocolo Real-Time Publish-Subscribe (RTPS) subjacente ao DDS - para que o Traffic Inspector possa ser o receptor dos dados transmitidos “em cada tópico”. 10 6. SDDL 6.1. O que é o SDDL? O SDDL é uma das camadas básicas da arquitetura do ContextNet, que tem como objetivo conectar nós estacionários de uma rede física com todos o nós móveis envolvidos na comunicação. Essa camada tem uma importância fundamental no funcionamento dessa arquitetura e está ligada diretamente ao funcionamento do Traffic Inspector. 6.2. Componentes do SDDL Para o funcionamento do SDDL, é necessário que alguns componentes estejam presentes. Tais elementos podem ser observados na Figura 3, abaixo: Figura 3: Componentes do SDDL Dentre os nós SDDL necessários para uma comunicação DDS, o GW (Gateway) e o PoA-Manager tem papéis muito importantes e serão descritos a seguir. O Gateway é o componente ao qual nós móveis de uma aplicação que utilizam essa arquitetura se conectam. Dessa forma, esse componente precisa se comunicar com a rede principal e com os elementos móveis, sugerindo a necessidade de protocolos de comunicação diferentes para processar mensagens. 11 A tarefa do gateway é definida por traduzir mensagens do protocolo de comunicação móvel para o DDS e vice-versa. Ainda relativo aos elementos que compõe essa camada, o PoA-Manager tem algumas tarefas bem definidas. Uma delas é a distribuição de listas contendo os gateways disponíveis periodicamente e a outra é requisitar trocas de pontos de conexão ou gateways. Para saber como efetuar essas trocas, o PoA-Manager se inscreve no tópico onde todos os gateways informam sua carga de veículos conectados e dados de processamento. Dessa forma, o PoA-Manager é capaz de selecionar a melhor opção para um caso de reconexão baseado em grupos e carga. Devido à natureza do problema, que envolve localização de nós móveis e a necessidade de verificação de informações de contexto como a localização do nó, existe a necessidade de um nó DDS no domínio. Esse nó é conhecido como GroupDefiner. Esse nó é responsável por designar grupos para todos os nós moveis que se encontram conectados a rede. Dessa forma, é possível enviar mensagens a grupos que pertençam a algum grupo especificado. Uma forma de classificar os nós móveis como pertencentes a um dado grupo é utilizando sua localização geográfica. O componente Monitor tem como função apresentar os dados da comunicação pelo SDDL de uma forma gráfica. Esse componente é importante para mostras públicas sobre o SDDL, mas não tem as funcionalidades exigidas para se tornar a ferramenta que auxiliará os desenvolvedores em testes da ferramenta, notavelmente em testes onde milhares de nós móveis se conectam a rede e informações sobre grupos específicos são necessárias. Como mencionado anteriormente, é preciso empregar protocolos de comunicação. A utilização do DDS foi escolhida para a rede principal do ContextNet e o protocolo RUDP (Reliable UDP) foi escolhido para realizar a comunicação entre os nós móveis da rede e a rede principal. O protocolo DDS foi apresentado anteriormente e o protocolo RUDP será discutido a seguir. 6.2.1. RUDP O protocolo RUDP é a base de comunicações entre os nós móveis da rede e a rede principal da arquitetura ContextNet. Ela implementa funcionalidades do tipo TCP utilizando UDP, tendo recebido as adaptações necessárias para lidar com conexões intermitentes, Firewall/NAT transversal e capacidade de lidar com 12 mudanças de IP e interfaces de rede. Todas as mensagens enviadas precisam de reconhecimento e caso esse recebimento não seja obtido, a transmissão é efetuada diversas vezes até que a conexão seja considerada perdida. Todas essas adaptações foram realizadas devido ao nível de indisponibilidade de acesso a internet por muitas redes móveis. Quando se trata de um celular em movimento, podem ocorrer mudanças na intensidade do sinal disponível e a conexão com a rede pode ser perdida. Ainda nesse cenário, pode ocorrer uma situação em que o dispositivo móvel se reconecta a rede e é designado a um novo servidor. Uma situação similar ocorre quando um servidor requisita uma mudança de servidor para o dispositivo móvel. Essas situações caracterizam um HO (Hang over). Para lidar com situações de HO, o serviço MTD (Mobile Temporary Disconnection) é utilizado, mas como não se trata de uma ferramenta relevante para o Traffic Inspector, não será discutida aqui. 6.3. Exemplos de uso do SDDL Para resolver o problema de controle de frota de uma empresa de óleo e gás, o SDDL foi implantado. Utilizando essa aplicação, é possível rastrear caminhões pertencentes à frota em tempo real para aperfeiçoar suas trajetórias, notificar possíveis problemas em uma dada região e monitorar as ações do piloto. Para realizar essa tarefa, a companhia utiliza aparelhos celulares que possuem diferentes serviços de acesso a internet como 2G ou 3G. Dessa forma, durante uma viagem é possível a ocorrência de perda de sinal e troca de IPs. Na imagem abaixo podemos verificar a arquitetura da aplicação utilizada no exemplo [1]: 13 Figura 4: Arquitetura de uma aplicação para monitoramento de veículos Tendo em vista o SDDL como middleware de comunicação utilizado nessa aplicação, o nós móveis são os veículos pertencentes à companhia. Cada veículo conectado a um servidor disponibiliza sua localização a cada 30 segundos. Devido à disponibilidade dessas informações de localização para outros membros da rede que incluem todos os nós móveis, é possível notificar veículos de situações anormais baseados em sua localização. Outro exemplo para a aplicação do SDDL pode ser a organização de veículos de polícia, para realizar notificações em tempo real sobre necessidade de auxilio em uma dada região, além de quantos oficiais ou poder de fogo são necessários para completar uma dada tarefa. Além disso, é possível disponibilizar um canal de comunicação rápido com a polícia para notificar sobre acontecimentos perigosos em uma dada área, acelerando o serviço da polícia no local. No cenário apresentado, uma aplicação colaborativa baseada em localização pode ser mais eficiente que ferramentas convencionais por diversas razões: comunicações por rádio podem ser interceptadas e não informam a posição precisa de veículos alocados em uma dada missão, o sistema pode informar somente os veículos que podem dar assistência a situação e os cidadãos têm mais facilidade em informar um ocorrido em uma região do que ligando para a emergência [5]. 14 7. Traffic Inspector 7.1. Model-View-Controller (MVC) Em cenários de desenvolvimento de grandes projetos, uma discussão constante é a metodologia a ser utilizada para manter o desenvolvimento conciso e fácil de manter. Essa discussão é ainda maior quando a rotatividade de desenvolvedores envolvidos no projeto é muito grande ou quando a possibilidade de entrada de novos membros na equipe de desenvolvimento é comum [2]. Para solucionar o problema relacionado à organização de uma aplicação e sua manutenção, a utilização da arquitetura Model-View-Controller (MVC) é bastante comum no mercado. Esse padrão de projeto descreve problemas recorrentes no desenvolvimento de software na qual a solução pode não ser a mesma em todos os casos. Para utilizar o modelo MVC de desenvolvimento, precisamos entender a tríade que compõe esse padrão. Essa tríade é composta pela camada de modelo, visão e controle. Essas camadas são criadas para formar a aplicação final, dividindo responsabilidades e funcionalidades entre elas. A arquitetura MVC divide uma aplicação em três áreas de responsabilidade, sendo elas: Modelo: Essa área contém os objetos do domínio ou estruturas de dados utilizadas por toda a aplicação, representando o estado atual da aplicação. Notoriamente, a camada de modelo não tem qualquer informação sobre as outras camadas; Visão: Essa área verifica o estado da aplicação e informa o usuário sobre esse estado, sendo a interface do programa em boa parte dos casos. Essa camada interage com o modelo, recebendo os dados da mesma; Controle: Essa área liga as operações realizadas pelo usuário ao modelo e a visão, modificando o estado da aplicação conforme necessário. No caso de Java, o controle e a visão se encontram conectados, funcionando através de delegates. Sabendo que software precisa interagir com pessoas ou mesmo outros softwares, é razoável pensar que as interfaces de comunicação mudam com o tempo, mesmo que algumas vezes a lógica do controle e os dados do modelo não mudem. Em alguns casos, ocorre o contrário, a interface e controle permanecem praticamente inalterados, e apenas o modelo é ligeiramente modificado. 15 Em ambos os casos, migrar um software ou mesmo atualizá-lo pode ser um grande problema caso essas responsabilidades não estejam claramente definidas. Desde os anos 70, MVC é um design pattern muito conhecido na indústria de desenvolvimento de software e existem muitos frameworks no mercado que auxiliam processo de criação de aplicações utilizando o paradigma. No Traffic Inspector, os conceitos de MVC foram aplicados embora nenhum framework tenha sido utilizado para auxiliar a tarefa. Como dito acima, a visão conhece o modelo e interage com ele. Dessa forma, quando um botão é pressionado ou algum valor é modificado e precisa ser mostrado, a visão envia e recebe os dados necessários da camada de modelo. Dessa forma, é necessário que o controle informe ao modelo a necessidade de atualização de dados ou o fornecimento deles. Dessa forma, o controle se torna a ponte que atua entre as outras duas camadas, formando uma conexão indireta entre a camada de modelo e a camada de visão. Utilizar essa arquitetura ou design pattern facilita a separação de responsabilidades da aplicação, facilitando a detecção de erros e mantendo o código bem definido. Dessa forma, a manutenção do código se torna uma tarefa mais simples e intuitiva. 7.2. Tópicos DDS e estruturas de dados Devido à natureza da aplicação desenvolvida, foi necessária a definição de diversas estruturas de dados que tem papel fundamental no funcionamento do Traffic Inspector. Para falar sobre as estruturas de dados efetivamente utilizadas no programa, é necessário conhecer os tópicos DDS que estão envolvidos na comunicação e a função de cada um deles no sistema. 7.2.1. TruckInformationTopic Esse tópico contém informações relativas a um nó móvel (e.g. um caminhão) que periodicamente envia dados sobre sua localização corrente para os demais nós do núcleo SDDL. Informações contidas nesse tópico incluem sua posição geográfica, a identificação do gateway ao qual o nó móvel se encontra conectado e o grupo ao qual ele pertence. Para representar essas mensagens no Traffic 16 Inspector, foi designado um modelo conhecido como TruckModel. Esse modelo contém todas as informações existentes nas mensagens desse tipo e existem duas listas desse modelo no projeto. Uma das listas controla quais são os nós móveis que enviaram mensagens desde a inicialização do programa até seu fechamento e a outra contém todas as mensagens enviadas. A primeira lista existe para controlar elementos da interface relativos aos filtros disponíveis para o usuário e a segunda para fornecer os dados que podem ser visualizados na janela principal do Traffic Inspector. 7.2.2. TruckGroupInfoTopic Esse tópico contém informações relativas aos grupos existentes (de nós móveis) definidos pelos GroupDefiners dentro do núcleo SDDL. O tópico verifica a troca de informações quando algum nó móvel tem seu grupo definido ou então quando ocorre alguma mudança de grupo de um nó. Dados encontrados nesse tópico incluem a identificação do nó móvel em questão e o conjunto de grupos aos quais ele pertence e as mudanças de pertinência de um ou mais grupos. Essas mensagens são representadas pelo modelo GroupModel no Traffic Inspector. No modelo todos os dados contidos no tópico são representados e existe uma lista que utiliza esse modelo para armazenar as mensagens recebidas durante a execução do programa. Com a utilização dessa lista, é possível manter a interface atualizada com as informações referentes a grupos, preenchendo os elementos de filtragem. 7.2.3. LoadReportTopic Nesse tópico são divulgadas informações sobre a carga de trabalho e os recursos utilizados em cada gateway. Esse tópico é lido pelo PoA-Manager para conhecer a carga atual de cada gateway e eventualmente realizar a distribuição de conexões de nós móveis para os gateways. O uso desse tópico tem, portanto, grande impacto no desempenho geral da comunicação na rede. Entre as informações mais importantes nesse tópico podemos citar a quantidade de veículos conectados a um determinado gateway e a memória utilizada em um gateway. As mensagens desse tópico são representadas no Traffic Inspector pelo modelo GatewayModel. Para armazenar as informações durante a execução do programa 17 existem duas listas que utilizam esse modelo. O conteúdo dessas listas tem a mesma funcionalidade das listas mencionadas anteriormente. 7.3. Interface Ao iniciar o programa, a tela principal é apresentada. A interface gráfica do Traffic Inspector oferece abas que relacionam os tópicos discutidos acima e cada visão da tela principal, e também contém controles responsáveis pela filtragem e amostragem dos dados da comunicação realizada durante a execução do programa pelo SDDL. A discussão sobre cada aba do programa é feita a seguir. 7.3.1. Truck Traking Information Para permitir que o usuário tenha controle sobre a carga de comunicação causada pela execução do Traffic Inspector, a interface oferece a possibilidade de o usuário conectar ou desconectar o programa do tópico TruckInformationTopic. Essa opção é dada devido a cenários onde existem muitos nós móveis conectados aos gateways, e o fluxo e volume de mensagens é maior do que o sistema operacional/protocolos, um hipervisor (no caso de uso de máquina virtual), o JVM ou o DDS conseguem suportar para uma determinada máquina hospedeira. Nessa aba é possível também filtrar as informações relativas ao tópico TruckInformationTopic. Para tanto, são oferecidos controles que utilizam parâmetros definidos pelo usuário para a filtragem como o índice de um nós identificados ou um grupo específico. Quando o programa é inicializado e não existem comunicações correntes, essa aba é apresentada como na (Figura 5) Nesse caso, nenhum dos elementos da interface relacionados à filtragem de dados é preenchido com informações, tendo em vista que não existem informações sobre nós móveis armazenados na aplicação. 18 Figura 5: Aba Truck Tracking Information do Traffic Inspector Uma vez que o programa inicia a identificação de mensagens no tópico TruckInformationTopic, os controles são preenchidos com informações relativas aos nós móveis conectados a um gateway e gerando dados de localização. Dessa forma, o usuário não se engana ao escolher uma opção de filtragem. Caso não haja um grupo de um dado número, esse número não será apresentado na interface. Esse conceito se aplica a todos os controles de filtragem e mantém a interface concisa com os dados inspecionados até o momento. Como opções de filtragem para esse tópico, o usuário tem quatro opções. A primeira delas é a filtragem por nó móvel. Esse filtro é necessário devido ao grande número de nós móveis que podem existir ao mesmo tempo em um cenário e serve como uma ferramenta para verificar se todos os nós móveis presentes nesse cenário estão enviando mensagens como deveriam. Esse filtro não é expressivo em relação à identificação do nó móvel, já que esses são identificados por informações mais complexas. Assim, esse filtro é preenchido conforme os nós móveis enviam mensagens. Isso impede a comparação de dados entre duas plataformas que 19 executem o Traffic Inspector por esse parâmetro, já que a numeração dos nós móveis está ligada a ordem de chegada das mensagens enviadas pelo mesmo. O segundo filtro apresentado nessa aba diz respeito aos grupos já mencionados no TruckInformationTopic. Dessa forma, cada vez que uma mensagem é identificada, o grupo ao qual o nó móvel pertence é verificado e caso seja novo no contexto de execução do programa, é adicionado à lista para referência futura. Dessa forma, caso um nó móvel pertença a um grupo e mude desse grupo durante a execução, suas mensagens antigas estarão armazenadas no grupo anterior e as novas mensagens serão visualizadas no novo grupo. A filtragem por grupos permite que o usuário identifique nós móveis de acordo com o número designado pelo GroupDefiner. Essa funcionalidade é importante tendo em vista que os grupos são designados dinamicamente. A terceira opção de filtragem é relativa ao gateway. Com esse filtro, é possível identificar quais nós móveis enviaram mensagens pela rede por um dado gateway. Sempre que uma mensagem no tópico TruckTrackingInformation é enviada, o programa inspeciona a mensagem, tal como é feito no caso acima. Caso o gateway ao qual a mensagem se refere não tenha sido identificado até o momento, ele é adicionado à lista de gateways disponíveis como parâmetros de filtragem. Da mesma forma realizada pela filtragem por grupos, a filtragem por gateway mantém as mensagens antigas como pertencentes ao gateway antigo, sem traduzi-las para um novo gateway em caso de HO. Essa característica é importante para que não haja discordância entre os dados quando uma verificação dos dados armazenados for realizada. A quarta opção de filtragem trata da filtragem customizada. Essa opção foi incluída para facilitar a visualização dos dados de acordo com parâmetros definidos pelo usuário. Existe cenários nos quais é necessário filtrar informações de dois grupos simultaneamente ou mesmo filtrar mensagens por um dado gateway e grupo ao mesmo tempo. Nesses cenários a utilização dos filtros básicos não é suficiente para realizar essas atividades. A filtragem customizada desse caso se aplica somente ao TruckInformationTopic e as principais características dessa funcionalidade serão discutidas mais adiante. Cada vez que um nó móvel divulga uma mensagem no tópico TruckInformationTopic sem que o programa tenha capturado alguma mensagem anterior pelo mesmo nó móvel, é escrita uma notificação na região de texto abaixo 20 da tabela de amostragem de dados. Essa região de texto foi criada para evitar o uso excessivo de janelas de alerta para o usuário. Tal decisão foi tomada já que o programa pode trabalhar com milhares de veículos e gerar uma janela de alerta para cada novo nó móvel que enviar uma mensagem seria completamente inviável. Dessa forma a interface se mantém simples e dinâmica, além da área de texto ser uma forma fácil de manter um registro de todas as notificações realizadas durante a execução do programa. Essa aba apresenta uma tabela para amostrar os dados de forma clara e organizada. Devido ao grande volume de dados gerados pela comunicação dos nós móveis na rede, uma área de texto é inviável já que a separação de cada mensagem por campo de informação se torna instável. Tendo em vista que os valores apresentados como a latitude ou longitude, se tentarmos formatar a mensagem ou truncar os valores para apresentá-los ao usuário, geramos inconsistências de informação. Dessa forma, a tabela se mostrou o melhor controle para realizar a visualização dos dados (Figura 6). Ainda nessa aba, temos dois botões. O primeiro botão apresenta uma janela de alerta que contém as informações do nó móvel selecionado na caixa localizada acima dele. Esse botão existe para identificar o nó móvel selecionado pelo seu identificador e não pelo indicador na caixa. Dessa forma, quando comparamos a execução de dois ou mais programas ao mesmo tempo, é possível identificar o nó móvel por dados do tópico. O segundo botão existe para desativar todos os filtros. Essa funcionalidade é importante para identificar o funcionamento da rede e verificar o recebimento de mensagens quando não existe necessidade de filtragem. 21 Figura 6: Aba Truck Tracking Information após identificação de mensagens 7.3.2. Group Information Similar ao Truck Tracking Information, para permitir que o usuário tenha controle sobre a carga de comunicação gerada devido ao Traffic Inspector, a interface oferece a possibilidade do conectar ou desconectar o programa do tópico TruckGroupInfoTopic. Essa opção se encontra disponível para o usuário mesmo que esse tópico tenha um fluxo de informações tendenciosamente menor do que o TruckInformationTopic, já que em um cenário onde os nós móveis mudem de grupos constantemente pode sobrecarregar os componentes que trabalham para o funcionamento do SDDL. Nessa aba é possível filtrar as informações relativas ao tópico TruckGroupInfoTopic. São oferecidos controles que utilizam parâmetros para a realização de uma filtragem de dados. Quando o programa é inicializado, todos os componentes da interface que oferecem as funcionalidades relacionadas à filtragem se encontram vazios. A janela resultante é apresentada na figura 7. 22 Figura 7: Aba Group Information Tão logo o subscriber do Traffic Inspector inicializa o reconhecimento de mensagens do tópico TruckGroupInfoTopic, essas mensagens oferecem os dados necessários para preencher os elementos que disponibilizam a filtragem para o usuário. Como somente informações já trafegadas são armazenadas, não é dada a possibilidade de seleção de grupos que nunca tenham sido mencionados nas mensagens até o momento. Esse controle permite que o usuário não cometa erros em relação à existência ou não de um grupo ao tentar filtrar os dados. Devido à quantidade reduzida de parâmetros para realizar uma pesquisa nesse tópico, apenas dois filtros são oferecidos para o usuário. O primeiro filtro se refere ao grupo que se deseja inspecionar. Dessa forma, sempre que o GroupDefiner definir um grupo para um dado nó móvel, uma mensagem será enviada no TruckGroupInfoTopic e será possível identificar os grupos ao quais o dado nó móvel pertence no momento. Esses grupos são então armazenados na aplicação e utilizados para preencher a caixa que contém os grupos possíveis. Com a utilização desse filtro é possível verificar todas as definições e mudanças de 23 grupos realizadas no decorrer da execução do programa, sendo possível identificar inconsistências. Um cenário onde um nó móvel muda de grupo faz com que o filtro da primeira aba não identifique o nó móvel como participante do grupo anterior nas mensagens futuras. Uma forma de confirmar que essa alteração está estritamente ligada a mudança de grupos é verificar se houve alguma mudança de grupos nessa aba relativa ao novo grupo do nó móvel. Filtragem customizada também é uma forma de filtragem oferecida nessa seção do programa. Utilizando esse filtro é possível identificar as mudanças de grupos relativas a um nó móvel específico ou um mesmo um gateway. Essa aba apresenta uma tabela para amostrar os dados de forma clara e organizada. Nessa tabela o usuário pode verificar os dados relativos à filtragem realizada pelo usuário. Os botões existentes nessa tela têm funcionalidades similares aos apresentados na aba anterior. O botão localizado abaixo da caixa que contém a numeração dos grupos identificados apresenta uma janela de alerta que contém do grupo selecionado. O segundo botão existe para desativar todos os filtros selecionados anteriormente. Quando algum novo grupo é identificado, é gerada uma mensagem de notificação para todas as abas. Essa mensagem é diferente daquela gerada pela primeira aba em caso de identificação de um novo grupo pelo tópico TruckInformationTopic. Assim, mesmo que haja um novo grupo na primeira aba, a mudança só irá se refletir nessa aba caso ocorra alguma mensagem no TruckGroupInfoTopic. Essa característica é adotada para manter a diferenciação dos dados de acordo com cada tópico, evitando assim que uma desconexão em outros tópicos comprometa a execução das funcionalidades relacionada com esse tópico. Para exemplificar, em um cenário onde um novo grupo foi identificado na aba de Truck Tracking Information, se a informação for atualizada na aba Group Information podemos ter dois grupos iguais ou mesmo um erro de execução devido à inclusão imprópria de um valor no controle relativo a segunda aba. 7.3.3. Gateway Load Information Similar ao Truck Tracking Information, para permitir que o usuário tenha controle sobre a carga de comunicação gerada devido ao Traffic Inspector, a 24 interface oferece a possibilidade do conectar ou desconectar o programa do tópico LoadReportTopic. Mesmo que uma rede não tenha uma quantidade considerável de gateways em situações rotineiras, existe a possibilidade de uma rede conter muitos desses elementos, aumentando a fluxo de dados. Tendo em vista essa possibilidade, essa opção é dada ao usuário. Nessa aba visualizar as informações do tópico LoadReportTopic. Como nas outras abas, o usuário pode tratar os dados obtidos pelo Traffic Inspector. Essa aba se comporta de forma similar as outras abas já apresentadas, ou seja, as opções de filtragem de dados estão vazias logo após a inicialização do programa. A figura 8 apresenta a aba em questão. Figura 8: Aba Gateway Load Information Os gateways conectados ao tópico LoadReportTopic e escrevem mensagens que são detectadas pelo programa. Assim que uma mensagem é identificada, o conteúdo da mensagem é utilizado para popular os elementos que permitem a filtragem de dados pelo usuário. 25 Como opções de filtragem para esse tópico, o usuário tem duas opções. A primeira delas é a filtragem por gateway. Similar a aba de Truck Tracking Information, nessa aba os gateways são identificados por números que não representam sua identificação real no contexto da rede. Dessa forma, comparar diretamente as informações obtidas durante a execução de dois ou mais Traffic Inspector não é a forma correta de comparar os dados já que a organização dos dados ocorre de acordo com a ordem de chegada das mensagens relativas ao tópico. Para oferecer mais flexibilidade para o usuário, a opção de filtragem customizada também é oferecida nessa aba. Utilizando esse filtro é possível identificar gateways que contenham quantidades específicas de nós móveis conectados ou mesmo que estejam com uma dada porcentagem de memória livre. Essa aba também apresenta uma tabela para a amostragem de dados. Os dois botões têm uma funcionalidade similar à primeira aba devido à similaridade dos dois tópicos. O primeiro botão mostra os dados do gateway selecionado na caixa localizada acima dele. O segundo botão existe para desativar todos os filtros, como realizado na primeira aba. 7.3.4. Custom Data Filtering Essa aba se difere das outras abas disponíveis no programa. Em todas as abas existem opções para filtragem customizada e essa funcionalidade é definida nessa seção do programa. 26 Figura 9: Aba Custom Data Filtering Para utilizar um filtro customizado, é necessário definir a expressão do filtro a ser utilizada. Existe um campo de texto onde o usuário pode escrever essa expressão e um botão para que o filtro seja salvo pelo programa. Essas expressões têm uma estrutura similar ao comando SQL WHERE, sendo que os parâmetros para a filtragem podem conter elementos como equals, and e or. Uma expressão exemplo seria “x<%0”: Nessa expressão, queremos informações no tópico nas quais a variável x receba um valor menor que a primeira variável definida na expressão (%0). É necessário que o usuário atribua o filtro a uma das abas do programa, selecionando uma das opções apresentadas na janela após a gravação da expressão, para que não ocorram inconsistências nas buscas e nas informações mostradas. Outro aspecto importante a ser mencionado é que qualquer filtro que tenha a sua sintaxe incorreta não irá notificar o usuário. Uma vez que esse filtro está salvo, é possível selecionar o filtro como uma opção na caixa de opções nas abas de filtragem customizadas discutidas anteriormente. 27 As expressões já escritas anteriormente são armazenadas e apresentadas na área de texto na parte inferior da tela. O usuário pode selecionar um filtro de sua escolha e editá-lo ou apagá-lo. Algumas considerações são importantes em relação a um filtro customizado. As expressões seguem os predicados e regras definidas em [6] e quando um filtro customizado é criado, todas as informações relativas a momentos anteriores a criação dele não são mostradas, ou seja, o filtro só é aplicado aos dados monitorados a partir do instante de sua criação. Ou seja, caso um usuário decida filtrar as informações sobre o TruckInformationTopic e nesse filtro seja utilizado um grupo como parâmetro, mensagens anteriores que contenham esse grupo como característica não serão exibidas na tabela da aba em questão. 7.4. Comunicação Para entendermos como o Traffic Inspector funciona, é necessário entender como o SDDL se comunica e quais são os tópicos envolvidos na comunicação. Para o Traffic Inspector, escolhemos os tópicos que eram diretamente relacionados ao desenvolvimento do exemplo utilizado acima sobre SDDL. 7.4.1. Recebimento/Processamento Como o objetivo principal do Traffic Inspector é inspecionar as atividades nos tópicos selecionados, para que o programa funcione corretamente ele precisa se conectar a todos esses tópicos. Uma vez conectado, ele aguarda que algum desses tópicos tenha atividade. Quando os tópicos são encontrados na rede, a linha de comando mostra uma mensagem indicando esse reconhecimento. Como o Traffic Inspector se direciona aos desenvolvedores do ContextNet, é importante que esses avisos sejam efetuados. Quando uma mensagem é identificada em um desses tópicos, o Traffic Inspector executa sua rotina para verificar o que deve ser feito com a mensagem. Sendo três os tópicos disponíveis para tratamento, a aplicação tem uma forma específica de lidar com cada um deles. No caso do TruckInformationTopic, a rotina tenta identificar novos nós móveis, grupos ou gateways. Essa atividade tem como objetivo manter a interface atualizada de acordo com a chegada de novas 28 mensagens. Em caso de TruckGroupInfoTopic, a rotina tenta identificar novos grupos e no caso de LoadReportTopic, novos gateways. Esse tipo de atividade adiciona overhead sobre o programa, pois são necessárias diversas verificações em listas para a verificação dessas informações. Dado a natureza da verificação em tempo real, essas rotinas mantiveram sua característica de atualização ao receber novos dados, mas em ambientes onde testes não precisam dessa rapidez, tais atualizações poderiam ser efetuadas em outros momentos, como quando o usuário seleciona um parâmetro para um filtro. 7.5. Base de Dados O Traffic Inspector mantém os dados das mensagens obtidas durante a sua execução em memória. Ou seja, quando o programa é finalizado, as informações obtidas e guardadas em memória durante aquela execução são perdidas. Como o programa tem um aspecto muito importante relacionado a testes e verificação de funcionamento, é necessário que essas informações sejam armazenadas em um local para consultas posteriores. Para tanto, um banco de dados foi utilizado para realizar a persistência dessas informações para uso posterior. Esse cenário é comum tendo em vista que testes nem sempre ocorrem no mesmo dia e podem estar sujeitos a imprevistos que forçam a sua parada. Como banco de dados foram escolhidos o MS Access em primeira instância e o MySQL ao final do projeto. Essa mudança se deu devido a quantidade de plataforma utilizadas no contexto do SDDL e a compatibilidade do MySQL com tais plataformas. 7.5.1. Escrita no banco de dados Para realizar a escrita no banco de dados, foi necessário entender do problema em questão. Um teste de carga utilizando o Traffic Inspector foi realizado. Esse teste consistia de 4000 nós móveis e dois gateways. Nesse teste, o programa escrevia no banco de dados sempre que havia alguma nova mensagem relativa a alguns dos tópicos. Essa postura funcionou durante esse teste, mas não há confirmação se ela irá funcionar em casos de teste maiores. Para resolver essa questão em testes mais extremos, é necessário limitar a interação do Traffic Inspector com o banco de dados. Uma forma razoável de realizar essa tarefa é 29 selecionar intervalos de tempo bem definidos, nos quais o programa escreve as informações que possui em suas estruturas de dados no banco de dados. Outra atitude, para evitar a perda de dados, é escrever as informações do Traffic Inspector no banco de dados quando o usuário tenta finalizar a aplicação. Essas foram as formas adotadas para manter os dados armazenados no banco sem atrapalhar o funcionamento do Traffic Inspector em cenário de teste muito carregados. 7.5.2. Leitura do banco de dados Uma vez que os dados obtidos durante a execução do Traffic Inspector se encontram armazenadas no banco de dados, é necessário realizar consultas nesse banco de dados para obter tais informações. Para tanto, é necessário ter conhecimento sobre SQL. O Traffic Inspector não fornece maneiras de consultar o banco de dados diretamente, ficando a cargo dos desenvolvedores do SDDL realizar as consultas manualmente no banco de dados caso seja necessário comparar dados ou mesmo consultar os dados obtidos em uma execução anterior do programa. 7.6. Adaptação do Traffic Inspector Devido ao status de protótipo, o middleware SDDL pode sofrer futuras mudanças relacionadas aos tópicos DDS envolvidos na comunicação. Nesse caso, é necessário atualizar o Traffic Inspector para refletir essas mudanças. Para realizar a tarefa de atualização, é necessário modificar os dados contidos no modelo do tópico referido. Depois disso, é preciso atualizar a camada de controle para que a tabela de visualização de dados reflita exatamente as modificações feitas no modelo. Em seguida, a interface precisa ser adaptada, em particular a tabela que exibe os dados: por exemplo, quando ocorre uma adição de novos campos no tópico, novas colunas precisam ser adicionadas à tabela. Também é necessário que os comandos SQL utilizados para armazenar as informações no banco de dados sejam atualizados, bem como o banco de dados em si nos casos de adições de novos campos aos tópicos. Devido à estruturação do Traffic Inspector em camadas baseadas no MVC, a atualização da aplicação se torna uma tarefa relativamente simples para os desenvolvedores do SDDL. 30 8. Considerações Finais Para visualizar os dados referentes à comunicação do SDDL, foi necessário o desenvolvimento de uma aplicação. Não havia qualquer aplicação no mercado que possuísse as características necessárias para facilitar os trabalhos de desenvolvimento do SDDL quando o assunto é a visualização das mensagens que trafegam na rede. Dessa oportunidade nasceu esse projeto e desse projeto uma aplicação Java foi criada. As funcionalidades da aplicação criada tentam se aproximar o máximo possível dos requisitos exigidos pela equipe. Testes foram realizados no ambiente do laboratório e mostraram resultados promissores relacionados ao funcionamento do Traffic Inspector. Depois dessa fase, os principais envolvidos com o desenvolvimento do SDDL estarão sobre o controle da ferramenta e sua confiabilidade será um aspecto que deverá ser julgado pela equipe durante o processo de desenvolvimento das atividades do laboratório. Os trabalhos realizados pela equipe na atualização e desenvolvimento do SDDL farão que atualizações no Traffic Inspector sejam realizadas para acompanhar essa evolução. Durante o desenvolvimento, foram tomadas atitudes para tornar essas atualizações uma tarefa possível para a equipe. 31 9. Referencias Bibliográficas [1] L. David, R, Vasconcelos, L. Alves, R. Andre, G. Baptista, M. Endler, A Communication Middleware Supporting Large scale Real-time Mobile Collaboration, IEEE 21st International WETICE, Track on Adaptive and Reconfigurable Serviceoriented and component-based Applications and Architectures (AROSA), Toulouse, June 2012 (to appear) [2] McConnell, Steve. Code Complete 2nd Edition. Redmond, Washington, USA, 2004, 914p. [3] Data Distribution Service for Real-time Systems. Jan. 2007. Disponível em: http://www.omg.org/cgi-bin/doc?formal/07-01-01. Acesso em: 11 jun. 2012. [4] Learn About Middleware: Take the Middleware Tour. Disponível em: http://www.twinoakscomputing.com/coredx/middleware_tour. Acesso em: 11 jun. 2012. [5] M. Endler, G. Baptista, L.D. Silva, R. Vasconcelos, M. Malcher, V. Pantoja, V. Pinheiro, ContextNet: Context Reasoning and Sharing Middleware for Large-scale Pervasive Collaboration and Social Networking, Laboratory for Advanced Collaboration, Department of Informatics, PUC-Rio, Brazil, 2011. [6] CoreDX Data Distribution Service: Content FilteredTopic Class Reference. Disponível em: http://www.twinoakscomputing.com/documents/coredx_refman_java_html/classcom_ 1_1toc_1_1coredx_1_1DDS_1_1ContentFilteredTopic.html. Acesso em: 11 jun. 2012. [7] FlowScan – Network Traffic Flow Visualization and Reporting Tool. Disponível em http://www.caida.org/tools/utilities/flowscan/. Acesso em 11 jun. 2012. 32