Service Discovery e Configuração Centralizada
Visão Geral
Este documento descreve o sistema de configuração centralizada e service discovery do ecossistema C-Suite. O objetivo é eliminar URLs hardcoded e padronizar variáveis de ambiente.
Módulo de Configuração Centralizada
Localização
O módulo principal está em: core_config.py (raiz do projeto)
Uso Básico
from core_config import get_service_url, get_db_config
# Obter URL de um serviço
feature_url = get_service_url("feature_service")
csuite_url = get_service_url("csuite_api")
# Obter configuração de banco
db_config = get_db_config("csuite") # ou "core", "staging"
connection_string = db_config.connection_string
Funções de Conveniência
from core_config import (
get_fourc_feature_service_url,
get_fourc_scoring_service_url,
get_fourc_decision_api_url,
get_fourc_executor_url,
get_csuite_api_url,
get_fourc_suite_api_url,
)
feature_url = get_fourc_feature_service_url()
scoring_url = get_fourc_scoring_service_url()
decision_url = get_fourc_decision_api_url()
executor_url = get_fourc_executor_url()
csuite_url = get_csuite_api_url()
fourc_suite_url = get_fourc_suite_api_url()
Variáveis de Ambiente Padronizadas
URLs de Serviços 4C
| Variável |
Descrição |
Padrão |
FOURC_FEATURE_SERVICE_URL |
Feature Service |
http://feature-service:8081 |
FOURC_SCORING_SERVICE_URL |
Scoring Service |
http://scoring-service:8082 |
FOURC_DECISION_API_URL |
Decision API |
http://decision-api:8080 |
FOURC_EXECUTOR_URL |
Executor |
http://executor:8084 |
FOURC_UI_APP_URL |
UI App |
http://ui-app:8085 |
Nota: Para compatibilidade, também aceita:
- FEATURE_SERVICE_URL (alias para FOURC_FEATURE_SERVICE_URL)
- SCORING_SERVICE_URL (alias para FOURC_SCORING_SERVICE_URL)
- DECISION_API_URL (alias para FOURC_DECISION_API_URL)
- EXECUTOR_URL (alias para FOURC_EXECUTOR_URL)
- UI_APP_URL (alias para FOURC_UI_APP_URL)
URLs de Serviços C-Suite
| Variável |
Descrição |
Padrão |
CSUITE_API_URL |
C-Suite Executive API |
http://localhost:8002 |
CSUITE_CONTEXT_API_URL |
C-Suite Context API |
http://localhost:8003 |
CSUITE_SALES_MANAGER_API_URL |
Sales Manager API |
http://localhost:8004 |
FOURC_SUITE_API_URL |
4C-Suite Orquestrador |
http://localhost:8000 |
Observability
| Variável |
Descrição |
Padrão |
PROMETHEUS_URL |
Prometheus |
http://observ_prometheus:9090 |
GRAFANA_URL |
Grafana |
https://grafana.internut.com.br |
LLM Services
| Variável |
Descrição |
Padrão |
LLM_OLLAMA_URL |
Ollama |
http://ollama:11434 |
Banco de Dados
C-Suite (padrão)
| Variável |
Descrição |
Padrão |
CSUITE_DB_HOST |
Host do MySQL |
localhost |
CSUITE_DB_PORT |
Porta do MySQL |
3306 |
CSUITE_DB_USER |
Usuário |
core |
CSUITE_DB_PASSWORD |
Senha |
(vazio) |
CSUITE_DB_NAME |
Nome do banco |
csuite |
Aliases: DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_NAME
4C (core)
| Variável |
Descrição |
Padrão |
MYSQL_HOST |
Host do MySQL |
localhost |
MYSQL_PORT |
Porta do MySQL |
3306 |
MYSQL_USER |
Usuário |
core |
MYSQL_PASSWORD |
Senha |
(vazio) |
MYSQL_DB |
Nome do banco |
core |
Staging
| Variável |
Descrição |
Padrão |
CSUITE_DB_STAGING_NAME |
Nome do banco staging |
csuite_staging |
CSUITE_DB_STAGING_PASSWORD |
Senha staging (opcional) |
(usa CSUITE_DB_PASSWORD) |
Exemplo de .env
# ============================================
# URLs de Serviços 4C
# ============================================
FOURC_FEATURE_SERVICE_URL=http://feature-service:8081
FOURC_SCORING_SERVICE_URL=http://scoring-service:8082
FOURC_DECISION_API_URL=http://decision-api:8080
FOURC_EXECUTOR_URL=http://executor:8084
FOURC_UI_APP_URL=http://ui-app:8085
# ============================================
# URLs de Serviços C-Suite
# ============================================
CSUITE_API_URL=http://localhost:8002
CSUITE_CONTEXT_API_URL=http://localhost:8003
CSUITE_SALES_MANAGER_API_URL=http://localhost:8004
FOURC_SUITE_API_URL=http://localhost:8000
# ============================================
# Observability
# ============================================
PROMETHEUS_URL=http://observ_prometheus:9090
GRAFANA_URL=https://grafana.internut.com.br
# ============================================
# LLM
# ============================================
LLM_OLLAMA_URL=http://ollama:11434
# ============================================
# Banco de Dados C-Suite
# ============================================
CSUITE_DB_HOST=vallery.catmgckfixum.sa-east-1.rds.amazonaws.com
CSUITE_DB_PORT=3306
CSUITE_DB_USER=core
CSUITE_DB_PASSWORD=sua_senha_aqui
CSUITE_DB_NAME=csuite
CSUITE_DB_STAGING_NAME=csuite_staging
# ============================================
# Banco de Dados 4C
# ============================================
MYSQL_HOST=vallery.catmgckfixum.sa-east-1.rds.amazonaws.com
MYSQL_PORT=3306
MYSQL_USER=core
MYSQL_PASSWORD=sua_senha_aqui
MYSQL_DB=core
Migração de Código Existente
Antes (hardcoded)
FEATURE_URL = "http://feature-service:8081"
SCORING_URL = "http://scoring-service:8082"
Depois (configuração centralizada)
from core_config import get_service_url
FEATURE_URL = get_service_url("feature_service")
SCORING_URL = get_service_url("scoring_service")
Ou usando funções de conveniência
from core_config import (
get_fourc_feature_service_url,
get_fourc_scoring_service_url,
)
FEATURE_URL = get_fourc_feature_service_url()
SCORING_URL = get_fourc_scoring_service_url()
Ambientes
Desenvolvimento Local
# .env.local
FOURC_DECISION_API_URL=http://localhost:8083
CSUITE_API_URL=http://localhost:8002
Docker Compose
# .env.docker
FOURC_DECISION_API_URL=http://decision-api:8080
CSUITE_API_URL=http://csuite-api:8000
Produção
# .env.prod
FOURC_DECISION_API_URL=https://decision-api.example.com
CSUITE_API_URL=https://csuite-api.example.com
Service Discovery
Modo Atual (Configuração via .env)
O sistema atual usa configuração via variáveis de ambiente. Isso é suficiente para a maioria dos casos.
Futuro: Service Discovery Real
Para ambientes mais complexos (Kubernetes, ECS), pode-se implementar:
- DNS-based Discovery: Usar nomes DNS internos
- Consul/etcd: Service registry centralizado
- Kubernetes Services: Usar service names do K8s
- AWS Service Discovery: Para ambientes AWS
Troubleshooting
Serviço não encontrado
from core_config import get_service_url
try:
url = get_service_url("servico_inexistente")
except ValueError as e:
print(f"Erro: {e}")
Verificar configuração carregada
from core_config import get_service_urls
urls = get_service_urls()
print(f"Feature Service: {urls.fourc_feature_service}")
print(f"C-Suite API: {urls.csuite_api}")
Debug de variáveis de ambiente
import os
from core_config import get_service_urls
# Verificar se variável está definida
print(f"FOURC_DECISION_API_URL: {os.getenv('FOURC_DECISION_API_URL', 'NÃO DEFINIDA')}")
# Ver configuração carregada
urls = get_service_urls()
print(f"Decision API URL: {urls.fourc_decision_api}")
Próximos Passos
- ✅ Módulo de configuração centralizada criado
- ⏳ Migrar todos os apps para usar
core_config
- ⏳ Atualizar documentação de cada app
- ⏳ Criar testes para configuração
- ⏳ Implementar service discovery real (se necessário)