debug(poi-sync): DB breadcrumbs to nspd_geo_log for silent-fail diagnosis
This commit is contained in:
parent
f81bd710c0
commit
9742219ef6
1 changed files with 39 additions and 4 deletions
|
|
@ -2,19 +2,54 @@
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
from sqlalchemy import text
|
||||||
|
|
||||||
from app.workers.celery_app import celery_app
|
from app.workers.celery_app import celery_app
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def _log_breadcrumb(level: str, message: str) -> None:
|
||||||
|
"""Записать строку в nspd_geo_log (job_id=NULL).
|
||||||
|
|
||||||
|
Используется чтобы диагностировать что происходит с poi_sync без SSH к
|
||||||
|
worker'у (та же техника что у worker_ready breadcrumb).
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
from app.core.db import SessionLocal
|
||||||
|
|
||||||
|
db = SessionLocal()
|
||||||
|
try:
|
||||||
|
db.execute(
|
||||||
|
text(
|
||||||
|
"INSERT INTO nspd_geo_log (job_id, level, stage, message) "
|
||||||
|
"VALUES (NULL, :lvl, 'poi_sync', :msg)"
|
||||||
|
),
|
||||||
|
{"lvl": level, "msg": message[:500]},
|
||||||
|
)
|
||||||
|
db.commit()
|
||||||
|
finally:
|
||||||
|
db.close()
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning("poi_sync breadcrumb failed: %s", e)
|
||||||
|
|
||||||
|
|
||||||
@celery_app.task(name="tasks.poi_sync.sync_osm_poi_ekb", queue="celery")
|
@celery_app.task(name="tasks.poi_sync.sync_osm_poi_ekb", queue="celery")
|
||||||
def sync_osm_poi_ekb() -> dict:
|
def sync_osm_poi_ekb() -> dict:
|
||||||
"""Еженедельная синхронизация OSM POI из Overpass API в osm_poi_ekb.
|
"""Еженедельная синхронизация OSM POI из Overpass API в osm_poi_ekb.
|
||||||
|
|
||||||
Запускается через beat (понедельник 03:00 МСК).
|
Запускается через beat (понедельник 03:00 МСК).
|
||||||
|
Persistent breadcrumbs в nspd_geo_log чтобы видеть progress в БД.
|
||||||
"""
|
"""
|
||||||
from app.services.site_finder.poi_loader import sync_poi_to_db
|
_log_breadcrumb("info", "task started")
|
||||||
|
try:
|
||||||
|
from app.services.site_finder.poi_loader import sync_poi_to_db
|
||||||
|
|
||||||
result = sync_poi_to_db()
|
result = sync_poi_to_db()
|
||||||
logger.info("POI sync done: %s", result)
|
logger.info("POI sync done: %s", result)
|
||||||
return result
|
_log_breadcrumb("info", f"done: {result}")
|
||||||
|
return result
|
||||||
|
except Exception as e:
|
||||||
|
logger.exception("POI sync failed: %s", e)
|
||||||
|
_log_breadcrumb("error", f"{type(e).__name__}: {e}")
|
||||||
|
raise
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue