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 2D/3D 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 escribe viclix_traffic-YYYY-MM-DD.jsonl en el directorio de trabajo.

Configuración

app.add_middleware(
    MiddlewareLogger,
    log_path="logs/viclix_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_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. Busca recursivamente (hasta 3 niveles) un log del middleware y usa el primero.
  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.

Metrópolis 3D (experimental)

En /experimental3d la misma idea, pero en three.js: una ciudad 3D donde las IPs son personitas low-poly que caminan del portón a su edificio-endpoint. Los edificios crecen con los hits, se agrupan por distrito, y cada request lanza un pulso de neón con el color de su status. Incluye sombras, niebla, cielo degradado y estrellas. Órbita arrastrando, zoom con la rueda, auto-rotación y encuadre automático del mapa que crece. three.js va empaquetado (funciona offline). No modifica la vista 2D.

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.4.tar.gz (191.9 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.4-py3-none-any.whl (195.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: viclix_agent-0.3.4.tar.gz
  • Upload date:
  • Size: 191.9 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.4.tar.gz
Algorithm Hash digest
SHA256 b862258178ab436b0530666793ef67090520a1553a19d907197d374e02bf3fbb
MD5 0756d65a9c883346a130e5b6e6635821
BLAKE2b-256 fe027e5537d1b25e0a02401e45dcf8d69c0ab6691099c6c8d767da0324b9a234

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viclix_agent-0.3.4-py3-none-any.whl
  • Upload date:
  • Size: 195.1 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.4-py3-none-any.whl
Algorithm Hash digest
SHA256 22e08e0568cc24e8d55eba7182e7d187c035171caa684781a1545266d8c5c078
MD5 bdbd6cdf0a69009d9615ca5dc312fabf
BLAKE2b-256 8c87b7002598d7bad4f1a34cf7a2a50a2ade76e86bae3f6ce00b08da5070e59f

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