198 lines
3.1 KiB
Markdown
198 lines
3.1 KiB
Markdown
# 📡 WiFi ETL Pipeline
|
|
|
|
🚧 **Em construção** 🚧
|
|
Este projeto está em desenvolvimento. Este primeiro commit contém a estrutura base do pipeline ETL.
|
|
|
|
---
|
|
|
|
## 🧠 Visão Geral
|
|
|
|
Este projeto tem como objetivo realizar a ingestão periódica de dados de duas APIs distintas:
|
|
|
|
* **API de Autenticação (WiFeed)** → Nome, CPF, sexo, MAC
|
|
* **API do Access Point (Ruijie)** → MAC, tempo conectado, AP
|
|
|
|
Os dados serão cruzados pelo **MAC Address** e persistidos em um banco **PostgreSQL** para análise e consulta.
|
|
|
|
---
|
|
|
|
## ⚙️ Arquitetura
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
|
|
A["Cron (Docker)\na cada 5 minutos"]
|
|
B["Python ETL Script"]
|
|
|
|
C["API Autenticação\nnome, cpf, sexo, MAC"]
|
|
D["API do AP\nMAC, tempo, AP"]
|
|
|
|
E["Transform\nmerge pelo MAC"]
|
|
F["PostgreSQL\nusers + sessions"]
|
|
|
|
A --> B
|
|
B --> C
|
|
B --> D
|
|
|
|
C --> E
|
|
D --> E
|
|
|
|
E --> F
|
|
```
|
|
|
|
|
|
|
|
<!-- Inserir diagrama aqui -->
|
|
|
|
<!-- Exemplo:  -->
|
|
|
|
### Fluxo
|
|
|
|
1. Execução automática a cada 5 minutos (cron via Docker)
|
|
2. Extração dos dados das APIs
|
|
3. Transformação (merge pelo MAC + normalização)
|
|
4. Carga no banco PostgreSQL
|
|
|
|
---
|
|
|
|
## 🏗️ Estrutura do Projeto
|
|
|
|
```
|
|
app/
|
|
├── core/ # Configurações e conexão com banco
|
|
│ ├── config.py
|
|
│ └── db.py
|
|
│
|
|
├── extractor/ # Extração das APIs externas
|
|
│ ├── ruijie.py
|
|
│ └── wifeed.py
|
|
│
|
|
├── transform/ # Regras de transformação
|
|
│ └── merge_mac.py
|
|
│
|
|
├── load/ # Persistência no banco
|
|
│ └── load_database.py
|
|
│
|
|
└── main.py # Orquestrador do pipeline
|
|
|
|
infra/
|
|
├── Dockerfile
|
|
├── docker-compose.yml
|
|
└── crontab
|
|
|
|
.env.example
|
|
requirements.txt
|
|
README.md
|
|
```
|
|
|
|
---
|
|
|
|
## 🚀 Como executar
|
|
|
|
> ⚠️ Observação: o projeto ainda está em fase inicial e algumas partes podem não estar totalmente implementadas.
|
|
|
|
### 1. Clonar o repositório
|
|
|
|
```bash
|
|
git clone <seu-repo>
|
|
cd wifi-etl
|
|
```
|
|
|
|
---
|
|
|
|
### 2. Configurar variáveis de ambiente
|
|
|
|
Crie um `.env` baseado no exemplo:
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
```
|
|
|
|
Preencha com suas credenciais:
|
|
|
|
```env
|
|
DB_HOST=
|
|
DB_PORT=5432
|
|
DB_NAME=
|
|
DB_USER=
|
|
DB_PASSWORD=
|
|
|
|
RUIJIE_BASE_URL=
|
|
RUIJIE_API_KEY=
|
|
|
|
WIFEED_BASE_URL=
|
|
WIFEED_API_KEY=
|
|
```
|
|
|
|
---
|
|
|
|
### 3. Subir o ambiente
|
|
|
|
```bash
|
|
docker-compose up --build -d
|
|
```
|
|
|
|
---
|
|
|
|
### 4. Execução
|
|
|
|
O pipeline será executado automaticamente a cada **5 minutos** via cron.
|
|
|
|
---
|
|
|
|
## 🗄️ Modelo de Dados (planejado)
|
|
|
|
### Tabela: users
|
|
|
|
* nome
|
|
* cpf
|
|
* sexo
|
|
* mac
|
|
|
|
### Tabela: sessions
|
|
|
|
* mac
|
|
* access_point
|
|
* tempo_conectado
|
|
* timestamp
|
|
|
|
---
|
|
|
|
## 🔄 Processo ETL
|
|
|
|
### Extract
|
|
|
|
Coleta dados das APIs Ruijie e WiFeed
|
|
|
|
### Transform
|
|
|
|
* Normalização de dados
|
|
* Merge pelo MAC Address
|
|
|
|
### Load
|
|
|
|
Inserção e/ou atualização no PostgreSQL
|
|
|
|
---
|
|
|
|
## 📦 Tecnologias
|
|
|
|
* Python
|
|
* Docker
|
|
* PostgreSQL
|
|
* Requests
|
|
|
|
---
|
|
|
|
## 📌 Roadmap
|
|
|
|
* [x] Estrutura inicial do projeto
|
|
* [ ] Integração com APIs
|
|
* [ ] Implementação do transform (merge por MAC)
|
|
* [ ] Persistência no banco
|
|
* [ ] Logging e tratamento de erros
|
|
* [ ] Deploy automatizado (CI/CD)
|
|
|
|
---
|
|
|