From e2710bcd249ffb52e04576b88b0c4abf3d20a116 Mon Sep 17 00:00:00 2001 From: Timmy Date: Mon, 20 Apr 2026 11:38:13 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=20README=20=E8=88=87?= =?UTF-8?q?=20INFRA.md=20=E8=A8=98=E9=8C=84=20RADAR=5FTARGETS=20=E5=A4=9A?= =?UTF-8?q?=E9=BB=9E=E6=8E=83=E6=8F=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - README env 表格加入 RADAR_TARGETS、RADAR_ZOOM 備註(zoom 11 單點 vs zoom 15 多點的差異) - INFRA.md 加 3.13.5 多點 union 掃描節,記錄 root cause(單點 zoom 11 密度過低)、解法、生產設定、二階段優化方向 Co-Authored-By: Claude Opus 4.7 (1M context) --- README.md | 3 ++- docs/INFRA.md | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) 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 顯示資料更新時間 使用者想看到「這份資料什麼時候抓的」: