Sobre el proyecto
SWA (Self-hosted Website Analytics) es un servidor pequeño de análisis web escrito en Rust que almacena sus datos en SQLite. Está diseñado para implementarse en un servidor y ejecutarse sin servicios externos: la interfaz de usuario, la API HTTP y el script de seguimiento están integrados en un solo ejecutable a través de rust-embed, y la base de datos es un único archivo.
Conjunto de características según el proyecto:
- Distribución en un único binario que contiene el panel, la API y el rastreador.
- Almacenamiento SQLite en modo WAL, basado en archivos y sin configuración.
- Arquitectura de dos puertos: un puerto sirve la API pública del rastreador que recibe eventos, y un segundo puerto sirve el panel autenticado.
- Seguimiento de vistas de página más eventos de llamada a la acción (call-to-action) nombrados, permitiendo contar inicios de sesión, compras, descargas u otras conversiones junto con las visitas.
- Soporte multidominio: se pueden rastrear varios sitios desde una sola instancia y alternar entre ellos en el panel.
- Comportamiento orientado a la privacidad: se respeta el Do-Not-Track y las huellas digitales de los visitantes rotan diariamente en lugar de depender de cookies.
- El panel está protegido por sesiones basadas en cookies con hashing de contraseñas argon2.
- La interfaz del panel tiene un tema oscuro y muestra estadísticas en tiempo real, rangos de fechas seleccionables, gráficos de Chart.js y actualización automática.
Los puertos predeterminados son el 3330 para la API del rastreador y el 3331 para la interfaz del panel, con la base de datos predeterminada en un archivo local; los tres pueden cambiarse mediante flags de línea de comandos. Un usuario que lo inicia por primera vez abre el puerto del panel, registra una cuenta y luego añade el fragmento de seguimiento a los sitios que desea medir. El rastreador mide aproximadamente un kilobyte y registra automáticamente la ruta de la página, el referente, el navegador, el sistema operativo y el tamaño de la pantalla. Además de las vistas de página, el script expone un objeto global con un método de acción que acepta un nombre y una etiqueta opcional de formato libre, y esos eventos aparecen en la sección de Acciones del panel.
La superficie HTTP se divide en consecuencia. El puerto del rastreador expone endpoints para registrar vistas de página, registrar acciones nombradas y servir el script de seguimiento. El puerto del panel expone endpoints autenticados para totales generales (vistas, visitantes únicos, promedio de vistas por día, acciones totales), series diarias de vistas de página, páginas principales, referentes principales, desgloses de navegador y sistema operativo, estadísticas de acciones, visitantes activos en los últimos cinco minutos, la lista de dominios rastreados, recuperación y actualización de configuración, y una eliminación masiva de todos los datos de un dominio. Los endpoints de registro, inicio de sesión y cierre de sesión residen en el mismo puerto pero son públicos, y el inicio de sesión establece una cookie de sesión.
El código fuente se organiza en un lado de Rust (punto de entrada con CLI, configuración de dos servidores y manejo de CORS; esquema y consultas de SQLite; modelos de solicitud y respuesta; manejadores de endpoints; middleware de sesión) y un directorio front-end que contiene el rastreador, la aplicación de página única del panel, la página de inicio de sesión y registro, la lógica de gráficos y tablas, y la hoja de estilos. La guía de despliegue cubre una unidad de systemd con reinicio automático y un flujo opcional de git push-to-deploy utilizando un repositorio bare y un hook post-receive que descarga el código, compila un binario de lanzamiento y reinicia el servicio; el README señala que Rust debe estar presente en el servidor, o que se puede copiar un binario compilado cruzadamente para máquinas limitadas. El proyecto se publica bajo la licencia MIT.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.