Solução do problema proposto pela MelhorEnvio aqui
NodeJS 16.5.0
pg(node-postgres)
dotenv
fast-csv
sequelize
PostgreSQL
- Atualizar o arquivo .env presente na pasta src/config com as suas credenciais para o banco de dados.
- inserir o arquivo logs.txt na pasta input
- Executar o comando
npm install
para instalar as dependencias utilizadas. - Executar o comando
npx sequelize db:migrate
. - Executar o comando
npm run ProcessFile
para extrair e salvar os dados pertinentes contidos no arquivo logs.txt. - Executar o comando
npm run GenerateReports
para gerar os relatórios presente nos requisitos (consumerPerService, consumerRequests, avgLatenciesPerService )
Ao análisar a stack utilizada pela empresa optei por utilizar javascript/nodejs. Para o banco de dados, apesar da stack utilizar MySQL optei pelo postgres, por possuir mais familiaridade com o mesmo. O arquivo logs.txt possui diversos atributos que não são utilizados para satisfazer os requistos e os mesmos foram desconsiderados já na extração. Cada relatório foi gerado separadamente e está presente aqui caso queira checar somente o resultado.
Procurei deixar o processo o mais simples e claro possível para ser executado, para tanto o separei em três partes. Primeiro a de executar as migrations para o banco de dados por meio do sequelize, dessa forma não precisei incluir um script sql para ser executado no cli do postgres(pgsql) ou em uma GUI como o PGAdmin, além de facilitar caso necessite fazer alguma alteração, o sequelize é utilizado somente para migrations. Passando para a parte de analisar e extrair os dados do arquivo logs.txt (espera-se que ele esteja contido dentro da pasta input e nomeado 'logs.txt', mas você pode mudar isso no arquivo (src/services/fileProcessor.js) utilizei o pacote fs e readline para ler o arquivo linha a linha e enviar para um método que chama o repositório de inserções(src/repository/insertQueries), esse respositório foi construido com o auxilio do pacote pg(node-postgres). Finalmente, para gerar os relatórios foi utilizado um repositorio (src/repository/reportQueries.js) e um pacote chamado fast-csv, basicamente cada report dispara uma query e chama uma função helper para criar o csv com o resultado das queries, os arquivos são criados na pasta /reports
A conexão com o banco foi abstraida e exporta o método pool.query presente no pacote pg. Existem duas pastas de config, uma na pasta raiz, que foi criada pelo sequelize e outra dentro da pasta src, que é a unica que precisa ser editada pois possui o arquivo .env. O código tenta seguir o airbnb style guide, mas foge de algumas recomendações que não estão presentes no ESLint/Prettier. Procurei focar em entregar os requisitos da melhor forma possivel e não me preocupar com requisitos para plenos/seniors. Não foi possível fazer o commit do arquivo logs.txt pois possui mais de 100mb.