FastAPI (Python 3.13) ← API REST
├── NokiaClient (paramiko) ← reuso do especial_op/nokia.py
├── SlotAllocator (SQLite) ← gerenciamento de slots
└── Deepfield API client ← consulta stats (opcional)
Frontend
└── HTMX + TailwindCSS ← UI simples sem build step
(ou React se precisar de mais interatividade)
[project]
dependencies = [
"fastapi",
"uvicorn",
"paramiko",
"pyyaml",
"httpx", # Deepfield API calls
"jinja2", # templates HTML
]
nokia-filter-manager/
├── CLAUDE.md ← instruções para Claude neste projeto
├── config/
│ └── settings.yaml ← Nokia host/user/pass, Deepfield API key
├── src/
│ ├── nokia/
│ │ └── client.py ← cópia/adaptação do especial_op/nokia.py
│ ├── api/
│ │ ├── main.py ← FastAPI app
│ │ ├── routes/
│ │ │ ├── redirect.py ← POST/DELETE /redirect
│ │ │ └── status.py ← GET /status, /entries
│ │ └── slot_allocator.py
│ └── web/
│ └── templates/ ← HTML HTMX
├── data/
│ └── slots.db ← SQLite
└── wiki/
| Método |
Endpoint |
Descrição |
| GET |
/api/entries |
Lista todas entries ativas + hit counters Nokia |
| POST |
/api/redirect |
Adiciona redirect: |
| DELETE |
/api/redirect/ |
Remove redirect pelo slot |
| GET |
/api/slots/free |
Retorna próximo slot livre |
| GET |
/api/status |
Status do Nokia (filter stats) |
nokia:
host: 10.230.16.77
port: 22
user: dafranco
password: "pkq@HKN8abd-zat4fzq"
filter_name: "SYNANCK_REDIRECT"
deepfield:
host: https://10.110.17.114
api_key: 4YyKytOuFA6jwa
redirect:
default_nexthop: 198.51.100.250
slot_start: 100
slot_stop: 500000
slot_step: 100