Projeto desenvolvido em Java 11 que realiza o parse do arquivo games.log, gerado pelo game Quake 3 Arena e expõe uma API RESTful para consulta dos dados de cada partida
- context: classes de repositório / acesso à dados
- core: classes de aplicação e serviço, onde são realizadas as serializações do arquivo games.log
- domain: classes de domínio / entidades, que representam as tabelas do banco de dados
- webapp: classes de recursos REST: a camada de entrada da aplicação para acesso aos dados serializados do arquivo games.log
Ao executar o projeto, o projeto webapp procura pelo arquivo na pasta resources, o lê e o envia para a classe de aplicação para iniciar a leitura por linha e o processo de parsing
Esta classe de aplicação possui acesso a uma classe de palavras-chave que quando encontradas na linha atual que está processando, chama um método de parse encontrado em alguma das classes de serviço, através de suas interfaces injetadas na aplicação (DI /IoC)
- InitGame: realiza o parse das informações de uma partida
- ClientUserInfoChanged: realiza o parse e captura as informações de um jogador. Após sua captura, insere os dados em uma tabela caso já não o tenha salvo
- Kill: realiza o parse e captura de uma morte, do jogador que matou e do jogador morto
- Shutdown: encerra a partida atual salvando seus dados em uma tabela, juntamente a lista de jogadores participantes, uma lista de mortes por jogador e o total de mortes
Observação: no arquivo há uma partida que se encerra sem o Shutdown ser registrado, portanto o processo de Shutdown também é realizado quando o parser encontra uma linha com apenas traços (ex: "-------) e quando um jogo estiver iniciado
Após o processo de parse e persistência em um banco de dados em memória (foi utilizado H2), o projeto expõe uma API REST na porta 8080 com o endpoint /games para consulta dos dados das partidas. No console e no arquivo de log, é exibida uma mensagem informando o endpoint do Swagger com a documentação da API, além do endpoint do Actuator, para informações sobre a saúde da aplicação (Health Check).
Verbo HTTP | Endpoint | Retorno |
---|---|---|
GET | /games | retorna uma lista com um resumo de todas as partidas |
GET | /games/{id} | retorna um resumo da partida com o ID informado |
GET | /games/{id}/details | retorna dados detalhados da partida com o ID informado |
GET | /actuator | retorna links com informações sobre health check |
GET | /swagger-ui.html | exibe documentação da aplicação |
Este projeto requer a instalação do Docker ou de alguma distribuição do JDK 11 (para desenvolvimento foi utilizada a distribuição Amazon Corretto OpenJDK)
Executar o arquivo app-windows-run.cmd, localizado na raiz do repositório
Executar o arquivo docker-windows-cmd.sh, localizado na raiz do repositório
- Na raiz do projeto (pasta gameapi), executar o comando: mvnw clean package
- Em seguida, executar o comando: java -jar webapp\target\webapp-0.0.1-SNAPSHOT.jar
Executar o arquivo app-linux-run.sh, localizado na raiz do repositório
Executar o arquivo docker-linux-run.sh, localizado na raiz do repositório
- Na raiz do projeto (pasta gameapi), executar o comando: ./mvnw clean package
- Em seguida, executar o comando: java -jar webapp/target/webapp-0.0.1-SNAPSHOT.jar
- docker image build -t games-log-parser-api .
- docker container run --name gameapi games-log-parser-api