Об этом проекте

SWA (Self-hosted Website Analytics) — это небольшой сервер веб-аналитики, написанный на Rust, который хранит данные в SQLite. Он разработан для развертывания на сервере без использования внешних сервисов: пользовательский интерфейс, HTTP API и скрипт отслеживания встроены в один исполняемый файл с помощью rust-embed, а база данных представляет собой один файл. Набор функций, описанный в проекте: - Дистрибуция в виде одного бинарного файла, содержащего панель управления, API и трекер. - Хранилище SQLite в режиме WAL, на базе файлов и без необходимости настройки. - Двухпортовая архитектура: один порт обслуживает публичный API трекера для получения событий, второй порт обслуживает аутентифицированную панель управления. - Отслеживание просмотров страниц и именованных событий call-to-action, что позволяет подсчитывать входы в систему, покупки, загрузки или другие конверсии наряду с визитами. - Поддержка нескольких доменов: один экземпляр может отслеживать несколько сайтов с возможностью переключения между ними в панели управления. - Ориентация на конфиденциальность: соблюдается параметр Do-Not-Track, а цифровые отпечатки посетителей обновляются ежедневно, вместо использования cookies. - Панель управления защищена сессиями на базе cookie с хешированием паролей argon2. - Интерфейс панели управления выполнен в темной теме и отображает статистику в реальном времени, выбираемые диапазоны дат, графики Chart.js и автоматическое обновление. Порты по умолчанию: 3330 для API трекера и 3331 для интерфейса панели управления; база данных по умолчанию представляет собой локальный файл. Все три параметра можно изменить с помощью флагов командной строки. При первом запуске пользователь открывает порт панели управления, регистрирует аккаунт, а затем добавляет фрагмент кода отслеживания на сайты, которые необходимо измерять. Трекер занимает примерно один килобайт и автоматически записывает путь страницы, реферера, браузер, операционную систему и размер экрана. Помимо просмотров страниц, скрипт предоставляет глобальный объект с методом action, принимающим имя и необязательную произвольную метку; эти события отображаются в разделе Actions панели управления. HTTP-интерфейс разделен соответствующим образом. Порт трекера предоставляет эндпоинты для записи просмотров страниц, записи именованных действий и отдачи скрипта отслеживания. Порт панели управления предоставляет аутентифицированные эндпоинты для общих итогов (просмотры, уникальные посетители, среднее количество просмотров в день, общее количество действий), ежедневных серий просмотров, топовых страниц, топовых рефереров, разбивки по браузерам и операционным системам, статистики действий, активных посетителей за последние пять минут, списка отслеживаемых доменов, получения и обновления настроек, а также массового удаления всех данных для домена. Эндпоинты регистрации, входа и выхода находятся на том же порту, но являются публичными, при этом вход устанавливает сессионный cookie. Исходный код разделен на часть на Rust (точка входа с CLI, настройка двух серверов и обработка CORS; схема и запросы SQLite; модели запросов и ответов; обработчики эндпоинтов; промежуточное ПО для сессий) и директорию фронтенда, содержащую трекер, одностраничное приложение панели управления, страницу входа и регистрации, логику графиков и таблиц, а также таблицу стилей. Руководство по развертыванию включает юнит systemd с автоматическим перезапуском и опциональный поток git push-to-deploy с использованием bare-репозитория и post-receive хука, который извлекает код, собирает релизный бинарный файл и перезапускает службу; в README отмечается, что на сервере должен быть установлен Rust, либо на ограниченные по ресурсам машины можно скопировать кросс-компилированный бинарный файл. Проект выпущен под лицензией MIT.