From fcd88aa7568fb9af33085689abb790bca57dc2d4 Mon Sep 17 00:00:00 2001 From: bot-backend Date: Sat, 4 Jul 2026 02:28:58 +0500 Subject: [PATCH 1/2] =?UTF-8?q?fix(freshness):=20=D0=BF=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B3=D0=B8=20nspd=5Fgeo=20=D0=BF=D0=BE=D0=B4=20on-demand=20?= =?UTF-8?q?=D0=BA=D0=B0=D0=B4=D0=B5=D0=BD=D1=86=D0=B8=D1=8E=20(7d=E2=86=92?= =?UTF-8?q?30d=20fresh)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Источник без cron (admin UI / CLI / lazy из analyze) — штучные фетчи по активности пользователя. fresh_days=7 давал ложный stale-алерт каждую неделю тишины (расследование 2026-07-04: 60 done-jobs, 0 failed, ledger целый, НСПД доступен — простой 9.5d это норма каденции, не поломка). critical=False — overall и так не трогался, чиним только шум. --- backend/app/api/v1/admin_scrape.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/backend/app/api/v1/admin_scrape.py b/backend/app/api/v1/admin_scrape.py index ac0f3904..d4c4bb9f 100644 --- a/backend/app/api/v1/admin_scrape.py +++ b/backend/app/api/v1/admin_scrape.py @@ -1404,8 +1404,12 @@ _FRESHNESS_SOURCES: list[FreshnessSource] = [ table="nspd_geo_jobs", work_col="targets_done", attempt_fallback_col="created_at", - fresh_days=7.0, - stale_days=30.0, + # On-demand источник БЕЗ cron (admin UI / CLI / lazy из analyze) — штучные + # фетчи по активности пользователя. fresh_days=7 флагал каждую неделю + # тишины ложным stale-алертом (расследование 2026-07-04); пороги — под + # реальную каденцию, critical=False и так не трогает overall. + fresh_days=30.0, + stale_days=90.0, ), FreshnessSource( source="cadastre", -- 2.45.3 From 7af29f23edcd2439e0a9771121ebc0b59ab758dc Mon Sep 17 00:00:00 2001 From: bot-backend Date: Sat, 4 Jul 2026 02:30:18 +0500 Subject: [PATCH 2/2] =?UTF-8?q?test(freshness):=20=D1=84=D0=B8=D0=BA=D1=81?= =?UTF-8?q?=D1=82=D1=83=D1=80=D0=B0=20nspd=5Fgeo=20=D0=BF=D0=BE=D0=B4=20?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D0=BF=D0=BE=D1=80=D0=BE=D0=B3?= =?UTF-8?q?=20stale=5Fdays=3D90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/tests/api/v1/test_admin_scrape_freshness.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/backend/tests/api/v1/test_admin_scrape_freshness.py b/backend/tests/api/v1/test_admin_scrape_freshness.py index f5a1c546..6d1cf339 100644 --- a/backend/tests/api/v1/test_admin_scrape_freshness.py +++ b/backend/tests/api/v1/test_admin_scrape_freshness.py @@ -89,8 +89,8 @@ def test_freshness_mixed_statuses() -> None: "last_status": None, }, "nspd_geo_jobs": { - "last_success_at": _ago(40.0), # >= stale_days=30 → critical → failed - "last_attempt_at": _ago(40.0), + "last_success_at": _ago(100.0), # >= stale_days=90 → critical → failed + "last_attempt_at": _ago(100.0), "upd_24h": 0, "upd_7d": 0, "last_status": "done", @@ -230,9 +230,7 @@ def test_freshness_all_healthy() -> None: "last_status": "done", "recent_output": 100000, # выше любого floor → flagged-источники ok } - rows = { - s.table: dict(fresh_row) for s in admin_scrape._FRESHNESS_SOURCES - } + rows = {s.table: dict(fresh_row) for s in admin_scrape._FRESHNESS_SOURCES} _override_db(_make_db(rows)) try: resp = TestClient(app).get(ENDPOINT) -- 2.45.3