Add LandSAR cluster worker deployment

This commit is contained in:
2026-06-24 14:10:58 +08:00
parent 71c524967c
commit da09ba05cb
88 changed files with 9300 additions and 3011 deletions
+135
View File
@@ -0,0 +1,135 @@
# Frontend Production UI Refinement
## 定位
本前端面向科研工程单位的 InSAR 生产、分析和运维场景。界面设计服务于长期、高频、可审计的工程工作流,不做营销化展示页。
## 语言策略
- 默认并长期采用中文界面。
- 不再维护完整英文界面和运行时 DOM 翻译。
- 专业术语按行业习惯保留英文或中英混写,例如 InSAR、D-InSAR、SBAS、Gamma、LandSAR、ENVI、SARscape、IDL、Ollama、DB、Worker、Task、Run、Catalog、AOI、DEM、GeoTIFF、WebP。
- 操作、状态、错误、提示使用中文,要求准确、短句、可执行。
- 后续新增前端文案直接写中文,不再添加 `language === 'en'` 分支。
## 视觉原则
- 气质:冷静、精密、可审计,像科研生产控制台,而不是通用 SaaS 后台。
- 色彩:以蓝灰中性色为基础,蓝色只用于主操作、选中态、地图覆盖层和关键状态,不做装饰性大面积渐变。
- 信息密度:允许密集,但必须靠分组、标题、状态标签和对齐建立秩序。
- 控件:同类按钮、标签、面板、表单行使用一致样式。避免在 JSX 中散落大段 inline style。
- 动效:只表达状态变化,不做页面级展示动画。进度条可即时更新,避免无意义的 width 动画。
## 优先修整项
1. 固定中文运行时,移除顶部语言切换。
2. 修复已损坏或乱码的核心文案,优先顺序:全局顶栏、登录页、导航常量、生产工作台、雷达数据面板、运维自检。
3. 收敛视觉反模式:粗侧边强调线、装饰渐变、过宽阴影、过圆卡片。
4. 抽取基础 UI 词汇:按钮、状态标签、面板段落、工具栏、字段行。
5. 重塑生产工作台为流程导向:数据准备 -> 配对/栈规划 -> 生产运行 -> 质量检查 -> 成果发布。
## 当前决策
- `I18nProvider` 保留兼容 API,但固定返回 `language: 'zh'``t(text)` 原样返回。
- 暂不一次性删除所有英文分支,避免大面积回归风险;后续按面板逐步清理。
- 后端服务无需停止。只修改前端文件时,Vite 可热更新;必要时刷新浏览器即可。
## 2026-06-21 修整记录
- 固定中文运行时,移除顶部语言切换入口,保留 `useI18n` 兼容层以降低改动范围。
- 修复登录页、全局状态栏、地图底图常量、生产管理常量、雷达数据面板和共享加载态的中文文案。
- 将生产管理入口重塑为流程型工作台,突出数据准备、规划、运行、质量检查与成果发布,弱化营销式 hero 和装饰性渐变。
- 调整基础视觉规则:减少大阴影、过圆卡片、装饰渐变和无意义进度动画;保留更克制的工程控制台气质。
- 已通过 `npm run build`,并对本轮触碰文件做了乱码与视觉反模式扫描。
## 2026-06-21 页眉与生产面板补充
- 页眉移除 DB、Worker、IDL、Ollama、Nginx 等运行状态灯,系统健康状态集中放在“运行维护”模块。
- 页眉改为单位 logo、单位名称、系统名称、授权摘要、任务摘要和用户操作。
- 单位名、系统名、页眉标语和 logo URL 支持通过 `VITE_APP_*` 环境变量配置,默认使用 `frontend/src/logo.jpg`
- 新增 `PRODUCT.md`,记录系统面向科研工程单位的产品定位:科研、专业、克制,同时要求严谨、稳定、工程化。
- SBAS 生产面板中高曝光的 Runtime Status、Task queue、Workflow 说明文案改为中文表达,保留必要英文术语。
## 2026-06-21 运行维护页设计
- 将“运行维护”定位为页眉移除健康灯后的主健康入口,顶部摘要直接回答生产是否就绪、阻断项数量、最近检查和一致性异常。
- 保留所有现有检查项,但按职责分组:核心服务、结果目录与生产索引、数据资产与运行时、一致性与精轨、维护操作。
- 固定中文运行路径,`HealthCheckPanel` 不再依赖 `language === 'en'` 进入英文界面。
- 视觉上减少阴影和卡片堆叠感,改为分组式生产控制台;状态不只靠颜色表达,同时显示“正常/异常”和具体数量。
## 2026-06-21 面板一致性策略
- 当前前端的主要观感问题来自多个面板各自生长:宽度、卡片高度、标题层级和内边距不一致,造成“碎”和“忽宽忽高”的感觉。
- 后续按页处理,不先做大规模重构:每轮选择一个高频页面,统一壳层、摘要、分区标题、最大宽度和关键文案;全量走完后再做一次整体审阅。
- D-InSAR 生产页先完成第一轮结构归整:增加生产摘要,按“引擎与能力 / 任务准备与提交 / 运行监控与审计记录”分区,页面最大宽度收敛到生产控制台尺度。
- 独立面板轻量收敛:去掉装饰背景,降低独立页头部高度和标题字号,让页面主体而不是壳层成为视觉中心。
## 2026-06-21 D-InSAR 结果目录第一轮
- D-InSAR 结果页从“结果提取与标准目录”的说明块,调整为成果归档控制台:顶部直接显示操作模式、产物任务、提取源和日志策略。
- 提取、重扫和任务日志归为“成果提取与任务监控”,下方标准目录归为“标准目录与资产详情”,降低页面碎片感。
- 页面最大宽度与 D-InSAR 生产运行页统一到 1280px,减少超宽屏下横向拉伸;卡片圆角、边框、内边距跟随当前生产控制台节奏。
- 保留现有后端接口、任务监控和目录组件行为,本轮只做前端结构、文案和壳层修整。
## 2026-06-21 SBAS-InSAR 结果目录第一轮
- SBAS 成果页顶部从普通 section 调整为结果目录控制台:显示操作模式、目录状态、登记产品数和问题数。
- 保留原有刷新、目录重建、检索、预览、时序曲线、资产下载等业务能力,只收敛外层壳、标题和主工作区比例。
- 主工作区增加“结果检索与资产复核”分区说明,左侧列表宽度从 380px 收敛到 360px,避免与详情区争抢空间。
- 与 D-InSAR 成果页保持 1280px 最大宽度和同一套状态摘要视觉词汇,形成 D-InSAR / SBAS 成果发布链路的一致入口。
## 2026-06-21 工程痕迹文案清理第一轮
- 前端不再把已经退出主流程的 ISCE2/MintPy 能力作为生产入口说明、下拉选项或运维自检对象展示。
- 运行维护页的精轨检查聚焦当前生产 TXT 池;前端不再把 ISCE2 XML 池纳入健康判断、计数摘要、修复按钮或结果说明。
- 任务中心与导航文案去掉“旧 / legacy / 停用”等工程开发痕迹,历史任务使用中性中文标签表达。
- SBAS / D-InSAR 高曝光结果文案改为面向业务人员的表达,避免把兼容层、桥接层和弃用路径暴露成用户概念。
## 2026-06-21 资产库存页第一轮
- 资产库存页定位为台账查看与质量复核入口,不再在顶部暴露“全部扫描 / LT-1 扫描 / S1 扫描 / 精轨扫描”等运维扫描按钮。
- 资产扫描能力仍保留在数据接入与运维流程中;资产库存页保留刷新和压缩包完整性审计,避免普通台账页面变成操作面板。
- 页面壳层收敛到 1280px,标题说明改为“查看源产品、精密轨道、绑定状态和开放问题”,指标区改为五列台账摘要。
## 2026-06-21 应用壳与导航第一轮
- 左侧一级任务线调整为“数据资产 / 生产管理 / 形变分析 / 灾害分析 / 运行维护”,减少泛化后台感。
- 数据域入口改为“数据接入 / 资产台账 / 影像检索 / 灾害点库”,对应接入、台账、检索和空间对象管理四类任务。
- 形变分析入口改为“D-InSAR 结果判读 / D-InSAR 专题分析 / SBAS 形变分析”,让分析链路更贴近科研业务表达。
- 独立工作区页头不再使用统一兜底说明,按模块显示专业描述,帮助用户理解当前页面在任务线中的位置。
- 左侧导航视觉从胶囊按钮堆叠调整为更克制的分层按钮,减少碎片感并强化一级任务线。
## 2026-06-21 数据接入页第一轮
- 数据接入页从“数据监控面板”调整为接入控制台:顶部显示配置状态、接入任务、源数据池和可用存储。
- 页面任务线梳理为接入路径与生产目录、本机存储状态、LT-1/Sentinel-1 源数据与精轨登记、GF3 回传成果登记、接入任务记录。
- 将“扫描压缩包 / 扫描精轨”等工程按钮文案改为“登记源压缩包 / 登记精轨”,更贴合生产数据接入语义。
- 移除接入页顶部装饰渐变提示,改为状态提示条;保留现有后端接口和任务调用路径。
## 2026-06-22 应用壳与综合统计调整
- 右侧全局日志栏不再作为主界面常驻区域展示,地图和左侧任务栏获得更完整的横向空间;各业务页内部的任务记录、审计记录和运行维护能力继续保留。
- “统计”从影像检索页按钮提升为一级导航“综合统计”,与数据资产、生产管理、形变分析、灾害分析同级,避免把生产统计能力误放在单一检索任务里。
- 综合统计页从遮罩弹窗改为全宽工作页,按源影像、D-InSAR 成果、质量判读、缓存一致性四类信息组织;图表使用克制的科研控制台风格,减少装饰色和弹窗遮挡。
- 影像检索页顶部仅保留检索相关动作,统计入口由导航承担,任务线更清晰:先接入和检索数据,再进入生产和成果分析,最终在综合统计中复核总体状态。
## 2026-06-22 接入页与统计口径回收
- 左侧主栏固定到 620px,不再保留拖拽宽度;右侧日志栏移除后,主界面直接形成“宽任务栏 + 地图工作区”的稳定布局。
- 数据接入页的“接入路径与生产目录”默认折叠。该区主要是服务器部署目录核对,不应占据日常接入操作的首屏。
- 接入页补充“开放问题复核”区,直接读取资产台账开放 issue;底部日志明确为任务执行日志,避免把 “Extracting source archive metadata...” 这类过程日志误认为问题结论。
- 综合统计暂时改为一级入口占位页,不再接临时 `/statistics` 图表。具体统计口径和图表方案记录在 `docs/STATISTICS_DASHBOARD_DESIGN.md`,后续先设计再实现。
## 2026-06-23 综合统计命名与覆盖图修正
- 综合统计页标题调整为“InSAR 数据与生产统计”,不再使用“生产态势驾驶舱”这类展示大屏语义。
- 覆盖图从经纬度散点图调整为“源数据空间覆盖密度”,按场景中心点聚合成网格热力图,不再显示笛卡尔经纬度坐标轴。
- 当前覆盖密度图只表达中心点密度,不等同于真实 footprint 面状覆盖;正式面积覆盖、行政区覆盖率和空白区判断需要后续基于有序角点/footprint 的后端聚合。
- 综合统计继续使用手动刷新,不做自动轮询,避免统计页持续打生产服务。
## 2026-06-23 综合统计热力格网升级
- 覆盖热力不再由前端临时聚合点位,而是由 `/api/statistics/dashboard` 返回后端格网单元,前端只负责渲染。
- 覆盖统计分成“源数据”和“成果”两个对象:源数据统计 LT-1 / Sentinel-1 / GF3,成果统计 `result_products` 中 D-InSAR / SBAS 等已登记产品。
- 源数据优先用 `sar_scene_geometry_profiles.footprint_polygon`,缺失时退回中心点;成果优先用 `result_products.coverage_polygon`,缺失时退回 bbox。
- 当前热力图仍是工程态势图,不作为正式面积统计或行政区覆盖率结论。
+55 -78
View File
@@ -1,106 +1,83 @@
# 文档索引
# 鏂囨。绱㈠紩
最后更新:2026-06-16
鏈€鍚庢洿鏂帮細2026-06-23
本页是当前有效文档入口。没有列在本页的历史设计、实验记录和过程文档不再作为当前系统事实依据。
## 总览与部署
鏈〉鏄綋鍓嶆湁鏁堟枃妗e叆鍙c€傛病鏈夊垪鍦ㄦ湰椤碘€滃綋鍓嶆湁鏁堟枃妗b€濅腑鐨勫巻鍙茶璁°€佸疄楠岃褰曞拰杩囩▼鏂囨。锛屼笉鍐嶄綔涓哄綋鍓嶇郴缁熶簨瀹炰緷鎹€?
## 褰撳墠鏈夋晥鏂囨。
### 鎬昏涓庨儴缃?
- [../README.md](../README.md)
项目总览、当前生产入口、启动链路和文档入口。
椤圭洰鎬昏銆佸綋鍓嶇敓浜у叆鍙c€佸惎鍔ㄩ摼璺拰鏂囨。鍏ュ彛銆?
- [DEPLOYMENT.md](DEPLOYMENT.md)
Windows + PostgreSQL + WSL2 + Gamma/ISCE2/ENVI 的部署与运行说明。
Windows + PostgreSQL + WSL2 + Gamma/ISCE2/ENVI 鐨勯儴缃蹭笌杩愯璇存槑銆?
- [BASEMAP_TILESERVER_PROXY_AND_ACCESS_20260613.md](BASEMAP_TILESERVER_PROXY_AND_ACCESS_20260613.md)
Tile-server proxy, LAN access, token configuration, and Nginx IP whitelist.
Tile-server proxy銆丩AN access銆乼oken configuration 鍜?Nginx IP whitelist銆?
- [DOCUMENTATION_GOVERNANCE.md](DOCUMENTATION_GOVERNANCE.md)
文档治理规则、事实来源优先级和清理约定。
鏂囨。娌荤悊瑙勫垯銆佷簨瀹炴潵婧愪紭鍏堢骇鍜屾竻鐞嗙害瀹氥€?
- [FRONTEND_NAVIGATION_ARCHITECTURE.md](FRONTEND_NAVIGATION_ARCHITECTURE.md)
当前左侧导航和生产管理工作台视图模型。
褰撳墠宸︿晶瀵艰埅鍜岀敓浜х鐞嗗伐浣滃彴瑙嗗浘妯″瀷銆?
- [FRONTEND_PRODUCTION_UI_REFINEMENT.md](FRONTEND_PRODUCTION_UI_REFINEMENT.md)
鍓嶇瀵艰埅銆佹暟鎹帴鍏ャ€佺敓浜х鐞嗐€佺患鍚堢粺璁$瓑椤甸潰鐨勮繎鏈熷伐绋嬪寲璋冩暣璁板綍銆?
- [STATISTICS_DASHBOARD_DESIGN.md](STATISTICS_DASHBOARD_DESIGN.md)
缁煎悎缁熻涓€绾ч〉闈㈢殑宸ョ▼瀹氫綅銆佺粺璁″彛寰勩€佹簮鏁版嵁/鎴愭灉绌洪棿瑕嗙洊瀵嗗害鍥鹃檺鍒跺拰鍚庣画 footprint 鐑姏鍗囩骇璺嚎銆?
- [GLOBAL_TASK_STATUS_LOCK_REDESIGN_20260612.md](GLOBAL_TASK_STATUS_LOCK_REDESIGN_20260612.md)
全局界面锁降级为任务状态中心、功能级任务面板和后端资源锁的重构设计。
- [OLLAMA_DINSAR_DIAGNOSIS_DEPLOYMENT_20260620.md](OLLAMA_DINSAR_DIAGNOSIS_DEPLOYMENT_20260620.md)
D-InSAR 分析中 Ollama 本机 VLM 诊断的部署配置、模型选择和运行约定。
## 生产与结果
- [THREE_SENSOR_LOCAL_PRODUCTION_CONTRACT_20260616.md](THREE_SENSOR_LOCAL_PRODUCTION_CONTRACT_20260616.md)
当前陆探一号、Sentinel-1、高分三本机生产、按需解包、GF3 外部生产登记、结果管理和 UNC 退出约定。
鍏ㄥ眬鐣岄潰閿侀檷绾т负浠诲姟鐘舵€佷腑蹇冦€佸姛鑳界骇浠诲姟闈㈡澘鍜屽悗绔祫婧愰攣鐨勯噸鏋勮璁°€?
- [OLLAMA_DINSAR_DIAGNOSIS_DEPLOYMENT_20260620.md](OLLAMA_DINSAR_DIAGNOSIS_DEPLOYMENT_20260620.md)
D-InSAR 鍒嗘瀽涓?Ollama 鏈満 VLM 璇婃柇鐨勯儴缃查厤缃€佹ā鍨嬮€夋嫨鍜岃繍琛岀害瀹氥€?
- [STORAGE_PRESSURE_CLEANUP_GOVERNANCE_20260623.md](STORAGE_PRESSURE_CLEANUP_GOVERNANCE_20260623.md)
瀛樺偍鍘嬪姏娓呯悊涓庢不鐞嗚竟鐣岋細婧愭暟鎹€丟F3 `_geo`銆丏EM銆佺簿杞ㄥ拰姝e紡鎴愭灉涓嶈繘鍏ユ櫘閫氭竻鐞嗭紝缂撳瓨銆佹棩蹇椼€佽繍琛屾椂鍜?Task_Pool materialize 鍒嗛樁娈垫不鐞嗐€?
### 鐢熶骇涓庣粨鏋?
- [THREE_SENSOR_LOCAL_PRODUCTION_CONTRACT_20260616.md](THREE_SENSOR_LOCAL_PRODUCTION_CONTRACT_20260616.md)
褰撳墠闄嗘帰涓€鍙枫€丼entinel-1銆侀珮鍒嗕笁鏈満鐢熶骇銆佹寜闇€瑙e寘銆丟F3 澶栭儴鐢熶骇鐧昏銆佺粨鏋滅鐞嗗拰 UNC 閫€鍑虹害瀹氥€?
- [PRODUCTION_RESULTS_MULTI_ENGINE_DESIGN_20260423.md](PRODUCTION_RESULTS_MULTI_ENGINE_DESIGN_20260423.md)
统一结果目录、标准产品包、catalog 与多引擎结果共存约定。D-InSAR 当前引擎集合以 2026-06-14 三引擎 Task_Pool 重构设计为准。
缁熶竴缁撴灉鐩綍銆佹爣鍑嗕骇鍝佸寘銆乧atalog 涓庡寮曟搸缁撴灉鍏卞瓨绾﹀畾銆?
- [DINSAR_TASK_POOL_THREE_ENGINE_REFACTOR_20260614.md](DINSAR_TASK_POOL_THREE_ENGINE_REFACTOR_20260614.md)
D-InSAR 保留 ENVI/SARscape、LandSAR、Gamma/PyINT 三引擎,退出 ISCE2,统一 Task_Pool、结果聚合和中间文件清理的当前设计。
- [LANDSAR_DEM_PREPARATION_CONTRACT_20260618.md](LANDSAR_DEM_PREPARATION_CONTRACT_20260618.md)
LandSAR D-InSAR/SBAS 的全球 DEM 一次性 Int16 标准化、区域裁剪 tif、生产配置和 guardrail 约定。
- [UNC_SOURCE_ARCHIVE_AND_MATERIALIZE_DESIGN_20260615.md](UNC_SOURCE_ARCHIVE_AND_MATERIALIZE_DESIGN_20260615.md)
LT-1/Sentinel-1 本地源压缩包管理、包内 XML/manifest 资产化、本地 Task_Pool materialize,以及 UNC 退出运行链路后的本机部署边界
- [SOURCE_ARCHIVE_INTEGRITY_AUDIT_20260620.md](SOURCE_ARCHIVE_INTEGRITY_AUDIT_20260620.md)
LT-1/Sentinel-1 源压缩包完整性审计的独立任务、增量语义、数据库字段和问题登记规则。
D-InSAR 淇濈暀 ENVI/SARscape銆丩andSAR銆丟amma/PyINT 涓夊紩鎿庯紝閫€鍑?ISCE2锛岀粺涓€ Task_Pool銆佺粨鏋滆仛鍚堝拰涓棿鏂囦欢娓呯悊鐨勫綋鍓嶈璁°€?
- [LANDSAR_DEM_PREPARATION_CONTRACT_20260618.md](LANDSAR_DEM_PREPARATION_CONTRACT_20260618.md)
LandSAR D-InSAR/SBAS 鐨勫叏鐞?DEM 涓€娆℃€?Int16 鏍囧噯鍖栥€佸尯鍩熻鍓?tif銆佺敓浜ч厤缃拰 guardrail 绾﹀畾銆?
- [LANDSAR_CLUSTER_WORKER_DEPLOYMENT_20260624.md](LANDSAR_CLUSTER_WORKER_DEPLOYMENT_20260624.md)
LandSAR D-InSAR 集群 worker 的队列分片设计、主服务器 IP 白名单、远端 Windows 节点 192.168.1.6 部署和运行约束
- [UNC_SOURCE_ARCHIVE_AND_MATERIALIZE_DESIGN_20260615.md](UNC_SOURCE_ARCHIVE_AND_MATERIALIZE_DESIGN_20260615.md)
LT-1/Sentinel-1 鏈湴婧愬帇缂╁寘绠$悊銆佸寘鍐?XML/manifest 璧勪骇鍖栥€佹湰鍦?Task_Pool materialize锛屼互鍙?UNC 閫€鍑哄悗鐨勬湰鏈洪儴缃茶竟鐣屻€?
- [SOURCE_ARCHIVE_INTEGRITY_AUDIT_20260620.md](SOURCE_ARCHIVE_INTEGRITY_AUDIT_20260620.md)
LT-1/Sentinel-1 婧愬帇缂╁寘瀹屾暣鎬у璁$殑鐙珛浠诲姟銆佸閲忚涔夈€佹暟鎹簱瀛楁鍜岄棶棰樼櫥璁拌鍒欍€?
- [DINSAR_PRODUCTION_CORES_OVERVIEW.md](DINSAR_PRODUCTION_CORES_OVERVIEW.md)
旧版 ENVI/SARscape、ISCE2、Gamma/PyINT D-InSAR 生产核心说明。ISCE2 相关内容仅作历史背景。
鏃х増 ENVI/SARscape銆両SCE2銆丟amma/PyINT D-InSAR 鐢熶骇鏍稿績璇存槑銆侷SCE2 鐩稿叧鍐呭浠呬綔鍘嗗彶鑳屾櫙銆?
- [SBAS_INSAR_CURRENT_WORKFLOW.md](SBAS_INSAR_CURRENT_WORKFLOW.md)
当前 Gamma SBAS-InSAR 生产、AOI 选栈、结果 catalog、产物和 LOS 符号约定。
## 运行时与专项配置
褰撳墠 Gamma SBAS-InSAR 鐢熶骇銆丄OI 閫夋嫨銆佺粨鏋?catalog銆佷骇鍝佸拰 LOS 绗﹀彿绾﹀畾銆?
### 杩愯鏃朵笌涓撻」閰嶇疆
- [WSL_RUNTIME_REFACTOR_DESIGN_20260422.md](WSL_RUNTIME_REFACTOR_DESIGN_20260422.md)
WSL 共享运行时和 Broker 设计。
WSL 鍏变韩杩愯鏃跺拰 Broker 璁捐銆?
- [PROJ_CONFIGURATION.md](PROJ_CONFIGURATION.md)
PROJ / GDAL 配置说明。
PROJ / GDAL 閰嶇疆璇存槑銆?
- [ISCE2_MANAGED_DINSAR_IMPLEMENTATION_20260424.md](ISCE2_MANAGED_DINSAR_IMPLEMENTATION_20260424.md)
ISCE2 托管 D-InSAR 历史落地说明。新 D-InSAR 生产不再采用。
ISCE2 鎵樼 D-InSAR 鍘嗗彶钀藉湴璇存槑銆傛柊 D-InSAR 鐢熶骇涓嶅啀閲囩敤銆?
- [ISCE2_PRODUCTION_RELIABILITY_HARDENING_DESIGN_20260424.md](ISCE2_PRODUCTION_RELIABILITY_HARDENING_DESIGN_20260424.md)
ISCE2 生产链路历史稳定性约束。新 D-InSAR 生产不再采用。
## 数据与业务模块
ISCE2 鐢熶骇閾捐矾鍘嗗彶绋冲畾鎬х害鏉熴€傛柊 D-InSAR 鐢熶骇涓嶅啀閲囩敤銆?
### 鏁版嵁涓庝笟鍔℃ā鍧?
- [SENTINEL1_SOURCE_ORBIT_ASSET_DESIGN_20260512.md](SENTINEL1_SOURCE_ORBIT_ASSET_DESIGN_20260512.md)
Sentinel-1 / LT-1 源数据与精密轨道资产层设计。
- [PRECISE_ORBIT_PRODUCTION_CONTRACT_20260617.md](PRECISE_ORBIT_PRODUCTION_CONTRACT_20260617.md)
Current LT-1/Sentinel-1 precise-orbit source assets, LT-1 production TXT pools, Gamma/PyINT, LandSAR, and retired ISCE2 orbit boundaries.
Sentinel-1 / LT-1 婧愭暟鎹笌绮惧瘑杞ㄩ亾璧勪骇灞傝璁°€?
- [PRECISE_ORBIT_PRODUCTION_CONTRACT_20260617.md](PRECISE_ORBIT_PRODUCTION_CONTRACT_20260617.md)
褰撳墠 LT-1/Sentinel-1 绮捐建婧愯祫浜с€丩T-1 鐢熶骇 TXT 姹犮€丟amma/PyINT銆丩andSAR 鍜岄€€褰?ISCE2 绮捐建杈圭晫銆?
- [FLOOD_GEOTIFF_GAMMA_PREPROCESS_DESIGN_20260515.md](FLOOD_GEOTIFF_GAMMA_PREPROCESS_DESIGN_20260515.md)
洪涝模块 GeoTIFF 化与 Gamma 前处理方向。
娲稘妯″潡 GeoTIFF 鍖栦笌 Gamma 鍓嶅鐞嗘柟鍚戙€?
- [GF3_SARSCAPE_NATIVE_TO_GEOTIFF_DESIGN_20260530.md](GF3_SARSCAPE_NATIVE_TO_GEOTIFF_DESIGN_20260530.md)
GF3 SARscape 原生 `_geo` 二进制池、GeoTIFF 标准化、入库和洪涝接入设计。
GF3 SARscape 鍘熺敓 `_geo` 浜岃繘鍒舵睜銆丟eoTIFF 鏍囧噯鍖栥€佸叆搴撳拰娲稘鎺ュ叆璁捐銆?
- [FLOOD_DISASTER_ANALYSIS_SYSTEM_DESIGN_20260514.md](FLOOD_DISASTER_ANALYSIS_SYSTEM_DESIGN_20260514.md)
洪涝灾害分析工作台、产品包和矢量套合边界。
娲稘鐏惧鍒嗘瀽宸ヤ綔鍙般€佷骇鍝佸寘鍜岀煝閲忓鍚堣竟鐣屻€?
- [FLOOD_WATER_ALGORITHM_ENGINEERING_HANDOFF_20260602.md](FLOOD_WATER_ALGORITHM_ENGINEERING_HANDOFF_20260602.md)
洪涝/水体算法接入现状、processor 输出契约和工程交接路线。
## 安全
娲稘/姘翠綋绠楁硶鎺ュ叆鐜扮姸銆乸rocessor 杈撳嚭濂戠害鍜屽伐绋嬩氦鎺ヨ矾绾裤€?
### 瀹夊叏
- [SECURITY_AUDIT_2026-03-12.md](SECURITY_AUDIT_2026-03-12.md)
安全审计记录。
## 工作笔记
瀹夊叏瀹¤璁板綍銆?
## 宸ヤ綔绗旇
- [../INIT.md](../INIT.md)
工作笔记。只用于辅助理解现场状态,不替代正式文档。
宸ヤ綔绗旇锛屽彧鐢ㄤ簬杈呭姪鐞嗚В鐜板満鐘舵€侊紝涓嶆浛浠f寮忔枃妗c€?
## 鍘嗗彶褰掓。
## 已删除的历史材料
以下材料已从仓库文档树删除,不再维护:
-`docs/archive/` 历史堆积目录;
- 旧 SBAS 过程文档和试验 runbook
- 旧 ISCE2/MintPy/SARscape 时序生产设计;
- 过期的 PyINT/Gamma 实验记录;
- 过期的 Sentinel-1 阶段计划;
- 过期的配对增强计划和阶段性审计快照。
需要判断当前实现时,优先看代码入口和本索引列出的文档。
- [archived_20260623/README.md](archived_20260623/README.md)
2026-06-23 浠?`docs/` 鏍圭洰褰曠Щ鍑虹殑鍘嗗彶銆佸疄楠屻€佽繃绋嬪拰闃舵鎬ф枃妗f竻鍗曘€傝繖浜涙枃妗d笉鍐嶄綔涓哄綋鍓嶇郴缁熶簨瀹炰緷鎹€?
闇€瑕佸垽鏂綋鍓嶅疄鐜版椂锛屼紭鍏堢湅浠g爜鍏ュ彛銆乣README.md` 鍜屾湰绱㈠紩鍒楀嚭鐨勫綋鍓嶆湁鏁堟枃妗c€?
@@ -0,0 +1,333 @@
# LandSAR 集群 Worker 设计与部署记录(2026-06-24
## 结论
本次改造是在保留本机 LandSAR 生产链路的前提下,新增 LandSAR 集群执行入口。
本机旧入口仍然是 `LANDSAR_RUN`:由主服务器上的一个控制器串行处理一个批次内的 pair。新入口是 `LANDSAR_CLUSTER_ITEM`:主服务器提交集群任务后,系统按 pair 拆成多条队列任务,由本机或远端 Windows worker 领取执行。
当前规划的远端计算服务器是:
- 主服务器 / PostgreSQL / Web 系统:`192.168.1.62`
- 远端 LandSAR worker`192.168.1.6`
远端 worker 的 `.env``DATABASE_URL` 必须指向主服务器 `192.168.1.62`,不是写它自己 `192.168.1.6`
## 已落地代码
后端集群入口:
- `backend/app/routers/dinsar_production.py`
- 新增 `POST /dinsar-production/landsar-cluster/run`
- 只接受 `engine_code=landsar`
- 提交后按 Task/pair 拆分为多个 `LANDSAR_CLUSTER_ITEM`
生产服务:
- `backend/app/services/dinsar_production_service.py`
- 新增 `create_landsar_cluster_run`
- 复用现有 `DinsarProductionRunORM``DinsarProductionRunItemORM``DinsarProductionExecutionORM`
- 不新增 PG 表结构
- 新增 `LANDSAR_CLUSTER_RUN` 父任务类型
队列与 worker
- `backend/app/services/job_queue_service.py`
- `claim_next_job` 支持 `allowed_job_types`
- `backend/app/services/job_worker.py`
- 新增 `JOB_WORKER_ALLOWED_TYPES` 过滤
- 远端 worker 可配置为只领取 `LANDSAR_CLUSTER_ITEM`
- `backend/app/services/job_handlers.py`
- 新增 `LANDSAR_CLUSTER_ITEM` handler
- 每个 handler 只处理一个 pair
- 使用本进程本地锁避免单台机器上多个 LandSAR 任务并发抢授权
- 不使用旧 `wsl_dinsar_landsar` 全局数据库锁,因此多台服务器可以并行处理不同 pair
远端专用入口:
- `run_landsar_cluster_worker.py`
- Windows 远端直接运行此脚本即可
- 默认只领取 `LANDSAR_CLUSTER_ITEM`
- 默认并发为 1
- `scripts/start_landsar_cluster_worker.ps1`
- 远端 Windows 推荐启动器
- 检查 `.env`
- 自动定位 Python
- 创建 `logs\landsar_cluster_worker`
- 支持前台运行和 `-Background` 后台运行
- `scripts/start_landsar_cluster_worker.bat`
- 远端双击启动入口,内部调用 PowerShell 启动器
主服务器网络准入脚本:
- `scripts/sync_landsar_cluster_network_access.ps1`
- 从主服务器 `.env` 读取 `LANDSAR_CLUSTER_ALLOWED_WORKER_IPS`
- 同步 PostgreSQL `pg_hba.conf`
- 同步 Windows 防火墙 TCP `5432`
- reload PostgreSQL
前端入口:
- `frontend/src/DinsarProductionPanel.jsx`
- LandSAR 引擎下新增“提交 LandSAR 集群”按钮
- 原“提交任务”按钮仍走本机旧链路
## 主服务器配置
主服务器 `.env` 增加:
```env
LANDSAR_CLUSTER_ALLOWED_WORKER_IPS=192.168.1.6
```
如果后续增加更多 worker,用逗号或分号分隔:
```env
LANDSAR_CLUSTER_ALLOWED_WORKER_IPS=192.168.1.6,192.168.1.7,192.168.1.8
```
每次修改后在主服务器执行:
```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File scripts\sync_landsar_cluster_network_access.ps1
```
脚本会把允许的 worker IP 写入 `D:\PostgreSQLData\pg_hba.conf` 的受管控区块:
```text
# BEGIN InSAR LandSAR cluster workers
host insar_management all 192.168.1.6/32 scram-sha-256
# END InSAR LandSAR cluster workers
```
同时维护 Windows 防火墙规则:
```text
InSAR PostgreSQL 5432 LandSAR Cluster
```
当前主服务器已完成配置:
- PostgreSQL 监听 `0.0.0.0:5432`
- `pg_hba.conf` 只允许 `192.168.1.6/32` 访问 `insar_management`
- 防火墙 TCP `5432` 只允许 `192.168.1.6`
## 远端 192.168.1.6 需要复制什么
推荐复制整个当前仓库,而不是只挑脚本。
原因是远端 worker 虽然只运行 `run_landsar_cluster_worker.py`,但它会 import 后端配置、ORM、队列服务、LandSAR engine、结果发布服务、任务服务等模块。只复制单个脚本会缺依赖。
建议远端目录保持一致:
```text
D:\Code\Insar_management_system_v2
```
至少要确保这些内容在远端存在并与主服务器代码版本一致:
- `run_landsar_cluster_worker.py`
- `backend/`
- `scripts/`
- `config/`
- `.env`
- Python 依赖环境
- LandSAR 安装目录
- DEM 文件
- 任务输入目录或可访问的任务输入路径
- 结果返回目录或可访问的结果目录
前端 `frontend/` 对远端 worker 不是运行必需,但为了版本一致,建议整仓同步。
## 远端 192.168.1.6 的 .env
远端 `.env` 模板已维护在:
```text
config\landsar_cluster_worker.env.example
```
复制为远端项目根目录 `.env`
```powershell
Copy-Item config\landsar_cluster_worker.env.example .env
```
远端 `.env` 的核心配置:
```env
DATABASE_URL=postgresql+asyncpg://postgres:WXZXzhb123456@192.168.1.62:5432/insar_management
JOB_WORKER_ALLOWED_TYPES=LANDSAR_CLUSTER_ITEM
JOB_WORKER_CONCURRENCY=1
JOB_WORKER_POLL_INTERVAL=1.0
LANDSAR_CLUSTER_WORKER_ID=
```
还需要按远端实际 LandSAR 环境配置这些项:
```env
LANDSAR_ENABLED=true
LANDSAR_HOME=D:\LandSAR
LANDSAR_CONSOLE_EXE=D:\LandSAR\InSAR_Console.exe
LANDSAR_WORK_ROOT=D:\LandSAR_Work
LANDSAR_RUNTIME_PATHS=D:\LandSAR
LANDSAR_LICENSE_MODE=netVersion
LANDSAR_LICENSE_HOST=127.0.0.1
LANDSAR_LICENSE_PORT=6666
LANDSAR_CONFIG_ROW=netVersion,zh,127.0.0.1,6666
LANDSAR_CONFIG_AUTO_WRITE=true
LANDSAR_AUTH_SERVER_EXE=D:\Code\Insar_management_system_v2\third_party\LandSAR\tools\_portable_release\LandSAR_auth_tools_win64\landsar_net_auth_server.exe
LANDSAR_AUTH_SERVER_AUTO_START=true
LANDSAR_AUTH_SERVER_HOST=127.0.0.1
LANDSAR_AUTH_SERVER_PORT=6666
LANDSAR_DEM_PATH=D:\DEM\SRTMDEM_RSP_SARscape_global_int16.tif
LANDSAR_DINSAR_TIMEOUT_SECONDS=43200
```
如果远端的 LandSAR 授权服务器、安装路径、DEM 路径不同,按远端实际路径填写。
建议给 `LANDSAR_CLUSTER_WORKER_ID` 一个稳定值,方便主服务器健康检查区分节点:
```env
LANDSAR_CLUSTER_WORKER_ID=landsar-worker-192-168-1-6
```
## 远端 Windows 启动命令
`192.168.1.6` 上进入项目目录:
```powershell
Set-Location D:\Code\Insar_management_system_v2
```
启动 worker
```powershell
.\scripts\start_landsar_cluster_worker.ps1
```
看到类似输出即表示监听程序已启动:
```text
[*] Starting LandSAR cluster worker...
[*] Allowed job types: LANDSAR_CLUSTER_ITEM
[*] Poll interval: 1s
[*] Concurrency: 1
```
需要双击启动时,运行:
```text
D:\Code\Insar_management_system_v2\scripts\start_landsar_cluster_worker.bat
```
需要后台启动时,运行:
```powershell
.\scripts\start_landsar_cluster_worker.ps1 -Background
```
启动日志在:
```text
D:\Code\Insar_management_system_v2\logs\landsar_cluster_worker
```
## 远端连通性检查
`192.168.1.6` 上检查能否连主服务器数据库:
```powershell
Test-NetConnection 192.168.1.62 -Port 5432
```
应看到:
```text
TcpTestSucceeded : True
```
再用 Python 检查数据库认证:
```powershell
$env:DATABASE_URL='postgresql+asyncpg://postgres:WXZXzhb123456@192.168.1.62:5432/insar_management'
@'
import asyncio, os
from sqlalchemy import text
from sqlalchemy.ext.asyncio import create_async_engine
async def main():
engine = create_async_engine(os.environ["DATABASE_URL"], pool_pre_ping=True)
async with engine.connect() as conn:
print((await conn.execute(text("select 1"))).scalar_one())
await engine.dispose()
asyncio.run(main())
'@ | C:\ProgramData\anaconda3\envs\InSAR\python.exe -
```
应输出:
```text
1
```
## 生产使用流程
1. 主服务器前端进入 D-InSAR 生产管理。
2. 选择 LandSAR 引擎。
3. 选择生产根目录,例如 `D:\Task_Pool\DInSAR` 或某个具体 `Task_*` 父目录。
4. 点击“提交 LandSAR 集群”。
5. 后端创建一个 `LANDSAR_CLUSTER_RUN` 父任务。
6. 每个 pair 生成一条 `LANDSAR_CLUSTER_ITEM` 队列任务。
7. 本机或远端 worker 抢占 item。
8. worker 调用本机 LandSAR 环境处理该 pair。
9. item 完成后写 execution manifest,并尝试发布到 D-InSAR 结果 catalog。
10. 所有 item 进入终态后,父 run 标记为完成、失败或取消。
## 当前重要约束
这次改造解决的是“按 pair 分片调度和多 worker 领取”的问题,不是完整的数据自动搬运系统。
因此远端 `192.168.1.6` 必须满足以下路径条件之一:
1. 与主服务器保持相同盘符和目录结构,并能看到同样的 `Task_Pool` 输入数据。
2. 或者远端通过映射盘、同步工具、计划任务等方式,把所需 pair 的输入数据准备到相同路径。
3. 结果输出目录也必须让主服务器可以扫描或访问,否则 worker 虽然能计算,结果不会自然回到主服务器 catalog。
当前代码中的 LandSAR cluster item 使用数据库里已有的 `source_task_dir` 作为 LandSAR 输入目录;它不会自动从源压缩包解包到远端,也不会自动把远端本地结果复制回主服务器。
后续若要彻底工程化,应新增两个能力:
- 集群 item 开始前:按 pair 从源压缩包或主服务器 Task_Pool materialize 到远端本地工作目录。
- 集群 item 完成后:把标准产品包从远端回传到主服务器结果目录,再由主服务器统一入库。
## 不要混淆的 IP
`192.168.1.62` 是主服务器 IP,负责:
- Web 后端
- PostgreSQL
- 任务队列
- 数据库自维护
- 前端操作入口
`192.168.1.6` 是远端 LandSAR worker IP,负责:
- 常驻监听 `LANDSAR_CLUSTER_ITEM`
- 调用本机 LandSAR
- 写 item 执行状态
所以远端 `.env` 中:
```env
DATABASE_URL=...@192.168.1.62:5432/insar_management
```
而主服务器 `.env` 中:
```env
LANDSAR_CLUSTER_ALLOWED_WORKER_IPS=192.168.1.6
```
这两个配置方向不同,不能互换。
+163
View File
@@ -0,0 +1,163 @@
# 综合统计界面设计说明
## 定位
综合统计页定位为 **InSAR 数据与生产统计**,不是营销式展示大屏,也不再使用“生产态势驾驶舱”命名。
页面面向系统运维、生产管理和汇报前复核,核心目标是用可追溯统计口径回答:
- 当前 LT-1、Sentinel-1、GF3 源数据底座是否齐备。
- 元数据解析、几何画像、预览缓存和精轨保障是否支撑生产。
- D-InSAR / SBAS 任务规划、生产运行和成果登记是否稳定。
- 当前是否存在需要处理的资产、生产或成果问题。
综合统计必须以后端聚合口径为准,不能复用影像检索页的分页结果。影像检索或资产列表中的“一键显示”只代表当前检索结果或当前页可见数据,不代表全库统计。
## 当前实现
前端页面:`frontend/src/StatisticsDashboard.jsx`
前端样式:`frontend/src/App.css`
后端接口:`GET /api/statistics/dashboard`
页面不自动轮询,只提供手动刷新,避免统计聚合影响生产服务。
## 页面结构
1. 顶部 KPI:源数据、几何画像、精轨绑定、生产任务、成果和问题的核心计数。
2. 市级覆盖热力:分为源数据覆盖和成果覆盖两个视图,按场景或成果中心点落入的市级行政区统计数量。
3. 数据底座与生产链路:展示源资产登记、元数据、几何画像、可生产画像、预览缓存等链路状态。
4. 时间分布与精轨保障:展示源数据月份分布、精轨资产和精轨绑定覆盖率。
5. 生产与成果:展示 D-InSAR / SBAS 运行状态、成果趋势、开放问题和最近任务状态。
## 统计口径
### 源数据资产
主口径使用 `source_product_assets`
当前系统约定:
- LT-1 管理源压缩包,扫描时从压缩包内提取 XML、预览和几何信息,参与生产时再按需解包到 `Task_Pool`
- Sentinel-1 管理源压缩包,扫描时从 SAFE zip 内提取 manifest、annotation、preview 和几何信息,参与生产时再按需解包。
- GF3 管理外部服务器生产后的 `native_geo` 成果和快视图资产,本机负责登记、WebP 缓存和后续成果管理。
展示内容:
- 源数据资产总量。
- LT-1 / Sentinel-1 / GF3 分类数量。
- 元数据文档提取率。
- 几何画像可用率。
- 源资产按月份分布。
- 入库到可生产链路:源资产登记、元数据入库、几何画像、可生产画像、预览缓存。
### 市级覆盖热力
空间覆盖不能只统计三类源数据,也必须统计生产后的结果产品。两类对象分开展示,不混算。
#### 源数据覆盖
主口径使用 `sar_scene_geometry_profiles`
- 使用 `scene_center_lon` / `scene_center_lat` 落入市级行政区的数量。
- 统计对象包括 LT-1、Sentinel-1、GF3 三类源数据。
- tooltip 展示市级单位、源数据总数和数据源构成。
#### 成果覆盖
主口径使用 `result_products`
- 使用 `coverage_polygon` 或 bbox 中心点落入市级行政区的数量。
- 统计对象包括已登记的 D-InSAR、SBAS 等结果产品,按 `catalog_name` 区分。
- tooltip 展示市级单位、成果总数和成果类型构成。
当前实现不是经纬度散点图,也不是经纬度格网,而是后端按行政区聚合,前端用 ECharts Map 分级设色:
- 页面在“源数据市级覆盖热力”和“成果市级覆盖热力”之间切换。
- 不显示笛卡尔经纬度坐标轴。
- 每个市级行政区按源数据景数或成果项数确定填充颜色。
- 行政区边界来自系统现有全国行政区 GeoJSON/AOI 服务。
必须明确的限制:
- 当前热力图统计的是中心点落区数量,不等同于真实场景 footprint 覆盖面积。
- 结果产品当前按 coverage polygon 或 bbox 中心点落区,不等同于真实有效像元面积。
- 当前热力图用于工程态势判断,不能直接作为正式面积统计、行政区覆盖率或成果质量评价结论。
- 正式覆盖率需要进一步接入行政边界、AOI 或真实有效像元 mask。
### 精轨保障
主口径使用 `orbit_assets``scene_orbit_bindings`
展示内容:
- 精轨资产总数。
- LT-1 / Sentinel-1 精轨分类。
- 已选中精轨绑定数。
- 精轨绑定覆盖率。
生产约束:
- 统计页只展示精轨资产和绑定情况,不负责推断具体生产引擎如何取轨。
- 具体生产取轨逻辑以 `PRECISE_ORBIT_PRODUCTION_CONTRACT_20260617.md` 为准。
### 生产运行
主口径使用:
- `dinsar_task_batches`
- `dinsar_task_items`
- `dinsar_production_runs`
- `workflow_runs`
展示内容:
- D-InSAR 任务规划状态。
- D-InSAR 生产运行状态。
- 最近生产批次。
- 平均运行耗时。
### 成果与问题
主口径使用:
- `result_products`
- `result_assets`
- `result_issues`
- `asset_inventory_issues`
- `asset_inventory_states`
展示内容:
- D-InSAR / SBAS 成果数量。
- 成果按月份趋势。
- 成果预览和缺失资产统计。
- 开放问题按类型分布。
- 最近扫描状态。
## 视觉原则
- 使用工程统计页面语义,不使用“驾驶舱”作为默认标题。
- 页面保持浅色工程管理风格,避免深色大屏、装饰化背景和无法解释的数据可视化。
- 市级覆盖热力图可以作为首屏主要图表,但必须服务于生产判断:哪些市源数据集中、哪些市已有成果、哪些市缺数据或缺成果。
- 图表文案必须写清统计口径,避免把中心点落区数量误读为正式面积覆盖。
- 不引入 Three.js;统计页优先保证真实数据、稳定性能和可追溯口径。
## 后续增强
优先级从高到低:
1. 扫描阶段固化 `corner_pixel_mapping`、有序角点和 footprint 质量标识,保证覆盖边界可追溯。
2. 结果登记阶段固化成果有效像元范围,区分产品 bbox、footprint 和有效数据 mask。
3. 增加省份/项目区筛选,支持只看黑龙江省或指定业务区。
4. 增加按数据源、结果类型、时间窗口、产品可生产性、精轨绑定状态的筛选。
5. 增加图表 drill-down,点击统计单元可跳转到资产台账、影像检索或成果列表。
6. 如果后续需要汇报模式,只做布局适配,不改变统计口径。
## 变更记录
- 2026-06-23:覆盖图升级为市级行政区热力统计,按中心点落入市级单位计数,分离“源数据覆盖”和“成果覆盖”。
- 2026-06-23:覆盖图曾短暂使用后端格网热力统计,因展示效果不适合综合统计页,调整为市级行政区分级设色。
- 2026-06-23:页面命名调整为“InSAR 数据与生产统计”;覆盖图从经纬度散点调整为空间覆盖密度图;文档明确当前图不等同于正式面积统计。
- 2026-06-22:综合统计从影像检索弹窗提升为一级页面,统计口径独立于检索分页结果。
@@ -0,0 +1,346 @@
# 存储压力清理与治理设计
最后更新:2026-06-23
本文档记录系统后续增加“释放存储压力”能力的设计边界。当前阶段仅作为维护和设计依据,不代表已经实现清理按钮、接口或数据库表。
## 1. 背景
当前系统已经明确退出 UNC 活动生产链路,LT-1、Sentinel-1、高分三、精密轨道、DEM、Task_Pool、运行时和结果发布目录均要求走本机路径。
本机化以后,磁盘压力主要来自:
- LT-1 / Sentinel-1 源压缩包持续增长;
- WebP、预览图源缓存和雷达缩略缓存持续增长;
- D-InSAR / SBAS-InSAR 的 Task_Pool materialize 目录持续增长;
- LandSAR、ENVI/SARscape、Gamma/PyINT、IDL、WSL broker 等运行时临时目录持续增长;
- `system_tasks` / `task_logs`、生产运行日志、诊断日志等数据库记录持续增长;
- 失败任务、调试任务和隔离区残留。
清理能力必须服务于生产稳定性,不能把“释放空间”做成粗暴删除目录。系统需要先判断数据角色、数据库引用、任务状态和可重建性,再生成清理计划。
## 2. 总原则
1. 源数据不清理。
LT-1 / Sentinel-1 源压缩包、高分三 `_geo` 原生成果、DEM、精密轨道池是生产输入或登记对象,普通存储清理不得删除。
2. 先 dry-run,后执行。
所有清理动作必须先生成计划,列出路径、大小、数据库影响、风险等级和预计释放空间。用户确认后才执行。
3. 清理动作必须可审计。
系统必须记录谁在什么时候按什么规则清理了哪些文件、释放了多少空间、哪些失败、哪些数据库记录被更新。
4. 优先清理可重建派生物。
日志、过期缓存、旧版本缓存、失败任务临时目录、运行时临时目录、过期隔离区优先进入第一阶段。
5. 正式成果不走普通清理。
`D:\production_results` 及其 catalog 注册成果不能被“一键清理”删除。成果删除或归档应走单独的结果管理流程。
6. Task_Pool 清理必须依赖生产状态。
`D:\Task_Pool` 下 materialize 出来的生产输入理论上可从源压缩包重建,但只有在任务已结束、无活动执行、结果已登记或用户明确确认后才能清理。
7. 文件状态和数据库状态必须同步。
如果删除了数据库引用的 WebP 缓存、运行记录、结果资产或任务日志,必须同步更新对应表,避免前端显示“可用”但文件已不存在。
## 3. 永不进入普通清理的对象
以下对象默认不可被普通“释放存储压力”功能删除:
| 对象 | 典型路径 / 配置 | 原因 |
| --- | --- | --- |
| LT-1 源压缩包 | `SOURCE_PRODUCT_DIRS` 中的 `D:\LuTan1_Image_Pool_Zip` | 源数据,是按需解包和重新生产的根 |
| Sentinel-1 源压缩包 | `SOURCE_PRODUCT_DIRS` 中的 `D:\Sentinel1_Image_Pool_ZIP` | 源数据,是按需解包和重新生产的根 |
| 高分三 `_geo` 成果池 | `GF3_SARSCAPE_NATIVE_DIRS=D:\GaoFen3_Pool\native_geo` | 本机登记对象,WebP 从这里生成 |
| 高分三 catalog | `GF3_STORAGE_DIRS=D:\GaoFen3_Pool\catalog` | 平台登记 manifest 和追踪材料 |
| LT-1 / S1 原生精轨源池 | `ORBIT_SOURCE_DIRS` | 轨道源资产 |
| LT-1 生产精轨池 | `ORBIT_POOL_ENVI` / `PYINT_ORBIT_POOL_TXT` / `GAMMA_SBAS_ORBIT_ROOTS` | ENVI、LandSAR、Gamma/PyINT 生产依赖 |
| DEM | `D:\DEM` 及相关 DEM 配置 | D-InSAR / SBAS / GF3 生产依赖 |
| 正式发布成果 | `RESULT_PUBLISH_ROOT``DINSAR_PRODUCT_DIR``TIMESERIES_PRODUCT_DIR` | 结果 catalog 管理对象,不走普通清理 |
如确需删除以上对象,必须另设“源数据归档/删除”或“成果归档/删除”专项流程,不能复用普通清理按钮。
## 4. 可清理对象分级
### 4.1 低风险:第一阶段优先实现
| 类别 | 规则 | 数据库动作 |
| --- | --- | --- |
| 任务日志 | 清理已结束任务的旧日志,保留最近 N 天或每任务最后 N 条 | 删除 `task_logs`,可保留任务摘要 |
| 已结束旧任务记录 | 只清 `COMPLETED` / `FAILED` / `CANCELLED`,不得清 `PENDING` / `RUNNING` | 删除 `system_tasks` 及日志,或仅压缩日志 |
| 无引用缓存文件 | `backend\image_cache` 下没有数据库引用、文件不存在于当前版本策略的缓存 | 文件删除即可,记录清理项 |
| 旧版本 WebP 缓存 | `RADAR_GEO_CACHE_VERSION` 已变化且数据库不再引用 | 删除文件;如仍被引用,先更新数据库 |
| 过期隔离区 | 隔离超过保留期的文件 | 删除隔离记录或更新清理项 |
### 4.2 中风险:第二阶段实现
| 类别 | 规则 | 数据库动作 |
| --- | --- | --- |
| 雷达 WebP 缓存 | 可从源压缩包或 GF3 `_geo` 重建;默认只清旧版本、孤立文件 | 若删除当前引用缓存,`radar_data.preview_cache_status` 改为 `NONE`,写入 `preview_cache_error=storage_cleanup_removed` |
| 预览图源缓存 | `radar_archive_preview_sources` 等从压缩包提取的中间缓存 | 可删除,后续扫描或预览重建 |
| 运行时临时目录 | `production_runtime`、IDL runtime、WSL jobs、PyINT work、临时 DEM 裁剪 | 仅清无活动任务、超过保留期的目录 |
| GF3 SARscape runtime | `GF3_TASK_POOL_ROOT` / `GF3_SARSCAPE_RUNTIME_DIR` | 当前本机 GF3 不生产,原则上仅清失败/过期 runtime,不清 `_geo` |
### 4.3 高风险:第三阶段谨慎实现
| 类别 | 规则 | 数据库动作 |
| --- | --- | --- |
| D-InSAR Task_Pool materialize 目录 | 任务结束、无活动执行、可由源压缩包重建、用户确认 | 更新批次/任务的 materialize 状态 |
| SBAS Task_Pool materialize 目录 | 任务结束、无活动执行、结果或失败状态明确 | 更新 SBAS 生产运行状态 |
| D-InSAR / SBAS 中间文件 | 只清已发布结果之外的中间产物 | 必须依赖 result catalog 和 run manifest |
### 4.4 不在本功能处理
- 源压缩包去重、归档、外发;
- 正式结果删除;
- DEM 版本删除;
- 精轨池删除;
- PostgreSQL VACUUM / 备份压缩;
- 洪水检测专项数据清理。
## 5. 清理计划模型
后续实现时,清理流程应分为两个动作:
1. `PLAN`
只扫描并估算,不删除文件,不修改业务表。
2. `APPLY`
按用户确认的计划执行,逐项记录结果,必要时同步更新数据库。
清理计划每一项至少包含:
```json
{
"category": "radar_preview_cache",
"action": "delete_file",
"path": "D:\\Code\\Insar_management_system_v2\\backend\\image_cache\\radar_geo\\xxx.webp",
"size_bytes": 123456,
"risk_level": "low",
"reason": "old_cache_version",
"db_table": "radar_data",
"db_pk": 123,
"db_update": {
"preview_cache_status": "NONE",
"preview_cache_error": "storage_cleanup_removed"
}
}
```
## 6. 建议新增数据库表
为了审计和可追溯,建议新增两张表。
### 6.1 `storage_cleanup_runs`
| 字段 | 含义 |
| --- | --- |
| `run_id` | 清理任务 ID |
| `status` | `PLANNED` / `RUNNING` / `COMPLETED` / `FAILED` / `CANCELLED` |
| `dry_run` | 是否只生成计划 |
| `categories` | 本次涉及类别 |
| `planned_bytes` | 计划释放空间 |
| `released_bytes` | 实际释放空间 |
| `planned_count` | 计划项数量 |
| `succeeded_count` | 成功项数量 |
| `failed_count` | 失败项数量 |
| `started_at` / `ended_at` | 执行时间 |
| `operator_user_id` | 操作用户 |
| `report_json` | 汇总报告 |
### 6.2 `storage_cleanup_items`
| 字段 | 含义 |
| --- | --- |
| `run_id` | 所属清理任务 |
| `category` | 清理类别 |
| `action` | `delete_file` / `delete_dir` / `quarantine` / `delete_db_rows` / `update_db_rows` |
| `path` | 文件或目录路径 |
| `size_bytes` | 大小 |
| `risk_level` | `low` / `medium` / `high` |
| `reason` | 命中规则 |
| `db_table` / `db_pk` | 关联数据库对象 |
| `before_json` / `after_json` | 数据库变更前后摘要 |
| `quarantine_path` | 隔离路径 |
| `status` | 单项执行状态 |
| `error` | 失败原因 |
第一阶段也可以先不建表,使用 `system_tasks` + JSON 报告落地,但正式实现建议单独建表。
## 7. 路径安全规则
所有文件清理必须满足以下规则:
1. 路径必须位于白名单根目录下。
2. 禁止删除盘符根目录,例如 `D:\`
3. 禁止删除项目根目录、数据库目录、Python 环境目录、Nginx 目录。
4. 禁止处理 UNC 路径。
5. 禁止跟随符号链接逃逸白名单根目录。
6. 删除目录前必须重新计算 resolved path 并确认仍在白名单内。
7. 默认先移动到隔离区,隔离区过期后再永久删除。
8. 单次执行应有最大删除数量和最大删除字节数上限。
建议白名单根目录来自配置和系统常量:
- `backend\image_cache`
- `TASK_POOL_ROOT`
- `DINSAR_TASK_POOL_ROOT`
- `SBAS_TASK_POOL_ROOT`
- `GF3_TASK_POOL_ROOT`
- `DATA_DISTRIBUTION_ROOT`
- `IDL_WORKER_RUNTIME_DIR`
- `SAR_ANALYSIS_WORK_ROOT`
- `WSL_BROKER_JOB_ROOT`
- `PYINT_WORK_ROOT`
- `PYINT_DEM_ROOT`
- `GAMMA_SBAS_TRIAL_ROOT`
- `RESULT_QUARANTINE_ROOT`
其中 `RESULT_PUBLISH_ROOT` 只允许扫描统计,不允许普通清理删除。
## 8. 任务互斥和运行保护
执行清理前必须检查活动任务:
- 存在 WebP 构建任务时,禁止清理 `backend\image_cache`
- 存在资产扫描任务时,禁止清理预览图源缓存;
- 存在 D-InSAR 生产任务时,禁止清理 `DINSAR_TASK_POOL_ROOT` 和 D-InSAR runtime
- 存在 SBAS 生产任务时,禁止清理 `SBAS_TASK_POOL_ROOT``GAMMA_SBAS_WORK_ROOT` 和 SBAS runtime
- 存在 GF3 标准化或 WebP 生成任务时,禁止清理 `GF3_TASK_POOL_ROOT`
- 禁止清理任何 `PENDING` / `RUNNING` 任务关联的目录。
后端实现应使用任务类型锁或 PostgreSQL advisory lock,避免多个清理任务并发执行。
## 9. 建议默认保留策略
以下值是初始建议,后续可放入 `.env`
| 配置 | 建议默认值 | 含义 |
| --- | --- | --- |
| `RUNTIME_CLEANUP_TASK_LOG_RETENTION_DAYS` | 30 | 已结束任务日志保留天数 |
| `RUNTIME_CLEANUP_TASK_RECORD_RETENTION_DAYS` | 90 | 已结束任务记录保留天数 |
| `RUNTIME_CLEANUP_IMAGE_CACHE_RETENTION_DAYS` | 60 | 无引用缓存保留天数 |
| `RUNTIME_CLEANUP_RUNTIME_RETENTION_DAYS` | 30 | 运行时临时目录保留天数 |
| `RUNTIME_CLEANUP_FAILED_RUNTIME_RETENTION_DAYS` | 7 | 失败任务临时目录保留天数 |
| `RUNTIME_CLEANUP_TASK_POOL_RETENTION_DAYS` | 30 | 可重建 Task_Pool materialize 目录保留天数 |
| `RUNTIME_CLEANUP_QUARANTINE_RETENTION_DAYS` | 14 | 隔离区永久删除前保留天数 |
默认只启用低风险类别。Task_Pool 和中间文件清理应默认关闭,需要用户显式勾选。
## 10. 前端工作台设计方向
入口建议放在“运行维护 / 存储治理”,而不是放在资产扫描、生产准备或数据分发按钮旁边。
页面结构建议:
1. 存储概览
- 按磁盘卷展示总容量、已用、剩余、压力等级;
- 展示系统可治理目录的估算占用;
- 单独标注“受保护源数据”和“可清理派生数据”。
2. 清理类别
- 任务日志;
- 图像缓存;
- 运行时临时目录;
- Task_Pool materialize
- 隔离区。
3. 清理计划
- 预计释放空间;
- 文件数量;
- 数据库记录数量;
- 风险等级;
- 样例路径;
- 受保护跳过项。
4. 执行与审计
- 后台任务进度;
- 单项失败列表;
- 释放空间统计;
- 可下载 JSON 报告。
界面文案必须明确区分:
- “源数据,不会删除”;
- “缓存,可重建”;
- “运行临时目录,任务结束后可清”;
- “正式成果,不在本功能删除”。
## 11. 建议接口
后续实现可采用以下接口:
```text
GET /maintenance/storage/overview
POST /maintenance/storage-cleanup/plan
POST /maintenance/storage-cleanup/runs
GET /maintenance/storage-cleanup/runs/{run_id}
GET /maintenance/storage-cleanup/runs/{run_id}/items
POST /maintenance/storage-cleanup/quarantine/purge-plan
POST /maintenance/storage-cleanup/quarantine/purge
```
`plan` 接口只返回计划,不创建删除动作。`runs` 接口基于某次计划执行,并创建后台任务。
## 12. 实施阶段
### 阶段 0:文档维护
- 固化清理边界;
- 确认不清源压缩包、不清 GF3 `_geo`、不清 DEM、精轨和正式成果;
- 后续设计和编码必须引用本文档。
### 阶段 1:低风险清理
- 存储概览;
- 任务日志清理;
- 旧任务记录清理;
- 无引用缓存 dry-run
- 清理任务审计报告。
### 阶段 2:缓存治理
- WebP 缓存计划;
- 旧版本缓存清理;
- 数据库 `preview_cache_*` 同步;
- 缓存按需重建入口。
### 阶段 3:运行时治理
- `production_runtime`、IDL、PyINT、WSL job、GF3 runtime 清理;
- 运行任务保护;
- 隔离区机制。
### 阶段 4Task_Pool materialize 治理
- D-InSAR / SBAS Task_Pool 目录识别;
- 与生产批次、生产运行、结果 catalog 关联;
- 可重建性验证;
- 用户确认后清理或隔离。
### 阶段 5:成果归档专项
- 不纳入普通清理;
- 单独设计结果产品归档、下线、删除和恢复流程。
## 13. 验收标准
后续实现完成后,至少满足:
1. dry-run 不改文件、不改业务表;
2. 清理计划能解释每一项为什么可清;
3. 源压缩包、GF3 `_geo`、DEM、精轨池和正式成果不会出现在普通清理执行项中;
4. 删除 WebP 缓存后,数据库状态不会继续显示 `READY`
5. 活动任务相关目录不会被清理;
6. 所有删除动作有审计记录;
7. 清理失败不会导致整批数据库状态不一致;
8. 前端能展示释放空间、失败项和跳过原因。
## 14. 与现有文档的关系
- 三类数据本机生产边界以 `THREE_SENSOR_LOCAL_PRODUCTION_CONTRACT_20260616.md` 为准。
- 源压缩包管理和按需 materialize 以 `UNC_SOURCE_ARCHIVE_AND_MATERIALIZE_DESIGN_20260615.md` 为准。
- 源压缩包完整性审计以 `SOURCE_ARCHIVE_INTEGRITY_AUDIT_20260620.md` 为准。
- D-InSAR Task_Pool 和中间文件治理参考 `DINSAR_TASK_POOL_THREE_ENGINE_REFACTOR_20260614.md`
- 正式成果包和 result catalog 以 `PRODUCTION_RESULTS_MULTI_ENGINE_DESIGN_20260423.md` 为准。
本文档只定义存储压力治理边界,不替代源数据、生产准备、结果管理或完整性审计文档。
+22
View File
@@ -0,0 +1,22 @@
# 2026-06-23 文档归档说明
本目录保存 2026-06-23 文档治理时从 `docs/` 根目录移出的历史、实验、过程和阶段性文档。
归档原则:
- `docs/INDEX.md` 列出的文档继续作为当前有效事实入口。
- 本目录文档只作为历史参考,不再直接指导当前系统设计、部署或生产操作。
- 如果需要重新启用某份归档文档,必须先复核其内容与当前代码、数据库结构、生产流程是否一致,再移回 `docs/` 并加入 `docs/INDEX.md`
本次归档文件:
- `GAMMA_SBAS_EXPERT_CORRECT_IMPLEMENTATION_ROUTE_20260607.md`
- `GAMMA_SBAS_EXPERT_WORKFLOW_AUDIT_20260608.md`
- `GAMMA_SBAS_RUNTIME_OBSERVATIONS_20260611.md`
- `GAMMA_SBAS_ZERO_RATE_VALID_VISUALIZATION_DESIGN_20260608.md`
- `GF3_WATER_EXTRACTION_INTEGRATION_20260615.md`
- `LANDSAR_SBAS_ARCHIVE_20260606.md`
- `LANDSAR_SBAS_INSAR_INTEGRATION_DESIGN.md`
- `LandSAR_API服务接入采购需求说明书_20260604.md`
- `SBAS_INSAR_GAMMA_EXPERT_WORKFLOW_REVIEW_20260603.md`
- `SENTINEL1_GAMMA_SBAS_NO_STITCH_DESIGN.md`