Перейти к основному содержимому

Автономность сбора и просмотр базы на s3

Здесь лежит то, что живёт на сервере как системные файлы. В репозитории — чтобы не существовало «только на сервере», как это случилось с индексатором и каталогом сборщика.

ФайлКуда ставитсяЗачем
gwptd-collector-watchdog/usr/local/sbin/возвращает расписание сбора, если оно исчезло
gwptd-collector-watchdog.service/etc/systemd/system/одноразовый запуск сторожа
gwptd-collector-watchdog.timer/etc/systemd/system/каждые пять минут, включён в автозапуск

Установка:

scp ops/s3/gwptd-collector-watchdog* s3-int:/tmp/
ssh s3-int 'install -m 755 /tmp/gwptd-collector-watchdog /usr/local/sbin/ \
&& install -m 644 /tmp/gwptd-collector-watchdog.{service,timer} /etc/systemd/system/ \
&& systemctl daemon-reload && systemctl enable --now gwptd-collector-watchdog.timer'

Зачем сторож существует

Требование владельца, повторённое трижды: сбор сырых JSON идёт сам по расписанию, и остальная работа его не касается. До сторожа связь была прямая: выкладка приложения заменяет root crontab, и при её провале расписание оставалось ПУСТЫМ — сбор вставал целиком и молча. 08–09.08.2026 так вышло четыре раза.

Сторож раз в пять минут смотрит, есть ли расписание. Нет — возвращает из канонического файла выложенного дерева (marketplace-collector-v3/scripts/crontab.s3-next.txt) и пишет в /var/log/gwptd-collector-watchdog.log. Существующее расписание не трогает: отличие от канона бывает законным.

⚠️ Он отключается только на время ДЕЙСТВИТЕЛЬНО идущей выкладки — живой процесс gwptd-next-deploy либо расписка не старше пятнадцати минут. Первая версия смотрела лишь на наличие файла расписки, и застрявшая расписка от оборванной выкладки обесточила сторожа насовсем: сбор стоял, а он молчал. Проверено сносом расписания при живой застрявшей расписке — восстановил.

Проверять сторожа надо именно так, а не чтением кода:

ssh s3-int 'crontab -r; /usr/local/sbin/gwptd-collector-watchdog; crontab -l | grep -c .'

Просмотр базы: Adminer

Контейнер gwptd-adminer на внутреннем адресе http://10.0.1.7:8010 (админский VPN; наружу НЕ публикуется). Сервер в форме входа подставлен: gwptd-v3-mysql.

Учётная запись gwptd_viewer — только SELECT на восемь баз. Это единственная надёжная защита: Adminer создан для произвольного SQL, ограничивать его интерфейсом бессмысленно. Пароль хранится вне репозитория; выдаёт владелец.

Решение владельца 09.08.2026: показывать всю базу, все площадки, без масок. Деления по площадкам в Adminer нет и быть не может — он показывает таблицу целиком.

Запуск, если контейнера нет:

ssh s3-int 'docker run -d --name gwptd-adminer --restart unless-stopped \
--network gwptd-v3-net -p 10.0.1.7:8010:8080 \
-e ADMINER_DEFAULT_SERVER=gwptd-v3-mysql adminer:latest'