diff --git a/README.md b/README.md index de6def7..ed73897 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,8 @@ Secrets 放 `.env`(gitignore)。本機與生產共用同一份格式、只 | `SCRIPT_PATH` | fetcher | `twpk_radar.mjs` | JS worker 檔名 | | `STATE_PATH` | fetcher | `state.json` | twpkinfo.com 登入快照,**最常壞的地方** | | `UA_FROM_STATE` | fetcher | `true` | 是否從 state 帶 UA / langs | -| `RADAR_LAT` / `RADAR_LNG` / `RADAR_ZOOM` | fetcher | `25.0478` / `121.5170` / `11` | 掃描中心 | +| `RADAR_LAT` / `RADAR_LNG` / `RADAR_ZOOM` | fetcher | `25.0478` / `121.5170` / `11` | 單點掃描中心(fallback,當 `RADAR_TARGETS` 未設才用) | +| `RADAR_TARGETS` | fetcher | 空 | 多點掃描,格式 `name:lat,lng;name2:lat2,lng2;...`;搭配 `RADAR_ZOOM=15` 街區級密度 | | `MIN_REMAINING` | fetcher | `300` | 寫入前先做一輪粗篩,低於此值不進 Redis | | `MIN_IV` / `PERFECT_ONLY` / `SPECIES` | fetcher | 空 / `false` / 空 | fetcher 端篩選(通常留空,由 API 端即時篩) | | `REDIS_HOST` / `REDIS_PORT` / `REDIS_DB` / `REDIS_PASSWORD` | 全部 | 本機 `127.0.0.1` / 生產 `192.168.42.211` | 預設本機無密碼 | diff --git a/docs/INFRA.md b/docs/INFRA.md index 8d39e1a..2a496ec 100644 --- a/docs/INFRA.md +++ b/docs/INFRA.md @@ -230,6 +230,19 @@ ALLOWED_HOST_LIST = external,192.168.42.0/24,loopback 這次的 push 也是 **webhook pipeline 第一次真實使用**:push → Gitea 觸發 webhook → 42.104 自動 rsync → caddy 下次 request 即新版。之前都是用 Gitea API 的 test endpoint 模擬。 +### 3.13.5 多點 union 掃描(zoom 調整) + +原設計 `RADAR_ZOOM=11` 是給舊 pipeline(scp spots.json 給 caddy)用的,想一次抓整個北台灣。新 pipeline 前端會聚焦特定街區,zoom=11 下單位面積密度太低(實測 twpk 某 1km² 街區顯示 98 marker,我們 API 在同範圍為 0)。 + +改成 **多點 union**: +- `radar_fetcher.py` 支援 `RADAR_TARGETS=name:lat,lng;...` 環境變數 +- 主流程 loop 每個 target 呼叫 Function Server,以 `(id, lat, lng, expire_time)` dedupe 後 union +- 單點失敗不阻斷其他 target +- 建議搭配 `RADAR_ZOOM=15` 街區級密度(zoom 越大單點範圍越小但回傳密度越高) +- `FETCH_LOCK_TTL` 拉高到 `400`(5 點序列跑總耗時 ~50s,但要留餘裕) + +目前生產設定 5 個 target:台北車站 / 內湖南港 / 板橋 / 新竹 / 宜蘭。測試 twpk 內湖那個 1km² 街區:0 → 2 筆。還不理想但方向對;可加 target 或降 `MIN_REMAINING` 進一步補密度。 + ### 3.13 UI 顯示資料更新時間 使用者想看到「這份資料什麼時候抓的」: