O objetivo deste projeto é criar um sistema distribuído e escalável para eleições, contendo aplicações responsáveis para votação, gerenciamento de eleição, e consulta de resultados utilizando Java, Docker, MariaDB, Quarkus e Arquitetura Cebola.
Este projeto conta com 3 módulos:
Projeto de laboratório da dio.me com o especialista Thiago Poiani
- Linguagem
- Java 17
- Framework
- Testabilidade
- ORM
- Migração
- Conteinerização
- Tráfego
- Armazenamento
- Observabilidade
Algumas mudanças e atualizações que fiz em relação com o projeto original:
- Banner personalizado do quarkus:
- No arquivo cicd-build.sh foi adicionado comando para fazer com que o script atualize a versão da aplicação no arquivo docker-compose.yml, assim quando for utilizar o comando docker compose up de uma das aplicações, já irá utilizar a TAG referente à última versão.
- Uso de assertAll para encapsular série de assertEquals.
- Criação de Coleção do Postman para fazer requisições aos endpoints.
- Criado mais testes para Election Management e Voting App e adição do Jacoco para relatório de coverage:
A aplicação Election Management encontra-se na pasta election-management
.
Readme do Election Management
A aplicação Voting App encontra-se na pasta voting-app
.
Readme do Voting App
A aplicação Result App encontra-se na pasta result-app
.
Readme do Result App
Para iniciar as aplicações, antes é importante subir primeira os containers abaixo para montar a infraestrutura, seguem abaixo os comandos a serem executados:
docker compose up -d reverse-proxy jaeger graylog
docker compose up -d caching database
Após o graylog subir, para configurá-lo para protocolo UDP, pode-se usar o comando abaixo ou fazer a requisição com os parâmetros, por exemplo, via postman:
curl -H "Content-Type: application/json" -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "X-Requested-By: curl" -X POST -v -d '{"title":"udp input","configuration":{"recv_buffer_size":262144,"bind_address":"0.0.0.0","port":12201,"decompress_size_limit":8388608},"type":"org.graylog2.inputs.gelf.udp.GELFUDPInput","global":true}' http://logging.private.dio.localhost/api/system/inputs
Esta configuração para o graylog é necessária somente uma vez.
Para as aplicações desenvolvidas, primeiro criar o build para cada aplicação, abaixo existe os comandos para build das três aplicações: O script para CI/CD Build está no arquivo cicd-build.sh
./cicd-build.sh election-management
./cicd-build.sh voting-app
./cicd-build.sh result-app
Com o comando para CI/CD Build, o script já cria a imagem do docker com a versão como TAG. Para realizar um blue green deployment, utilize os comandos abaixo conforme a aplicação: O script para CI/CD Blue Green Deployment está no arquivo cicd-blue-green-deployment.sh
./cicd-blue-green-deployment.sh election-management 1.0.0
./cicd-blue-green-deployment.sh voting-app 1.0.0
./cicd-blue-green-deployment.sh result-app 1.0.0
Lembre-se de antes de executar o deployment, revisar a versão (TAG) que vem após o nome da aplicação.
Para executar a aplicação localmente em modo de dev, entre na pasta da aplicação e utilize o comando no terminal:
quarkus dev
Após a aplicação carregar pode-se acessar o painel Dev UI do Quarkus pelo link: http://localhost:8091/q/dev/
Atenção para a porta, cada aplicação tem uma definida para execução de dev (para não conflitar com o container do proxy reverso), sendo:
- Porta 8091 para election-management
- Porta 8092 para voting-app
- Porta 8093 para result-app
Quando a aplicação carrega aparece a seguinte mensagem de "Tests paused":
Para ativar os testes é só teclar o "r". No modo DEV o Quarkus faz uso de Live Reload, ou seja, conforme estiver
editando o código o Quarkus irá recarregar e refazer os testes praticamente em tempo real.
Para ativar o Live reload basta teclar "l" que será mostrado se o recurso foi habilitado ou desabilitado.
Observação: Quando algum teste ou funcionalidade não estiver respondendo como esperado basta reiniciar teclando "s"
para forçar a reinicialização ou então teclar "q" para sair e executar o comando quarkus dev
novamente.
Quando a aplicação estiver em execução com quarkus dev
para acessar o Swagger é só abrir o link: http://localhost:8091/q/swagger-ui/
Lembre-se que cada aplicação tem sua respectiva porta conforme descrito anteriormente ou consultando o application.properties
de cada uma
Para executar testes unitários e os testes de integração, dentro da pasta do projeto que deseja testar, utilizar o comando abaixo:
./mvnw verify -DskipITs=false -Dquarkus.log.handler.gelf.enabled=false -Dquarkus.opentelemetry.enable=false -Dquarkus.datasource.jdbc.driver=org.mariadb.jdbc.Driver
Para checar o coverage, dentro da pasta do projeto, procure pelo arquivo target\jacoco-report\index.html
.
Abaixo exemplo do Jacoco Report para o Voting Api:
Neste projeto foi adicionado coleção de Postman para se fazer conexões às APIs.
O arquivo da coleção está em postman/Election System.postman_collection.json
Antes de mais nada, para existir e poder acessar os logs é importante ter o graylog em execução,
como executar pode ser visto em Docker Compose de Iniciando as aplicações.
Para acessar os logs pelo navegador utilize: http://logging.private.dio.localhost.
Login padrão:
- Usuário: admin
- Senha: admin
Para acessar a telemetria coletada, no navegador utilize a url: http://telemetry.private.dio.localhost. Login padrão:
- Usuário: admin
- Senha: admin
Para acessar dashboard do Traefik no navegador utilize: http://localhost:8080/