# 2026-04-24 — Memory Flush (pre-compaction)

## Урок: как я спалила кредиты FR24 (разбор ошибок)

Перед запуском FR24 API на боевых кредитах нужно было:
1. **Проверить total** — многие API возвращают `total` или `X-Total-Count`. У FR24 не проверила, не знала сколько записей ожидать
2. **Тест с одним аэропортом** — `departure:SVO` вместо `both:SVO,both:DME,both:VKO,both:ZIA`. Посмотреть сколько страниц, умножить на кредиты
3. **Понять что значит `both:`** — включает коммерческое + частное + грузовое + военное по всем 4 аэропортам. Я предположила ~1500 рейсов как у Яндекса, но не проверила
4. **Посчитать бюджет заранее** — 44 800 ÷ 3 = ~14 900 рейсов максимум. Можно было поставить `MAX_PAGES = 745` и хотя бы закоммитилось бы всё до последней страницы

**Итог:** API не понимала достаточно хорошо чтобы запускать на боевых кредитах. Кредиты ушли, данные не сохранились (DDL-конфликт + 402 на последней странице).

---

## FR24 Noisemap Project — состояние на 2026-04-21

### Что сделано
- DDL: `origin_icao`/`destination_icao` VARCHAR(5)→VARCHAR(20) в `flight_tracks_fa`
- `fa_worker.py`: `_icao_or_none()` фильтрует координаты
- `build_mart.py`: словарь `AIRLINE_IATA_TO_ICAO`, конвертация callsign, числовой матч по `ident_iata`
- Фикс `decimal.Decimal / float` → `float(alt_m)` в шумовой модели
- Витрина 19.04: 99 рейсов с треком (rtlsdr=92, fa=3, fr24=2)
- Создана таблица `fr24_ext.flight_actual` (DDL-миграция на VM)
- `FR24_API_KEY=MVM0hi4S7RRh7Dm4EOl1ShpDPc8CrmITXT2LY5y4dd84a62a` добавлен в `.env` на VM
- Пагинация flight-summary/full: цикл offset += 20
- UI enrichment: `schedule.html` (13 колонок), `schedule.js`, `main.py` (LEFT JOIN на flight_actual)
- DDL-миграция schedule: `fr24_id`, `actual_takeoff`, `actual_landed`, `delay_*`, `flight_category`, `registration`
- Задеплоено через `docker cp` → fr24-api, fr24-tracks-fr24, fr24-mart

### In Progress / Pending
- Загрузка FR24 flight-summary/full за 2026-04-20 (pid=1222822) — статус не подтверждён
- Яндекс backfill 06-19.04 — rate limit 429, статус сброса неизвестен

### Open TODOs (на момент compaction)
1. DDL: добавить `orig_iata VARCHAR(5)` и `dest_iata VARCHAR(5)` в `fr24_ext.flight_actual` — ждёт окончания fr24_run3
2. Задеплоить обновлённый `fr24_worker.py` в fr24-tracks-fr24 (с сохранением orig_iata/dest_iata)
3. Задеплоить обновлённый `main.py` в fr24-api (с fallback маршрута из FA IATA-кодов)
4. Обновить `routeStr()` в `schedule.js`: fallback на `fa_orig_iata`/`fa_dest_iata` (IATA → city lookup)
5. Добавить `conn.rollback()` в error handler `main.py` fr24-api (aborted transaction bug)
6. Проверить маппинг полей: FR24 API → `orig_icao` (не `origin_icao`), `reg` (не `registration`)
7. Яндекс backfill 06-19.04 (429 rate limit, ждёт сброса ~01:00 UTC)
8. Пересборка Docker образов (docker compose build) для устойчивого деплоя

### Key Decisions
- **Приоритет маршрута в UI**: 1й — `thread_title` Яндекса, 2й — IATA-коды FR24 (`orig_iata`/`dest_iata`) через IATA_CITY
- **FR24 API поля**: `operating_as` (не `operated_as`), `orig_icao`, `orig_iata`, `dest_icao`, `dest_iata`, `reg` (не `registration`)
- **supplement_schedule()**: INSERT рейсов из flight_actual которых нет в Яндекс-расписании, source='fr24'
- **Деплой**: docker cp → docker restart (или compose up -d для пересборки из файлов на хосте)
- **Explorer лимит**: 20 записей/запрос, offset-пагинация работает; ~4500 кредитов/день за все рейсы

### Инфраструктура
- VM: `fr24@192.168.2.67:22` via ProxyCommand `vpn-srv` → `185.130.212.192:3322`
- SSH key: `/home/node/.openclaw/ha_ssh_key`
- Postgres: host=`postgres`(172.18.0.2), dbname=`fr24`, user=`fr24`, password=`change-me`
- Compose: `/home/fr24/projects/fr24/compose/docker-compose.yml`
- Исходники на VM: `/home/fr24/projects/fr24/`
- Workspace: `/home/node/.openclaw/workspace/tasks/flightradar24/`
- Reports: `/home/node/.openclaw/workspace/tasks/flightradar24/reports/`
- FR24 credits: ~44 811 (промо до 31.05.2026)
- **FR24 API key (новый, 24.04.2026):** `019dbf18-3575-71d0-84eb-eb44606fbb63|QU3h8jqLPFyuo9qbQbPu9uoXVK42bTeclMuyRJ5Qb86ba0ea`
- Старый ключ: `MVM0hi4S7RRh7Dm4EOl1ShpDPc8CrmITXT2LY5y4dd84a62a` (деактивирован)
- Контейнеры: fr24-postgres, fr24-api(:8080), fr24-mart, fr24-tracks-fr24(:8001), fr24-tracks-fa, fr24-schedule, fr24-preprocess, fr24-capture, fr24-monitoring, fr24-backup

### Файлы
- `fr24_worker.py`: `/home/node/.openclaw/workspace/tasks/flightradar24/ingest/tracks_fr24/fr24_worker.py`
- `main.py` (API): `/home/node/.openclaw/workspace/tasks/flightradar24/frontend/main.py`
- `schedule.js`: `/home/node/.openclaw/workspace/tasks/flightradar24/frontend/static/schedule.js`
- `schedule.html`: `/home/node/.openclaw/workspace/tasks/flightradar24/frontend/static/schedule.html`
- `build_mart.py`: `/home/node/.openclaw/workspace/tasks/flightradar24/ingest/mart/build_mart.py`
