À propos du projet
SWA (Self-hosted Website Analytics) est un petit serveur d'analyse web écrit en Rust qui stocke ses données dans SQLite. Il est conçu pour être déployé sur un serveur et exécuté sans services externes : l'interface utilisateur, l'API HTTP et le script de suivi sont tous intégrés dans un seul exécutable via rust-embed, et la base de données est un fichier unique.
Ensemble de fonctionnalités tel que décrit par le projet :
- Distribution en binaire unique contenant le tableau de bord, l'API et le tracker.
- Stockage SQLite en mode WAL, basé sur des fichiers et sans configuration.
- Architecture à deux ports : un port sert l'API publique du tracker qui reçoit les événements, un second port sert le tableau de bord authentifié.
- Suivi des pages vues plus des événements d'appel à l'action nommés, permettant de compter les connexions, les achats, les téléchargements ou d'autres conversions parallèlement aux visites.
- Support multi-domaines : plusieurs sites peuvent être suivis depuis une seule instance et commutés dans le tableau de bord.
- Comportement orienté vers la confidentialité : le Do-Not-Track est respecté, et les empreintes des visiteurs tournent quotidiennement plutôt que de s'appuyer sur des cookies.
- Le tableau de bord est protégé par des sessions basées sur des cookies avec un hachage de mot de passe argon2.
- L'interface utilisateur du tableau de bord est à thème sombre et affiche des statistiques en temps réel, des plages de dates sélectionnables, des graphiques Chart.js et un rafraîchissement automatique.
Les ports par défaut sont 3330 pour l'API du tracker et 3331 pour l'interface du tableau de bord, la base de données étant par défaut un fichier local ; ces trois éléments peuvent être modifiés via des drapeaux de ligne de commande. Un utilisateur lors du premier lancement ouvre le port du tableau de bord, enregistre un compte, puis ajoute l'extrait de suivi aux sites qu'il souhaite mesurer. Le tracker fait environ un kilo-octet et enregistre automatiquement le chemin de la page, le référent, le navigateur, le système d'exploitation et la taille de l'écran. En plus des pages vues, le script expose un objet global avec une méthode d'action prenant un nom et une étiquette optionnelle, et ces événements apparaissent dans la section Actions du tableau de bord.
La surface HTTP est divisée en conséquence. Le port du tracker expose des points de terminaison pour enregistrer les pages vues, enregistrer des actions nommées et servir le script de suivi. Le port du tableau de bord expose des points de terminaison authentifiés pour les totaux d'aperçu (vues, visiteurs uniques, vues moyennes par jour, actions totales), les séries quotidiennes de pages vues, les pages les plus consultées, les principaux référents, la répartition par navigateur et système d'exploitation, les statistiques d'action, les visiteurs actifs sur les cinq dernières minutes, la liste des domaines suivis, la récupération et la mise à jour des paramètres, ainsi qu'une suppression massive de toutes les données pour un domaine. Les points de terminaison d'inscription, de connexion et de déconnexion se trouvent sur le même port mais sont publics, la connexion définissant un cookie de session.
Le code source est organisé en un côté Rust (point d'entrée avec CLI, configuration à deux serveurs et gestion CORS ; schéma et requêtes SQLite ; modèles de requête et de réponse ; gestionnaires de points de terminaison ; middleware de session) et un répertoire front-end contenant le tracker, l'application monopage du tableau de bord, la page de connexion et d'inscription, la logique des graphiques et des tableaux, et la feuille de style. Les conseils de déploiement couvrent une unité systemd avec redémarrage automatique, et un flux optionnel de déploiement via git push utilisant un dépôt nu et un crochet post-receive qui extrait le code, construit un binaire de release et redémarre le service ; le README note que Rust doit être présent sur le serveur, ou qu'un binaire compilé croisé peut être copié pour les machines limitées. Le projet est publié sous licence MIT.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.