Sobre o projeto
SWA (Self-hosted Website Analytics) é um pequeno servidor de análise web escrito em Rust que armazena seus dados em SQLite. Ele foi projetado para ser colocado em um servidor e executado sem serviços externos: a interface do usuário, a API HTTP e o script de rastreamento estão todos incorporados em um único executável através do rust-embed, e o banco de dados é um único arquivo.
Conjunto de funcionalidades descrito pelo projeto:
- Distribuição em binário único que contém o painel, a API e o rastreador.
- Armazenamento SQLite em modo WAL, baseado em arquivo e com configuração zero.
- Arquitetura de duas portas: uma porta serve a API pública do rastreador que recebe eventos, e uma segunda porta serve o painel autenticado.
- Rastreamento de visualizações de página (pageviews) mais eventos de chamada para ação (call-to-action) nomeados, permitindo que logins, compras, downloads ou outras conversões sejam contados junto com as visitas.
- Suporte a múltiplos domínios: vários sites podem ser rastreados a partir de uma única instância e alternados no painel.
- Comportamento orientado à privacidade: o Do-Not-Track é respeitado, e as impressões digitais (fingerprints) dos visitantes rotacionam diariamente em vez de depender de cookies.
- O painel é protegido por sessões baseadas em cookies com hashing de senha argon2.
- A interface do painel possui tema escuro e mostra estatísticas em tempo real, intervalos de datas selecionáveis, gráficos Chart.js e atualização automática.
As portas padrão são 3330 para a API do rastreador e 3331 para a interface do painel, com o banco de dados configurado por padrão para um arquivo local; as três podem ser alteradas com flags de linha de comando. Um usuário em sua primeira execução abre a porta do painel, registra uma conta e, em seguida, adiciona o snippet de rastreamento aos sites que deseja medir. O rastreador tem aproximadamente um quilobyte e registra automaticamente o caminho da página, referenciador, navegador, sistema operacional e tamanho da tela. Além das visualizações de página, o script expõe um objeto global com um método de ação que aceita um nome e um rótulo opcional de formato livre, e esses eventos aparecem na seção Actions do painel.
A superfície HTTP é dividida adequadamente. A porta do rastreador expõe endpoints para registrar visualizações de página, registrar ações nomeadas e servir o script de rastreamento. A porta do painel expõe endpoints autenticados para totais de visão geral (visualizações, visitantes únicos, média de visualizações por dia, total de ações), séries diárias de visualizações de página, principais páginas, principais referenciadores, detalhamento de navegador e sistema operacional, estatísticas de ação, visitantes ativos nos últimos cinco minutos, a lista de domínios rastreados, recuperação e atualização de configurações, e a exclusão em massa de todos os dados de um domínio. Os endpoints de registro, login e logout residem na mesma porta, mas são públicos, com o login definindo um cookie de sessão.
O código-fonte está organizado em um lado Rust (ponto de entrada com CLI, configuração de dois servidores e manipulação de CORS; esquema e consultas SQLite; modelos de requisição e resposta; manipuladores de endpoint; middleware de sessão) e um diretório front-end contendo o rastreador, o app de página única do painel, a página de login e registro, a lógica de gráficos e tabelas, e a folha de estilo. A orientação de implantação cobre uma unidade systemd com reinicialização automática e um fluxo opcional de git push-to-deploy usando um repositório bare e um hook post-receive que extrai o código, compila um binário de release e reinicia o serviço; o README observa que o Rust deve estar presente no servidor, ou que um binário compilado de forma cruzada (cross-compiled) pode ser copiado para máquinas limitadas. O projeto é lançado sob a licença MIT.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.