Skip to main content

viclix-agent

Registro de tráfico para apps FastAPI, listo para visualizar en Viclix.

Instala un middleware ASGI que registra cada request (IP, usuario, endpoint, hora, duración, status…) en un archivo JSONL dedicado. La escritura ocurre en un hilo de fondo con el archivo siempre abierto, así que el camino del request nunca hace I/O de disco. Después, esos logs alimentan la visualización animada de Viclix: quién entró, desde qué IP, a qué páginas y en qué orden.

Instalación

pip install viclix-agent

Uso mínimo

from fastapi import FastAPI
from viclix_agent import MiddlewareLogger

app = FastAPI()
app.add_middleware(MiddlewareLogger)

Eso ya crea la carpeta .viclix-agent/middleware/ y escribe ahí traffic-YYYY-MM-DD.jsonl.

Configuración

app.add_middleware(
    MiddlewareLogger,
    log_path=".viclix-agent/middleware/traffic.jsonl",  # ruta base (se le añade la fecha)
    trust_proxy=True,                       # IP real desde X-Forwarded-For (PythonAnywhere)
    rotation="daily",                       # "daily" o None
    include_query=False,                    # incluir query string (ojo con datos sensibles)
    ignore_paths=["/static", "/health"],    # prefijos que no se registran
)
Parámetro Default Descripción
log_path .viclix-agent/middleware/traffic.jsonl Ruta base del log.
trust_proxy True Lee la IP de X-Forwarded-For / X-Real-IP.
user_resolver lee request.state.user Callable[[scope], id] para extraer el usuario.
rotation "daily" Rotación diaria del archivo, o None.
include_query False Incluye el query string en el evento.
ignore_paths [] Prefijos de path a ignorar.
track_sessions True Cookie de sesión anónima (viclix_sid) por visitante.
session_cookie "viclix_sid" Nombre de la cookie de sesión.
session_ttl_days 365 Duración de la cookie de sesión.

Sesiones (trazar el flujo de un visitante)

Con track_sessions=True (por defecto), cada visitante recibe una cookie anónima viclix_sid y cada evento lleva un campo session. Así puedes seguir la secuencia completa de páginas de un mismo visitante aunque no haya login — por ejemplo, para ver qué flujo llevó a un usuario a un error 4xx/5xx:

GET /            -> 200   sess=44ef64b0
GET /checkout    -> 200   sess=44ef64b0
GET /boom        -> 500   sess=44ef64b0   ← el flujo que terminó en error

Identificar al usuario

Por defecto se lee request.state.user (lo que deje tu capa de auth). Si guardas un objeto, se prueban username, email, id, pk. Para lógica propia:

def resolver(scope):
    state = scope.get("state") or {}
    user = state.get("user")
    return getattr(user, "email", None)

app.add_middleware(MiddlewareLogger, user_resolver=resolver)

Visor (CLI)

El paquete instala el comando viclix-agent. Al ejecutarlo en tu terminal:

viclix-agent
  1. Lee los logs de .viclix-agent/middleware/ (todos los días agregados). Si no existe esa carpeta, busca recursivamente (hasta 3 niveles) como respaldo.
  2. Levanta un servidor local y abre el navegador con una visualización interactiva.
  3. Muestra estadísticas, línea de tiempo por sesión/IP (con animación del tráfico), endpoints e IPs más activas, y una tabla filtrable por IP, path, usuario o clase de status.

Mundo vivo (experimental)

En /experimental (enlace en el dashboard) hay una representación isométrica donde cada IP es una personita que sale de la "entrada" y camina hacia el endpoint que solicitó. Los endpoints se agrupan por clase (primer segmento del path) en distritos/products, /products/42 → distrito products — y el mapa empieza en 0 y crece a medida que se descubren IPs y endpoints. El color del pulso indica la clase de status del último request (verde/amarillo/naranja/rojo). Controles: reproducir, velocidad, scrub temporal, arrastrar para mover, rueda para zoom, Fit para reencuadrar. El motor de personajes es el de POKER (sprites.js).

Esta vista es autocontenida y pública: es la base de lo que luego se mostrará en Viclix.

Opciones:

viclix-agent [LOG]           # ruta a un .jsonl específico (opcional)
  --dir .                    # directorio raíz de búsqueda
  --depth 3                  # profundidad máxima de búsqueda
  --port 8787                # puerto del servidor local
  --all-days                 # agregar todos los archivos diarios de la misma base
  --no-browser               # no abrir el navegador automáticamente

Formato del log (JSONL)

Una línea JSON por request:

{"v":1,"ts":"2026-07-24T16:50:55.349029+00:00","ip":"1.2.3.4","method":"GET","path":"/dashboard","status":200,"duration_ms":3.06,"user":"jp@sizth.com","ua":"Mozilla/5.0","referer":null}
Campo Descripción
v Versión del esquema.
ts Timestamp ISO-8601 en UTC.
ip IP del cliente.
method Método HTTP.
path Ruta solicitada.
status Código de respuesta.
duration_ms Duración del request en ms.
user Identificador de usuario (o null).
session ID de sesión anónima (cookie viclix_sid).
ua User-Agent.
referer Referer.
query Query string (solo si include_query=True).

Notas de rendimiento

  • Los eventos se encolan en memoria y los escribe un hilo daemon; el request no espera al disco.
  • Si la cola se satura (queue_maxsize, 10k por defecto), los eventos nuevos se descartan en vez de bloquear la app. El writer lleva contadores written y dropped.
  • El archivo se hace flush cada segundo y se cierra limpiamente al terminar el proceso (atexit).

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

viclix_agent-0.3.5.tar.gz (38.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

viclix_agent-0.3.5-py3-none-any.whl (37.8 kB view details)

Uploaded Python 3

File details

Details for the file viclix_agent-0.3.5.tar.gz.

File metadata

  • Download URL: viclix_agent-0.3.5.tar.gz
  • Upload date:
  • Size: 38.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.6

File hashes

Hashes for viclix_agent-0.3.5.tar.gz
Algorithm Hash digest
SHA256 4ef91993d728b58a58bbce3adcde3d42aec2e601081357e0f2cf3795691a1bf4
MD5 015eec7788b9196b8a2541a8a5bddc72
BLAKE2b-256 94e907b113fb28cbf3d63a1e2af650df93c38121ddee63c0db03c2bb7bc64f47

See more details on using hashes here.

File details

Details for the file viclix_agent-0.3.5-py3-none-any.whl.

File metadata

  • Download URL: viclix_agent-0.3.5-py3-none-any.whl
  • Upload date:
  • Size: 37.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.6

File hashes

Hashes for viclix_agent-0.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 1e579121b0fd32c159752e2e5e7d196e371409815ba74c127a7366bbe9d5764a
MD5 7f2d6ffe7e07c40b73a45361b41c6064
BLAKE2b-256 8de723d9278a3e4d4baad508f15cb4a902400ad9eb248d219f8c0c63b03cddba

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page