diff --git a/Cargo.lock b/Cargo.lock
index 35fb59b..6122cff 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2559,7 +2559,7 @@ checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
[[package]]
name = "reporter"
-version = "0.1.1"
+version = "0.1.2"
dependencies = [
"anyhow",
"clap",
@@ -4225,7 +4225,7 @@ dependencies = [
[[package]]
name = "website"
-version = "0.2.1"
+version = "0.2.2"
dependencies = [
"dotenvy",
"env_logger",
diff --git a/reporter/Cargo.toml b/reporter/Cargo.toml
index 8ae87e2..dd2f76d 100644
--- a/reporter/Cargo.toml
+++ b/reporter/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "reporter"
-version = "0.1.1"
+version = "0.1.2"
edition = "2024"
license-file = "../LICENSE"
description = "DPI probe: checks blockage of domains by SNI"
@@ -12,6 +12,12 @@ path = "src/main.rs"
[package.metadata.deb]
name = "cheburchecker"
maintainer = "Lowder "
+maintainer-scripts = "debian/"
+systemd-units = [
+ { unit-name = "cheburchecker", enable = false, start = false },
+ { unit-name = "cheburchecker.100k" },
+ { unit-name = "cheburchecker.1kk" },
+]
[dependencies]
tokio = { workspace = true }
diff --git a/reporter/README.md b/reporter/README.md
index ccf6255..02b844f 100644
--- a/reporter/README.md
+++ b/reporter/README.md
@@ -1,4 +1,5 @@
# Cheburcheck Reporter
+[](https://github.com/LowderPlay/cheburcheck/actions/workflows/build.yml)
Инструмент для автоматического сканирования и анализа блокировок.
Позволяет сканировать большое количество доменов за короткий срок за счет параллелизации запросов.
@@ -27,16 +28,14 @@ cargo run
Для этого достаточно запустить его:
1. Сохранить результаты в CSV
-
-```shell
-cheburchecker output.csv
-```
+ ```shell
+ cheburchecker output.csv
+ ```
2. Отправить результаты в **Cheburcheck Agency**
-
-```shell
-cheburchecker -k
-```
+ ```shell
+ cheburchecker -k
+ ```
> Для того чтобы получить API-ключ,
> обратитесь по адресу [agency@cheburcheck.ru](mailto:agency@cheburcheck.ru).
@@ -59,3 +58,47 @@ cheburchecker -k
| `-P, --path ` | Путь к файлу на сервере | 100MB.bin |
| `-a, --endpoint ` | Адрес сервера, на который будут загружены результаты сканирования | https://cheburcheck.ru/agency/report |
| `-k, --key ` | API-ключ | |
+
+## Автоматическое сканирование по расписанию (Systemd)
+
+Для автоматического и регулярного запуска чекера на Debian-based системах, вы можете использовать systemd таймеры. Этот проект поставляется с преднастроенными systemd юнитами, которые автоматически устанавливаются с помощью `cargo-deb`.
+
+### Установка
+
+1. **Установка пакета:**
+ При установке автоматически будут размещены systemd юниты и включены таймеры.
+ ```shell
+ sudo apt install cheburchecker_*.deb
+ ```
+
+2. **Настройка API-ключа (обязательно):**
+ Чекер отправляет результаты в Cheburcheck Agency. Для этого требуется API-ключ. Его необходимо сохранить в файле `/etc/default/cheburchecker`.
+ ```bash
+ echo "AGENCY_KEY=ВАШ_API_КЛЮЧ" | sudo tee /etc/default/cheburchecker
+ ```
+ Замените `ВАШ_API_КЛЮЧ` на ваш реальный ключ.
+
+### Расписание задач
+
+Предусмотрено два автоматических расписания:
+
+* **`cheburchecker.100k.timer`**: Запускает проверку **100,000 доменов** каждые 6 часов (в 06:00, 12:00, 18:00 UTC).
+* **`cheburchecker.1kk.timer`**: Запускает проверку **1,000,000 доменов** ежедневно (в 00:00 UTC).
+
+Таймеры настроены таким образом, чтобы не конфликтовать друг с другом.
+
+### Проверка статуса и логов
+
+Вы можете проверить статус таймеров и служб, а также просмотреть их логи:
+
+* **Статус таймеров:**
+ ```bash
+ systemctl status cheburchecker.100k.timer
+ systemctl status cheburchecker.1kk.timer
+ ```
+* **Логи служб:**
+ ```bash
+ journalctl -u cheburchecker@100000.service
+ journalctl -u cheburchecker@1000000.service
+ ```
+ Отчеты сохраняются в `/var/log/cheburchecker/` с именем файла, включающим количество доменов (например, `report-100000.csv`).
diff --git a/reporter/debian/cheburchecker.100k.timer b/reporter/debian/cheburchecker.100k.timer
new file mode 100644
index 0000000..fde2c75
--- /dev/null
+++ b/reporter/debian/cheburchecker.100k.timer
@@ -0,0 +1,10 @@
+[Unit]
+Description=Run Cheburchecker for 100k domains
+
+[Timer]
+OnCalendar=06,12,18:00:00
+Persistent=true
+Unit=cheburchecker@100000.service
+
+[Install]
+WantedBy=timers.target
diff --git a/reporter/debian/cheburchecker.1kk.timer b/reporter/debian/cheburchecker.1kk.timer
new file mode 100644
index 0000000..4c75dee
--- /dev/null
+++ b/reporter/debian/cheburchecker.1kk.timer
@@ -0,0 +1,10 @@
+[Unit]
+Description=Run Cheburchecker for 1M domains
+
+[Timer]
+OnCalendar=daily
+Persistent=true
+Unit=cheburchecker@1000000.service
+
+[Install]
+WantedBy=timers.target
diff --git a/reporter/debian/cheburchecker@.service b/reporter/debian/cheburchecker@.service
new file mode 100644
index 0000000..702d781
--- /dev/null
+++ b/reporter/debian/cheburchecker@.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Cheburchecker blocklist checker (count: %i)
+After=network.target
+
+[Service]
+Type=exec
+ExecStart=/bin/sh -c '/usr/bin/cheburchecker --count %i /var/log/cheburchecker/report-%i.csv'
+EnvironmentFile=-/etc/default/cheburchecker
+ExecStartPre=/bin/mkdir -p /var/log/cheburchecker
+User=root
+Group=root
+LimitNOFILE=16384
diff --git a/website/Cargo.toml b/website/Cargo.toml
index ae1a28c..afc1791 100644
--- a/website/Cargo.toml
+++ b/website/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "website"
-version = "0.2.1"
+version = "0.2.2"
edition = "2024"
[dependencies]
diff --git a/website/src/whitelist.rs b/website/src/whitelist.rs
index 610688b..06bc2ce 100644
--- a/website/src/whitelist.rs
+++ b/website/src/whitelist.rs
@@ -58,8 +58,9 @@ pub async fn export_csv(
})
}
-#[get("/histogram?")]
-pub async fn histogram(mut db: Connection, filter: Option) -> Result>, Status> {
- Ok(Json(collect_histogram(&mut db, 50, 100_000, filter.is_some()).await
+#[get("/histogram?&")]
+pub async fn histogram(mut db: Connection, filter: Option, limit: Option) -> Result>, Status> {
+ let limit = limit.unwrap_or(100_000).clamp(0, 1_000_000);
+ Ok(Json(collect_histogram(&mut db, 50, limit, filter.is_some()).await
.map_err(|e| Status::InternalServerError)?))
}
diff --git a/website/templates/pages/faq.html.tera b/website/templates/pages/faq.html.tera
index 36217fd..c92b192 100644
--- a/website/templates/pages/faq.html.tera
+++ b/website/templates/pages/faq.html.tera
@@ -40,7 +40,7 @@
Подробнее...
- {{ typography::heading(title='Мне написало, что сайт "Заблокирован", но у меня все работает!') }}
+ {{ typography::heading(title='Мне написало, что сайт «Заблокирован», но у меня все работает!') }}
Мы не можем с точностью утверждать, заблокирован сайт или нет.
Блокировки Роскомнадзора, зачастую, непредсказуемые, непубличные и незаконные.
@@ -67,6 +67,7 @@
diff --git a/website/templates/pages/whitelist.html.tera b/website/templates/pages/whitelist.html.tera
index 7564d02..31b7929 100644
--- a/website/templates/pages/whitelist.html.tera
+++ b/website/templates/pages/whitelist.html.tera
@@ -68,17 +68,17 @@ curl: (28) Operation timed out after 5000 milliseconds with 16101 out of 65537 b
Исходя из анализа 1,000,000 доменов из рейтинга
Tranco list от 26 ноября 2025,
- в белом списке содержится около 1000 доменов. Все* домены из списка входят в топ-100,000 рейтинга.
+ в белом списке содержится около 1000 доменов.
* — Мы не включаем в это число домены из зоны .co.uk, так как по какой-то причине, они все находятся в белом списке.
- Гистограмма количества доменов относительно их положения в рейтинге
- {{ histogram::histogram(endpoint="/whitelist/histogram") }}
+ Гистограмма количества доменов относительно их положения в рейтинге (топ-30k, без .co.uk)
+ {{ histogram::histogram(endpoint="/whitelist/histogram?filter&limit=30000") }}
- Гистограмма без учета доменов .co.uk
- {{ histogram::histogram(id="filtered", endpoint="/whitelist/histogram?filter") }}
+ Гистограмма количества доменов относительно их положения в рейтинге (топ-1kk, без .co.uk)
+ {{ histogram::histogram(id="filtered", endpoint="/whitelist/histogram?limit=1000000") }}
{{ typography::heading(title="Скачать списки") }}