Skip to content

Hamitay/quake3_parser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Quake 3 Parser

O Quake 3 Parser é uma aplicação escrita em Python 3.6, com o auxilio do microframework Flask.

A aplicação faz o parse de um log de um servidor de Quake 3 e o expõe, por meio de uma API RESTful, as estatísticas de mortes de cada partida no seguinte formato:

    "game_1": {
        "total_kills": 4,
        "players": [
            "Dono da Bola",
            "Mocinha",
            "Isgalamido",
            "Zeh"
        ],
        "kills": {
            "Dono da Bola": -1,
            "Mocinha": 0,
            "Isgalamido": 1,
            "Zeh": -2
        }
    }

Endpoints

A API possui dois endpoints:

GET

/games : retorna as estatísticas de todos os jogos

GET

/games/{numero_do_jogo} : retorna as estatísticas de um jogo específico

Pré-requisitos

Para rodar a aplicação é necessário ter instalado o Python 3.6 e o pip

Também sugere-se que se tenha o Docker e/ou virtualenv instalado, apesar de não serem estritamente necessários.

Rodando a aplicação

Existem três possiveis maneiras de rodar a aplicação:

Docker

A maneira mais simples e rápida de executar a aplicação é a partir do docker com o comando:

$ docker run -p 5000:5000 henriqueamitay/quake_parser:v2

Que irá baixar a imagem já upada no Docker-hub e executá-la. Com isso a API poderá ser utilizada em 127.0.0.1:5000

Via scripts (virtualenv)

O repositório possui dois scripts que provisionam um virtualenv e rodam a aplicação neste ambiente virtual. Apenas rode:

$ git clone git@github.com:Hamitay/quake3_parser.git
$ cd quake3_parser
$ bash setup_venv.sh
$ bash run_server.sh

Com isso a API poderá ser utilizada em 127.0.0.1:5000

  • Observação: Talvez seja necessário alterar o permissionamento destes scripts para poder executá-los.

Manualmente

Para rodar a aplicação manualmente e no mesmo ambiente é necessário executar os seguintes passos:

  1. Clonar o repositório:
$ git clone git@github.com:Hamitay/quake3_parser.git
$ cd quake3_parser
  1. Instalar as dependências:
$ pip3 install -r requirements.txt
  1. Setar as variaveis de ambiente:
$ export FLASK_APP=api

Caso queira usar algum outro arquivo de log para testar a api, pode-se alterar o caminho alterando a seguinte variável

$ export GAME_LOG_PATH=<caminho do .log>
  1. Rodar a aplicação:
$ python3.6 -m api.server

Com isso a API poderá ser utilizada em 127.0.0.1:5000

Testes

Os testes unitários podem ser rodados facilmente com o pytest. Para executar os testes:

Caso tenha utilizado Docker:

$ docker exec -it <id do container> pytest

Caso tenha utilizado os scripts:

Garanta que o virtualenv já exista e rode:

$ source env/bin/activate
$ pytest

Caso tenha instalado manualmente:

Apenas esteja no diretório da aplicação e rode:

$ pytest

Discussões sobre a solução

A aplicação funciona por meio de dois pacotes:

  • parser : pacote que executa o parseamento. Basicamente o log do servidor é aberto e suas informações são filtradas por meio de um série de expressões regulares.

  • api : pacote com a API propriamente dita, desenvolvida em Flask devido à sua simplicidade.

Uma questão interessante durante o desenvolvimento foi a necessidade de se usar cookies (ou algum tipo de cacheamento) ou algum banco de dados (ou outro tipo de permanência de informação) para que o arquivo não precise ser parseado em toda requisição.

Porém, apesar desta questão, foi decidido manter o parseamento em toda requisição devido a possibilidade de garantir que esta aplicação tenha uma resposta dinâmica. Poderiamos por exemplo, direcionar o output de um servidor de Quake 3 para a pasta que a aplicação acessa, com isso a API retornaria as informações do servidor em tempo real.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published