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.

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.3.tar.gz (36.2 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.3-py3-none-any.whl (35.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: viclix_agent-0.3.3.tar.gz
  • Upload date:
  • Size: 36.2 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.3.tar.gz
Algorithm Hash digest
SHA256 4dc62af21cc1b6a2613e0d3f3b4f5b81699082925543270834b6de95f045cb27
MD5 0c682cbb90bbccb4c7304fd1011f7d3a
BLAKE2b-256 2d87b3d11418bd7aa99d98249655c69034a660b51a8616e108b7a2788e44673f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viclix_agent-0.3.3-py3-none-any.whl
  • Upload date:
  • Size: 35.6 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 64fd1fe819021fe449f4bb107f0e234dd2f8f7e4b6964d213552cbd399e782bd
MD5 0e9b733ab503cfecba3da59a4f8ab129
BLAKE2b-256 eb2e6564cbb12bfe093d057b653d7a765d79a5fb981e8c7a48cf6bc204cdbee2

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