fix(freshness): calibrate kn staleness thresholds to weekly cadence #1907
2 changed files with 19 additions and 2 deletions
|
|
@ -1290,8 +1290,12 @@ _FRESHNESS_SOURCES: list[FreshnessSource] = [
|
||||||
label="DOM.РФ kn-API (ЖК)",
|
label="DOM.РФ kn-API (ЖК)",
|
||||||
table="kn_scrape_runs",
|
table="kn_scrape_runs",
|
||||||
work_col="objects_count",
|
work_col="objects_count",
|
||||||
fresh_days=2.0,
|
# kn шедулится ЕЖЕНЕДЕЛЬНО (settings.scrape_kn_cron='15 4 * * mon', Mon 04:15 МСК),
|
||||||
stale_days=5.0,
|
# поэтому 2/5 дней давали ложный "stale" каждую среду-воскресенье. Калибруем под
|
||||||
|
# недельную каденцию (как objective 7/14): fresh до 8 дней (полная неделя + добег
|
||||||
|
# понедельничного прогона), stale при пропуске ~двух понедельников.
|
||||||
|
fresh_days=8.0,
|
||||||
|
stale_days=14.0,
|
||||||
critical=True,
|
critical=True,
|
||||||
),
|
),
|
||||||
FreshnessSource(
|
FreshnessSource(
|
||||||
|
|
|
||||||
|
|
@ -195,3 +195,16 @@ def test_classify_freshness_boundaries() -> None:
|
||||||
assert f(4.9, 2.0, 5.0) == "stale"
|
assert f(4.9, 2.0, 5.0) == "stale"
|
||||||
assert f(5.0, 2.0, 5.0) == "critical" # ровно stale_days → critical
|
assert f(5.0, 2.0, 5.0) == "critical" # ровно stale_days → critical
|
||||||
assert f(100.0, 2.0, 5.0) == "critical"
|
assert f(100.0, 2.0, 5.0) == "critical"
|
||||||
|
|
||||||
|
|
||||||
|
def test_kn_thresholds_match_weekly_cadence() -> None:
|
||||||
|
"""kn шедулится еженедельно (Mon cron) → пороги должны покрывать полную неделю,
|
||||||
|
иначе ложный 'stale' каждую среду-воскресенье. Регрессия на калибровку."""
|
||||||
|
kn = next(s for s in admin_scrape._FRESHNESS_SOURCES if s.source == "kn")
|
||||||
|
f = admin_scrape._classify_freshness
|
||||||
|
# В течение недели после понедельничного прогона kn остаётся свежим.
|
||||||
|
assert f(3.9, kn.fresh_days, kn.stale_days) == "fresh" # пятница
|
||||||
|
assert f(6.5, kn.fresh_days, kn.stale_days) == "fresh" # воскресенье
|
||||||
|
# Пропуск одного понедельника → stale; двух → critical.
|
||||||
|
assert f(9.0, kn.fresh_days, kn.stale_days) == "stale"
|
||||||
|
assert f(15.0, kn.fresh_days, kn.stale_days) == "critical"
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue