fix(#233): add pzz_sync to beat schedule (monthly) #241

Merged
lekss361 merged 1 commit from fix/issue233-pzz-sync-beat into main 2026-05-17 05:32:53 +00:00
Owner

Summary

pzz_zones_ekb имеет 0 строк live — задача sync_pzz_zones_ekb (PKK6 ArcGIS) и admin endpoint POST /api/v1/admin/scrape/pzz-sync уже существуют, но beat schedule для неё отсутствовал.

Добавлен entry pzz-sync-monthly в backend/app/workers/beat_schedule.py:

  • Cron: 0 0 1 * * (1-е число месяца, 00:00 UTC = 03:00 МСК)
  • Task: tasks.pzz_sync.sync_pzz_zones_ekb
  • Queue: celery
  • Reasoning: PKK6 ArcGIS нестабилен под нагрузкой, но данные ПЗЗ меняются редко — раз в месяц достаточно.

Operations follow-up (вне scope PR)

После merge + deploy: manual trigger для первоначального наполнения (beat сам сработает только 1-го июня):

curl -X POST https://gendsgn.ru/api/v1/admin/scrape/pzz-sync \
  -H "X-Admin-Token: $SCRAPE_ADMIN_TOKEN" \
  -H "Content-Type: application/json" -d '{}'

Test plan

  • Lint: ruff check backend/app/workers/beat_schedule.py All checks passed
  • Pre-commit hooks pass
  • Post-deploy verify: docker compose logs celery-beat | grep pzz-sync-monthly
  • Manual trigger → SELECT COUNT(*) FROM pzz_zones_ekb > 0
  • After 1st of next month → beat запустился (check nspd_geo_log stage='pzz_sync')

Closes #233

## Summary `pzz_zones_ekb` имеет 0 строк live — задача `sync_pzz_zones_ekb` (PKK6 ArcGIS) и admin endpoint `POST /api/v1/admin/scrape/pzz-sync` уже существуют, но beat schedule для неё отсутствовал. Добавлен entry `pzz-sync-monthly` в `backend/app/workers/beat_schedule.py`: - **Cron:** `0 0 1 * *` (1-е число месяца, 00:00 UTC = 03:00 МСК) - **Task:** `tasks.pzz_sync.sync_pzz_zones_ekb` - **Queue:** `celery` - **Reasoning:** PKK6 ArcGIS нестабилен под нагрузкой, но данные ПЗЗ меняются редко — раз в месяц достаточно. ## Operations follow-up (вне scope PR) После merge + deploy: manual trigger для первоначального наполнения (beat сам сработает только 1-го июня): ```bash curl -X POST https://gendsgn.ru/api/v1/admin/scrape/pzz-sync \ -H "X-Admin-Token: $SCRAPE_ADMIN_TOKEN" \ -H "Content-Type: application/json" -d '{}' ``` ## Test plan - [x] Lint: `ruff check backend/app/workers/beat_schedule.py` ✅ All checks passed - [x] Pre-commit hooks pass - [ ] Post-deploy verify: `docker compose logs celery-beat | grep pzz-sync-monthly` - [ ] Manual trigger → `SELECT COUNT(*) FROM pzz_zones_ekb` > 0 - [ ] After 1st of next month → beat запустился (check `nspd_geo_log` stage='pzz_sync') Closes #233
lekss361 added 1 commit 2026-05-17 05:30:11 +00:00
PKK6 ArcGIS sync для pzz_zones_ekb (0 rows live) — задача и admin endpoint
уже существуют, но beat schedule отсутствовал. Schedule: 1st of month, 03:00 МСК.

Closes #233
lekss361 merged commit 6f565c19fa into main 2026-05-17 05:32:53 +00:00
Author
Owner

Merged via deep-code-reviewer — verdict APPROVE.

Findings:

  • Task tasks.pzz_sync.sync_pzz_zones_ekb зарегистрирован: celery_app.py include=[..., "app.workers.tasks.pzz_sync", ...], имя совпадает с decorator
  • Idempotency: ON CONFLICT (rosreestr_id) DO UPDATE + SAVEPOINT per-row — повторный запуск безопасен
  • Queue celery — консистентно с другими fallback-entries
  • Vault: runbooks/Beat_Schedule_Module.md и domains/sitefinder/PZZ_Zones_EKB.md уже отражают новый entry

Nit (не блокер, отдельным PR при удобном случае):

  • celery_app.conf.timezone = "Europe/Moscow" → cron интерпретируется в МСК, не UTC. Фактически 0 0 1 * * сработает 1-го числа 00:00 МСК, а не 03:00 МСК как написано в комментарии (та же ошибка унаследована в ekburg-permits-monthly). Поведение приемлемо, но комментарии стоит подправить.

Operations follow-up:

  • Manual trigger для первоначального наполнения pzz_zones_ekb:
    curl -X POST https://gendsgn.ru/api/v1/admin/scrape/pzz-sync \
      -H "X-Admin-Token: $SCRAPE_ADMIN_TOKEN" -H "Content-Type: application/json" -d '{}'
    
  • Verify: docker compose logs celery-beat | grep pzz-sync-monthly
  • Verify: SELECT COUNT(*) FROM pzz_zones_ekb;
Merged via deep-code-reviewer — verdict APPROVE. **Findings:** - Task `tasks.pzz_sync.sync_pzz_zones_ekb` зарегистрирован: `celery_app.py` include=[..., "app.workers.tasks.pzz_sync", ...], имя совпадает с decorator - Idempotency: `ON CONFLICT (rosreestr_id) DO UPDATE` + SAVEPOINT per-row — повторный запуск безопасен - Queue `celery` — консистентно с другими fallback-entries - Vault: `runbooks/Beat_Schedule_Module.md` и `domains/sitefinder/PZZ_Zones_EKB.md` уже отражают новый entry **Nit (не блокер, отдельным PR при удобном случае):** - `celery_app.conf.timezone = "Europe/Moscow"` → cron интерпретируется в МСК, не UTC. Фактически `0 0 1 * *` сработает **1-го числа 00:00 МСК**, а не 03:00 МСК как написано в комментарии (та же ошибка унаследована в `ekburg-permits-monthly`). Поведение приемлемо, но комментарии стоит подправить. **Operations follow-up:** - Manual trigger для первоначального наполнения `pzz_zones_ekb`: ```bash curl -X POST https://gendsgn.ru/api/v1/admin/scrape/pzz-sync \ -H "X-Admin-Token: $SCRAPE_ADMIN_TOKEN" -H "Content-Type: application/json" -d '{}' ``` - Verify: `docker compose logs celery-beat | grep pzz-sync-monthly` - Verify: `SELECT COUNT(*) FROM pzz_zones_ekb;`
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#241
No description provided.