- App FastAPI (main.py, app/): rotas /health e /dados_retorno, middleware anti-scanner, logging configurado - Config via configs.json (Pydantic); segredos fora do codigo e do git (.gitignore) - Dockerfile (oracledb thin, HEALTHCHECK) + requirements.txt + .dockerignore - Deploy Podman/Quadlet + Caddy em deploy/ - Docs: CLAUDE.md + docs/ (arquitetura, deploy, known-issues) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.3 KiB
2.3 KiB
API-Scardua
API FastAPI de integração da Scardua com serviços externos (Holmes, Apollo) e banco Oracle. No ar: https://api-scardua.flstecnologia.tech
Visão e roadmap
Ideia, arquitetura e roadmap completos: docs/arquitetura.md.
Resumo: a API roda na nossa VPS (FLS), não na do cliente — recebe dados do Holmes do cliente (Scardua), trata, e devolve pro Oracle dele via um conector no server do cliente (o Oracle está em rede privada 10.16.x, inalcançável direto da VPS).
Stack
- Python ≥3.10 · FastAPI + Uvicorn (ASGI)
- Pydantic v2 (validação e config)
- httpx (chamadas às APIs externas)
- oracledb — driver Oracle em thin mode (sem Instant Client)
- Deps em
pyproject.toml(extradev: pytest, ruff).requirements.txt= só runtime (usado no Dockerfile).
Estrutura
main.py— app FastAPI, middleware, rotas raiz (/health,/dados_retorno,/docsprotegido), config de loggingapp/config.py— carregaconfigs.json(Pydantic) no import (precisa existir ou a app não sobe)app/middleware.py—block_scanners: denylist + heurística anti-scanner (NÃO é allowlist estrita)app/security.py— JWT + auth via Oracle (⚠️ incompleto — ver docs/known-issues.md)app/services/holmes.py— integração com a API do Holmesapp/services/controle_api.py— grava telemetria/contadores no Oracleapp/v1/— router versionado (/v1/...)
Rodar local (Windows)
Precisa do configs.json na raiz (NÃO versionado — ver configs.example.json).
uvicorn main:app --reload --port 8000
Config e segredos
- Tudo vem de
configs.json, lido emapp/config.py. Está no.gitignoree.dockerignore— nunca commitar. - Template seguro e versionável:
configs.example.json.
Deploy
Container Podman na VPS (Debian 13, rootless + Quadlet + Caddy). Runbook: docs/deploy.md.
Convenções
- Código, nomes e comentários em português.
- Lint/format: ruff (config no
pyproject.toml— linha 120, aspas duplas). - Logging: use
logging.info/error; o nível é configurado emmain.pyviasettings.log_level.
Problemas conhecidos
Lista completa em docs/known-issues.md. (A senha do Holmes já saiu do código pro configs.json — feito em 2026-07-23.)