# htcount: кнопка-лічильник відвідувачів сайту на базі access.log [htcount](https://crates.io/crates/htcount) - системна утиліта, написана мовою Rust, що рахує кількість хостів / хітів на основі даних локального журналу `access.log` ([CLF](https://en.wikipedia.org/wiki/Common_Log_Format)) і виводить результати у вигляді дампу JSON/API або у форматі кнопки SVG для вставки на сайт. По суті, вона влаштована так само, як відомий [goaccess](https://goaccess.io/) - інструмент CLI, який дозволяє аналізувати Веб-трафік без підключення сторонніх сервісів типу Google Analytics. ## Встановлення `htcount` написано мовою Rust, можливо, вам знадобиться спочатку розгорнути відповідну інфраструктуру для її збірки з початкового коду: * [Встановлення останньої версії Rust в Linux](https://devzone.org.ua/post/vstanovlennia-ostannyoyi-versiyi-rust-v-linux) ``` bash git clone https://github.com/YGGverse/htcount.git && cd htcount cargo build --release sudo install target/release/htcount /usr/local/bin/htcount ``` * встановлення до `/usr/local/bin/htcount` потрібне в контексті системних дозволів `systemd` ### systemd ``` /etc/systemd/system/htcount.service #/etc/systemd/system/htcount.service [Unit] After=network-online.target Wants=network-online.target [Service] Type=simple ExecStart=/usr/local/bin/htcount\ # вкажіть актуальний шлях цільового журналу (див. також --ignore-host) --source /var/log/nginx/access.log\ # вкажіть актуальний шлях для розміщення кнопки --export-svg /var/www/path/to/public/counter.svg\ # я збирав пакунок від root, де в мене лежать оригінали у якості шаблону --template-svg /root/htcount/default/counter.svg\ # оновлення кнопки раз на годину (3600 секунд) --update 3600\ # оновлення відвідувачів раз на добу --match-time %%d/%%b/%%Y\ # дебаг у файл вимкнено для заощадження терміну служби SSD --debug n # дебаг вимкнено опцією --debug n, можна вказати шлях або драйвер StandardOutput=null # збираємо усі помилки до стандартного розташування системних журналів StandardError=file:///var/log/htcount-error.log [Install] WantedBy=multi-user.target ``` * перелік доступних опцій залежить від актуальної версії: `htcount --help` * для інтеграції кнопки на сайт, додайте відповідний код: ``