Skip to content

LucasBG0/logparser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Quake log parser

Task 1

Parser construído para analisar o arquivo de log src/public/logs/games.log.

O arquivo games.log é gerado pelo servidor de quake 3 arena. Ele registra todas as informações dos jogos, quando um jogo começa, quando termina, quem matou quem, quem morreu pq caiu no vazio, quem morreu machucado, entre outros.

O parser é capaz de ler o arquivo, agrupar os dados de cada jogo, e em cada jogo deve coletar as informações de morte.

Exemplo

21:42 Kill: 1022 2 22: <world> killed Isgalamido by MOD_TRIGGER_HURT

O player "Isgalamido" morreu pois estava ferido e caiu de uma altura que o matou.

2:22 Kill: 3 2 10: Isgalamido killed Dono da Bola by MOD_RAILGUN

O player "Isgalamido" matou o player Dono da Bola usando a arma Railgun.

Para cada jogo o parser deve gerar algo como:

game_1: {
    total_kills: 45;
    players: ["Dono da bola", "Isgalamido", "Zeh"]
    kills: {
      "Dono da bola": 5,
      "Isgalamido": 18,
      "Zeh": 20
    }
  }

Observações

  1. Quando o <world> mata o player ele perde -1 kill.
  2. <world> não é um player e não deve aparecer na lista de players e nem no dicionário de kills.
  3. total_kills são os kills dos games, isso inclui mortes do <world>.

Task 2

Tabela modelada em um banco de dados relacional como o MySQL e populada com o parser da Task 1.

As tabelas do banco de dados são criadas automaticamente, porém se necessitar, tem um dump.sql no diretório mysql/dump.sql

Task 3

Ranking geral de kills por jogador com campo de busca por nome do usuário. Os dados são consultados a partir da tabela gerada na Task 2. Aplicação é um SPA.

Plus

Relatório de mortes agrupando pelo motivo da morte, por partida.

Causas de morte (retirado do código fonte)

// means of death
typedef enum {
	MOD_UNKNOWN,
	MOD_SHOTGUN,
	MOD_GAUNTLET,
	MOD_MACHINEGUN,
	MOD_GRENADE,
	MOD_GRENADE_SPLASH,
	MOD_ROCKET,
	MOD_ROCKET_SPLASH,
	MOD_PLASMA,
	MOD_PLASMA_SPLASH,
	MOD_RAILGUN,
	MOD_LIGHTNING,
	MOD_BFG,
	MOD_BFG_SPLASH,
	MOD_WATER,
	MOD_SLIME,
	MOD_LAVA,
	MOD_CRUSH,
	MOD_TELEFRAG,
	MOD_FALLING,
	MOD_SUICIDE,
	MOD_TARGET_LASER,
	MOD_TRIGGER_HURT,
#ifdef MISSIONPACK
	MOD_NAIL,
	MOD_CHAINGUN,
	MOD_PROXIMITY_MINE,
	MOD_KAMIKAZE,
	MOD_JUICED,
#endif
	MOD_GRAPPLE
} meansOfDeath_t;

Exemplo:

"game-1": {
	kills_by_means: {
		"MOD_SHOTGUN": 10,
		"MOD_RAILGUN": 2,
		"MOD_GAUNTLET": 1,
		"XXXX": N
	}
}

Aplicação

A aplicação foi construida a partir de containers do Docker. Serão criados 3 containers:

  • Nginx ou parser-webserver (Servidor web)
  • PHP-FPM ou parser-app (aplicação com PHP-FPM 7.4 - FastCGI Process Manager ) O composer já vem instalado no container acima. Para conseguirmos utilizar o PHPunit para realizar a suíte de testes.
  • MySql ou parser-mysql (servidor de banco de dados MySql) - As tabelas do banco de dados são criadas automaticamente, porém se necessitar, tem um dump.sql no diretório mysql/dump.sql.

Estrutura de diretórios

	logparser
		|
		|-- mysql (arquivos e configs do banco de dados)
			|
			|-- dbdata (arquivos binários do mysql)
			|-- dump.sql (Dump das tabelas com os dados)
		|-- docker-compose.yml (arquivo de configuração docker)
		|-- nginx (diretório do servidor web nginx)
		|-- README.md (documentação do teste)			
		|-- src (arquivos do composer, PHPunit e diretório da aplicação)
			|
			|-- public (diretório da aplicação)
				|
				|-- classes (as classes que são utilizadas)
					|
					|-- Database (classes responsáveis pela conexão e CRUDS)
					|-- Game.php (Classe com dados das partidas)
					|-- Parser.php (Classe principal responsável por percorrer o log)
					|-- Player.php (Classe com o modelo do Player. Usado para um jogador ou uma arma
				|-- static (diretório dos arquivos estáticos. Ex: css, scss, js, svg, gif)
				|-- controller.php (controlador de ajax requests)
				|-- loader_classes.php (carrega as classes)
				|-- index.php (Arquivo principal index que chama todos os outros arquivos)
			|-- test (Suíte de testes - PHPunit)
			|-- phpunit.xml.dist (arquivo de configuração PHPunit)
			|-- composer.json (Dependências do projeto)
			|-- composer.lock (Dependências do projeto com as versões exatas)

Pré-requisitos para o setup:

Instalação

  1. Clone o repositório para o seu ambiente de desenvolvimento.

  2. Vá para a raiz do projeto e crie o arquivo das variaveis de ambiente a partir do arquivo .env.example. Se estiver usando um terminal linux utilize o comando para copiar:

    cp.env.example .env

  3. Caso queira, altere as variáveis de ambiente no arquivo copiado .env. É nesse arquivo que as credenciais do banco de dados estão definidas. A aplicação utiliza as variáveis de ambiente para realizar todas as operações com o banco de dados. Obs.: O host para se conectar no banco é o nome do container do MySQL.

  4. Para criar os containers, utilize o comando:

    docker-compose up -d

  5. Para confirmar o processo de criação dos containers, rode o comando:

    docker ps

Obs.: Caso algo de errado, você pode forçar a recriação com o comando:

docker-compose up --force-recreate
  1. Acesse o url da aplicação:

Compilar arquivos .scss com o Sass

  1. Se você está usando o Node.js, pode instalar o Sass usando o npm.

    npm install -g sass

  2. Assista a folhas de estilo e recompile quando elas mudarem:

    sass --watch src/public/static/scss:src/public/static/css

Docker

Relação de comandos mais usados no docker

Lista containers em execução

docker ps

Acessar o container

docker exec -it NOMEDOCONTAINER bash

Parar todos os containers

docker stop $(docker ps -a -q)

Liberar espaço em disco

docker volume prune

Remover images/containers

docker-compose rm #remove containers criados pelo docker-compose
docker rm $(docker ps -a -q) #remove todos os containers
docker rmi $(docker images -q -a) #remove todas as imagens

Listar imagens

docker images

Listar redes

docker network ls

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors