À propos du projet
Glance est un service d'analyse web auto-hébergé livré sous la forme d'un seul binaire Go s'appuyant sur un fichier SQLite, ou sous la forme d'un conteneur Docker. Il est délibérément limité à un petit ensemble de données plutôt que d'être une plateforme complète d'analyse de produit : visiteurs, pages vues, pages principales, référents, pays et régions, appareils, navigateurs, systèmes d'exploitation et événements personnalisés simples. Il n'y a pas de sessions, d'entonnoirs, de cohortes, de cartes de chaleur ou de relecture de session.
Suivi : les sites intègrent un snippet sans cookie d'environ 1 Ko servi depuis /glance.js. Il envoie un petit corps JSON par page vue via sendBeacon et renvoie les données lors de pushState et popstate pour les applications monopages. Des événements personnalisés peuvent être déclenchés depuis la page, avec des propriétés acceptées mais actuellement ignorées. Le serveur valide l'hôte de la page par rapport au domaine du site, rejette les bots connus, les navigateurs signalés par webdriver et les corps trop volumineux, et répond toujours 202. Les adresses localhost et LAN privées sont acceptées afin qu'un site puisse être testé avant le déploiement. Les dimensions dérivées incluent le navigateur, l'OS, l'appareil, le pays, la région et les balises de campagne.
Confidentialité : pas de cookies et pas d'IP stockées. Un visiteur est identifié par un hachage SHA-256 tronqué d'un sel quotidien plus le site, l'IP et l'agent utilisateur ; le sel change chaque jour UTC et est persisté, donc les visiteurs ne peuvent pas être suivis d'un jour à l'autre. Le nombre de visiteurs d'une journée est exact, tandis que les totaux multi-jours additionnent les visiteurs uniques quotidiens. Le pays et la région proviennent d'un en-tête de pays proxy lorsqu'il est présent, sinon du fuseau horaire du navigateur mappé via une table dérivée d'IANA ; les régions sont la partie ville de ce fuseau, il n'y a donc pas de rapports au niveau de la ville. Les référents sont réduits à l'hôte uniquement et les hôtes communs sont aliasés.
Architecture : les événements vont dans une file d'attente en mémoire et ne touchent jamais la base de données sur le chemin de la requête ; une goroutine d'écriture valide la file chaque seconde ou tous les 200 événements dans une seule transaction. Les agrégations horaires et quotidiennes sont reconstruites à partir des événements bruts chaque minute et à l'ouverture du tableau de bord, et le tableau de bord ne lit que les agrégations. Les événements bruts sont purgés après une période de rétention (7 jours par défaut, minimum 2, ajustable jusqu'à 90 sauf si fixé par une variable d'environnement) ; les agrégations sont conservées indéfiniment. Les favicons sont récupérées par Glance lui-même via une protection SSRF qui refuse les adresses de boucle locale, privées, link-local et NAT de classe opérateur, et la carte utilise des contours Natural Earth intégrés rendus avec MapLibre, donc aucun service tiers n'est nécessaire à l'exécution.
Tableau de bord et API : l'interface Svelte intégrée liste chaque site avec une favicon, une sparkline de 14 jours et les visiteurs de cette semaine par rapport à la semaine dernière, avec glisser-déposer pour réorganiser. Par site, elle affiche les totaux avec le changement par rapport à la fenêtre équivalente précédente de 24h à 180j, un graphique, les personnes actives dans les 30 dernières minutes, des cartes de répartition par onglets (pages, sources, lieux, appareils, événements), des listes filtrables extensibles, un globe 3D en direct des cinq dernières minutes et une carte de zone, ainsi que des paramètres par site pour le nom, le domaine, la plage par défaut, la couleur d'accentuation et le pays d'origine. Les points de terminaison se trouvent sous /api/v1 et couvrent collect, sites, stats, breakdown, live, favicons, rollup, status, settings, export et la gestion des jetons. L'authentification admin utilise des cookies de session ou HTTP Basic ; les jetons API sont stockés sous forme de hachages et sont en lecture seule.
Extras : un point de terminaison Model Context Protocol en lecture seule à /mcp (Streamable HTTP) expose des outils incluant list_sites, overview, site_stats, breakdown, search_terms et revenue pour les agents IA ; il n'y a pas de LLM à l'intérieur de Glance. Des intégrations optionnelles ajoutent les termes de recherche Google Search Console via OAuth (portée webmasters.readonly, environ 16 mois récupérés à la connexion et rafraîchis quotidiennement) et les revenus Polar avec une attribution au premier contact mémorisée dans le localStorage du navigateur du visiteur et transmise via les métadonnées de paiement. Le guide de déploiement couvre Docker Compose et les images ghcr.io préconstruites pour linux/amd64 et linux/arm64, un fichier compose séparé pour les hôtes de type Dokploy, et la construction à partir des sources avec Go 1.27, Node 24 et un pilote SQLite en pur Go. L'image publiée fait environ 37 Mo et consomme moins de 10 Mo de mémoire au repos. Licence : MIT.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.