# 🐍 Pycemaker - Repositório da API para Dashboard A aplicaçao server recebe solicitaçoes através de endpoints, coleta os dados do banco de dados MongoDB, trata-os e retorna-os em JSON ou dispara um e-mail com relatório observando um intervalo de tempo. # 📦 Repositórios integrantes do projeto | Repositório | Descrição | | --------------------------------------------------------------------------------------------- | --------------------------- | | [pycemaker-docs](https://github.com/pycemaker/pycemaker-docs) | Apresentação e documentação | | [pycemaker-dashboard-client](https://github.com/pycemaker/pycemaker-dashboard-client) | Front-End Dashboard | | [pycemaker-dashboard-api](https://github.com/pycemaker/pycemaker-dashboard-api) | API para Dashboard | | [pycemaker-dashboard-middleware](https://github.com/pycemaker/pycemaker-dashboard-middleware) | ETL e Scheduler | | [pycemaker-form-client](https://github.com/pycemaker/pycemaker-form-client) | Front-End para Formuário | | [pycemaker-form-server](https://github.com/pycemaker/pycemaker-form-server) | Api para Formuário | # ⚙️ Instruções de Instalação e Uso <ul> <li><b>Banco de dados</b></li> <ul> <li>Baixe e instale o banco de dados MongoDB:</li> <a href="https://www.mongodb.com/try/download/community">MongoDB Community 5.0.7</a> </ul> </ul> <ul> <li><b>Python</b></li> <ul> <li>Baixe e instale o ambiente de desenvolvimento Python:</li> <a href="https://www.python.org/downloads/">Python 3.10.4</a> </ul> </ul> <ul> <li><b>Dependências</b></li> <ul> <li>Abra o terminal na raiz desse repositório e instale as dependências necessárias: <br/> ```bash $ pip install -r requirements.txt ``` </li> </ul> </ul> <ul> <li><b>Criação das Variáveis</b></li> <ul> <li>Crie um arquivo <b>.env</b> e configure as variáveis a seguir: <br/> ```bash FLASK_APP=run.py:get_flask_app FLASK_DEBUG=1 FLASK_ENV=development flask run EMAIL_FROM=email_para_disparo_de_relatorios_e_alertas PASSWORD=senha_do_email ``` </li> </ul> <ul> <li>Configure um serviço no Firebase, gere uma chave e armazena-a na raiz desse repositório com o nome: <b>firebase-settings.json</b>. <br/> </li> </ul> </ul> <ul> <li><b>Execute a aplicação</b></li> <ul> <li>Abra o terminal na raiz desse repositório e execute o comando: <br/> ```bash $ py run.py ``` ou ```bash $ flask run ``` </li> </ul> </ul> <ul> <li><b>Execute a aplicação em ambiente virtual</b></li> <ul> <li>Abra o terminal na raiz desse repositório e execute os comandos: <br/> ```bash $ pip install virtualenv $ py -m venv env $ .\env\Scripts\activate $ py run.py ``` ou ```bash $ pip install virtualenv $ py -m venv env $ .\env\Scripts\activate $ flask run ``` </li> </ul> </ul> # 🗺️ Rotas * **/cpu/<date_now>/<time_range>** (Implementado) * **/ram/<date_now>/<time_range>** (Implementado) * `/disk/<date_now>/<time_range>` * `/reponse_time/<date_now>/<time_range>` * `/request_count/<date_now>/<time_range>` * `/http_fail/<date_now>/<time_range>` > Rotas *GET* que coletam todos os dados anteriores de consumo (CPU, RAM, Disco, Tempo de Resposta, Contagem de Requisições e Falhas HTTP) em um intervalo de tempo em horas **(time_range, ex: 06)** com base na data e hora recebida **(date_now, ex: 10-04-2022-09-43-23)**. ```sh Response: data: array com os dados solicitados (na mesma estrutura do banco) data_anterior: array com dados anteriores ao intervalo solicitado (na mesma estrutura do banco) mean: float com média sobre os dados do intervalo solicitado mean_anterior: float com média sobre os dados do intervalo anterior ao solicitado lower: array com todos os menores picos de uso (na mesma estrutura do banco) higher: array com todos os menores picos de uso (na mesma estrutura do banco) criticity_classification: array com a classificação de criticidade dos dados solicitados na seguinte estrutura: { criticity: string classificação, value: float valor em porcentagem sobre o total de dados } ``` * **/cpu/<date_start>** (Implementado) * **/ram/<date_start>** (Implementado) * `/disk/<date_start>` * `/reponse_time/<date_start>` * `/http_fail/<date_start>` > Rotas *GET* que coletam todos os dados de consumo (CPU, RAM, Disco, Tempo de Resposta, Contagem de Requisições e Falhas HTTP) a partir da data recebida **(date_start, ex: 10-04-2022-09-43-23)**. ```sh Response: array com os dados solicitados (na mesma estrutura do banco) ``` * **/report/<date_now>/<time_range>/<email_to>** (Implementado) > Rota *GET* que dispara criação de relatório e envio de e-mail para o endereço solicitado **(email_to, ex: roberto@email.com)** com todos os dados anteriores de consumo (CPU, RAM, Disco, Tempo de Resposta, Contagem de Requisições e Falhas HTTP) em um intervalo de tempo em horas **(time_range, ex: 06)** com base na data e hora recebida **(date_now, ex: 10-04-2022-09-43-23)**. ```sh Response: msg: "Relatório enviado com sucesso!" ``` # 📂 Estrutura de arquivos ``` . |___.env # guarda variáveis sensíveis da aplicação |___.gitignore # ignore arquivos e pastas em respositório git |___firebase-settings.json # guarda chaves de conexão com o servidor Firebase |___README.md # documentação descritiva |___run.py # inicia servidor Flask |___requirements.txt # lista as dependências necessárias |___app |_____init__.py # cria servidor Flask |___routes.py # classe representativa das rotas |___controller | |___cpu.py # classes controladoras das rotas cpu | |___disk.py # classes controladoras das rotas disk | |___http_fail.py # classes controladoras das rotas http_fail | |___ram.py # classes controladoras das rotas ram | |___report.py # classe controladora da rota report | |___response_time.py # classes controladoras das rotas response_time |___entities | |___cpu.py # classe representativa da collection cpu_usage no banco de dados MongoDB | |___disk.py # classe representativa da collection disk_usage no banco de dados MongoDB | |___http_fail.py # classe representativa da collection http_fail no banco de dados MongoDB | |___ram.py # classe representativa da collection jvm_memory_usage no banco de dados MongoDB | |___response_time.py # classe representativa da collection response_time no banco de dados MongoDB |___services |___image_uploader.py # objeto para upload de imagens no servidor Firebase |___mailer.py # objeto para disparo de e-mails |___monitoramento.py # objeto para coleta de dados de consumo |___plot_generator.py # funções para geração de gráficos |___reporter.py # objeto para criação do relatório ```