From 493993bb002ae39b9ecf678e23f526633af0dc0d Mon Sep 17 00:00:00 2001 From: Stream Date: Sat, 25 Apr 2026 00:50:01 +0300 Subject: [PATCH] auto-sync: 2026-04-25 00:50:01 --- .../ingest/tracks_fr24/fr24_worker.py | 15 +++--- .../reports/dev-2026-04-25-supplement-fix.md | 47 +++++++++++++++++++ 2 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 tasks/flightradar24/reports/dev-2026-04-25-supplement-fix.md diff --git a/tasks/flightradar24/ingest/tracks_fr24/fr24_worker.py b/tasks/flightradar24/ingest/tracks_fr24/fr24_worker.py index b07169d..ea80a8f 100644 --- a/tasks/flightradar24/ingest/tracks_fr24/fr24_worker.py +++ b/tasks/flightradar24/ingest/tracks_fr24/fr24_worker.py @@ -415,12 +415,15 @@ def supplement_schedule(conn, target_date: date) -> int: ELSE NULL END AS destination_iata, NULL AS aircraft_type, - -- scheduled_at: takeoff time for departures, landed for arrivals - CASE - WHEN fa.origin_icao IN ('UUEE','UUDD','UUWW','UUBW') - THEN fa.datetime_takeoff - ELSE fa.datetime_landed - END AS scheduled_at, + -- scheduled_at: takeoff time for departures, landed for arrivals; fallback to first_seen + COALESCE( + CASE + WHEN fa.origin_icao IN ('UUEE','UUDD','UUWW','UUBW') + THEN fa.datetime_takeoff + ELSE fa.datetime_landed + END, + fa.first_seen + ) AS scheduled_at, fa.datetime_takeoff AS actual_takeoff, fa.datetime_landed AS actual_landed, 'actual' AS status, diff --git a/tasks/flightradar24/reports/dev-2026-04-25-supplement-fix.md b/tasks/flightradar24/reports/dev-2026-04-25-supplement-fix.md new file mode 100644 index 0000000..a317710 --- /dev/null +++ b/tasks/flightradar24/reports/dev-2026-04-25-supplement-fix.md @@ -0,0 +1,47 @@ +# Fix: supplement_schedule() — scheduled_at NULL fallback + +**Дата:** 2026-04-25 +**Файл:** `fr24_worker.py` → функция `supplement_schedule()` + +## Проблема + +В SQL INSERT `supplement_schedule()` поле `scheduled_at` вычислялось простым CASE-выражением: + +```sql +CASE + WHEN fa.origin_icao IN ('UUEE','UUDD','UUWW','UUBW') + THEN fa.datetime_takeoff + ELSE fa.datetime_landed +END AS scheduled_at +``` + +Если `datetime_takeoff` и `datetime_landed` оба NULL — поле получало NULL, что ломало логику расчёта задержек. + +## Исправление + +Обёрнуто в `COALESCE` с fallback на `fa.first_seen`: + +```sql +-- scheduled_at: takeoff time for departures, landed for arrivals; fallback to first_seen +COALESCE( + CASE + WHEN fa.origin_icao IN ('UUEE','UUDD','UUWW','UUBW') + THEN fa.datetime_takeoff + ELSE fa.datetime_landed + END, + fa.first_seen +) AS scheduled_at +``` + +## Деплой + +| Шаг | Статус | +|-----|--------| +| Локальный файл отредактирован | ✅ | +| VM `/home/fr24/projects/fr24/ingest/tracks_fr24/fr24_worker.py` обновлён | ✅ | +| `docker cp` → `fr24-tracks-fr24:/app/fr24_worker.py` | ✅ | +| Верификация в контейнере | ✅ | + +> **Примечание:** Фактический путь исходников на VM оказался +> `/home/fr24/projects/fr24/ingest/tracks_fr24/fr24_worker.py` +> (не `tracks_fr24/` в корне projects, как было в задаче, а `ingest/tracks_fr24/`).