- ⚙️ Visão Geral
- 🚀 Principais Recursos
- 🛠️ Principais Tecnologias
- 🧩 Arquitetura em Alto Nível
- 🧱 Requisitos
- 🧾 Configuração do Ambiente
- 💻 Execução Local
- 🗄️ Banco de Dados e Seeds
- 🧪 Testes e Qualidade
- 🤖 Pipelines CI/Deployment
- 📘 Documentação da API
- 🗂️ Estrutura de Pastas
Gaia Collector é um serviço Bun responsável por consumir mensagens de estações meteorológicas via MQTT seguro, normalizar os payloads recebidos em JSON e persistir os dados no MongoDB. Além do pipeline de ingestão, o projeto expõe um serviço HTTP leve para health-check e oferece um utilitário opcional para simular estações de telemetria durante o desenvolvimento.
- Ingestão MQTT: conexão segura com broker (
mqtts) e inscrição automática no tópico configurado. - Normalização e persistência: transformação do payload em documento enriquecido com
receivedAtetopic, armazenado na coleçãoreadings. - Validação de ambiente: schema Zod bloqueia o bootstrap quando variáveis obrigatórias estão ausentes ou inválidas.
- Serviço HTTP embutido: endpoint
GET /healthexpondo estado do coletor. - Logs explicativos: mensagens com ícones destacam conexões, inserções e erros de parsing.
- Simulador de telemetria: utilitário WebSocket/HTTP publica payloads fictícios no broker para testes.
- Bun 1.x como runtime JavaScript/TypeScript e servidor HTTP nativo.
- TypeScript para tipagem estática do projeto.
- mqtt (versão 5) como client MQTT com suporte TLS.
- MongoDB Node Driver para conexão e operações na base.
- Zod para validação de variáveis de ambiente.
- dotenv para carregar configurações do arquivo
.env. - Docker + docker compose utilizados no provisionamento local do MongoDB.
src/index.tsinicializa o processo: valida ambiente, ativa ingestão via MQTT e sobe o servidor HTTP de health-check.src/providers/brokergerencia um cliente MQTT singleton, incluindo reconexão e desligamento gracioso.src/modules/receive-and-process-dataconcentra a lógica de assinatura do tópico e persistência dos payloads no MongoDB.src/databasefornece a conexão única com o banco e controla o ciclo de vida do cliente MongoDB.test-generator/expõe HTTP/WebSocket emlocalhost:4445para controlar a simulação e enviar mensagens de teste ao broker.
- Bun 1.1+ (inclui
bun,bunxebun install). - Node.js opcional (apenas se quiser executar ferramentas externas não compatíveis com Bun).
- Docker e Docker Compose (opcional, recomendados para subir o MongoDB local).
- MongoDB 6+ (local ou remoto) acessível via URI.
- Broker MQTT com suporte a TLS (
mqtts).
-
Instale as dependências do projeto:
bun install
-
Crie um arquivo
.envna raiz (ou duplique o.env.example) e preencha as variáveis listadas abaixo. -
Utilize o certificado
global-bundle.pem(já incluso no repositório) quando precisar autenticar o client MQTT via CA.
| Variável | Descrição | Exemplo |
|---|---|---|
MQTT_BROKER_URL |
Hostname ou IP do broker MQTT. | mqtt.example.com |
MQTT_USERNAME |
Usuário para autenticação no broker. | your-mqtt-username |
MQTT_PASSWORD |
Senha do usuário MQTT. | your-mqtt-password |
MQTT_TOPIC |
Tópico de ingestão das mensagens. | sensors_data |
MQTT_PORT |
Porta segura do broker MQTT. | 8883 |
MONGODB_URI |
String de conexão com o MongoDB (inclui usuário/senha quando necessário). | mongodb://myuser:mypassword@localhost:27017/gaia?authSource=admin |
PORT |
Porta HTTP exposta pelo health-check do coletor. | 4444 |
CA_CERT_PATH |
Caminho para o certificado da CA usado na conexão TLS com o broker. | ./global-bundle.pem |
💡 Observação: o schema oficial das variáveis está em
src/schemas/env-schema.ts. Qualquer mudança de obrigatoriedade ou default deve ser aplicada lá antes de atualizar o.env.
docker compose up mongoO serviço expõe o MongoDB na porta 27017 com usuário e senha definidos no docker-compose.yml (myuser / mypassword). Atualize a MONGODB_URI para refletir essas credenciais.
bun run devO processo inicializa o pipeline MQTT e disponibiliza o health-check em http://localhost:4444/health. Você também pode executar diretamente o entrypoint:
bun run src/index.tsbun run test-generator/index.tsO utilitário serve a interface Web em http://localhost:4445. A partir dela é possível escolher estações fictícias e publicar mensagens de exemplo no broker configurado.
- A coleção padrão é
readings; os documentos recebem o payload original mais metadados (receivedAt,topic). - Não há scripts automáticos de seed. Utilize o simulador ou publique mensagens reais no broker para popular a base.
- Para manutenção local, explore
mongoshou ferramentas gráficas apontando para aMONGODB_URIutilizada.
- Ainda não existe suíte de testes automatizados. O script
bun run testinicia o simulador para facilitar cenários manuais. - Recomenda-se validar mensagens e fluxos usando o simulador ou clientes MQTT (MQTTX, mosquitto_pub) antes de promover alterações.
- Configure linting e type-check adicionais conforme necessário (ex.: Biome,
bunx tsc --noEmit).
- Continuous Integration (
.github/workflows/ci.yml) — executa em pushes/PRs paramaineproduction, validando regras de merge entre as branches principais. - Deployment reutilizável (
deployment.yaml) — workflow chamado por outros pipelines, responsável por buildar a imagem Docker, publicar no ECR e atualizar a task do ECS. - Staging Deployment (
staging-deployment.yaml) — dispara em pull requests paramain, reutilizandodeployment.yamlcomenvironment=deve herdando secrets para deploy no ECS.
GET /health— retorna{ "status": "ok" }quando o coletor está ativo.- Demais requisições respondem com mensagem simples confirmando que o serviço está em execução.
src/
constants/ # Variáveis e constantes derivadas de configuração
database/ # Conexão MongoDB (singleton e teardown)
modules/ # Casos de uso de ingestão e persistência
receive-and-process-data/
providers/ # Integrações externas (MQTT broker, etc.)
schemas/ # Schemas Zod para validar ambiente
test-generator/ # Servidor de simulação MQTT + assets estáticos
Dockerfile # Build da imagem Bun para produção