更新: 2 个文件 - 2026-03-21 18:00:07
这个提交包含在:
@@ -1101,6 +1101,12 @@ def _write_dashboard_docs(architecture: Dict[str, Any]) -> None:
|
||||
_safe_read_text(ROOT / "08-threat-intel" / "generated" / "entity-discovery-backlog.md", "entity discovery backlog has not been generated yet."),
|
||||
"工作台内置镜像页:待编目 repo / 插件 / 包 backlog 与等待原因。",
|
||||
),
|
||||
(
|
||||
"version-sync-report.html",
|
||||
"安全相关版本同步报告",
|
||||
_safe_read_text(ROOT / "08-threat-intel" / "generated" / "version-sync-report.md", "version sync report has not been generated yet."),
|
||||
"工作台内置镜像页:安全相关版本历史、source-gap 与版本驱动 lab enqueue 摘要。",
|
||||
),
|
||||
(
|
||||
"coverage-matrix.html",
|
||||
"覆盖矩阵镜像",
|
||||
@@ -1440,12 +1446,22 @@ def render_dashboard(
|
||||
|
||||
for system_id, system in systems.items():
|
||||
entity_summary = entity_summary_map.get(system_id, {})
|
||||
version_summary = version_summary_map.get(system_id, {})
|
||||
root_entity = next((item for item in entities_by_system.get(system_id, []) if item.get("entity_id") == system_id), {})
|
||||
system["entity_summary"] = entity_summary
|
||||
system["version_summary"] = version_summary
|
||||
system["top_entities"] = entity_summary.get("top_entities", [])
|
||||
system["backlog_preview"] = entity_summary.get("backlog_preview", [])
|
||||
system["entity_total"] = entity_summary.get("cataloged_entity_total", 0)
|
||||
system["entity_backlog"] = entity_summary.get("candidate_entity_total", 0)
|
||||
system["entity_type_counts"] = entity_summary.get("entity_type_counts", {})
|
||||
system["latest_version"] = root_entity.get("latest_version") or next(
|
||||
(item.get("latest_version") for item in (version_summary.get("latest_versions") or []) if item.get("latest_version")),
|
||||
"",
|
||||
)
|
||||
system["last_version_synced_at"] = root_entity.get("last_version_synced_at") or ""
|
||||
system["version_sync_status"] = root_entity.get("version_sync_status") or ("source-gap" if version_summary.get("source_gap_count") else "green")
|
||||
system["security_version_count"] = version_summary.get("security_version_count", 0)
|
||||
|
||||
recent_runs = sorted(runs, key=lambda item: item.get("finished_at") or "", reverse=True)[:100]
|
||||
decorated_runs: List[Dict[str, Any]] = []
|
||||
@@ -1511,6 +1527,7 @@ def render_dashboard(
|
||||
"last_fully_green_run": source_health.get("last_fully_green_run"),
|
||||
},
|
||||
"entity_coverage": entity_completeness,
|
||||
"version_coverage": version_completeness,
|
||||
}
|
||||
for item in merged_advisories:
|
||||
status = item.get("verification_status", "triage-manual")
|
||||
@@ -1555,6 +1572,10 @@ def render_dashboard(
|
||||
"candidate_entity_total": entity_completeness.get("candidate_entity_total", 0),
|
||||
"workflow_complete_count": entity_completeness.get("workflow_complete_count", 0),
|
||||
"version_mapped_count": entity_completeness.get("version_mapped_count", 0),
|
||||
"latest_version_synced_count": version_completeness.get("latest_version_synced_count", 0),
|
||||
"version_source_gap_count": version_completeness.get("source_gap_count", 0),
|
||||
"security_version_total": version_completeness.get("security_version_total", 0),
|
||||
"lab_enqueued_count": version_completeness.get("lab_enqueued_count", 0),
|
||||
}
|
||||
|
||||
write_json(DASHBOARD_DIR / "summary.json", summary)
|
||||
@@ -1571,6 +1592,10 @@ def render_dashboard(
|
||||
write_json(DASHBOARD_DIR / "data" / "entity-completeness.json", entity_completeness)
|
||||
write_json(DASHBOARD_DIR / "data" / "entity-discovery-backlog.json", entity_backlog)
|
||||
write_json(DASHBOARD_DIR / "data" / "entity-queues.json", entity_queues)
|
||||
write_json(DASHBOARD_DIR / "data" / "version-completeness.json", version_completeness)
|
||||
write_json(DASHBOARD_DIR / "data" / "version-backlog.json", version_backlog)
|
||||
write_json(DASHBOARD_DIR / "data" / "release-index.json", release_index)
|
||||
write_json(DASHBOARD_DIR / "data" / "lab-enqueue-summary.json", lab_enqueue_summary)
|
||||
_write_testing_completeness_report(completeness)
|
||||
architecture = _build_architecture_data(summary, source_map, repro_map)
|
||||
write_json(DASHBOARD_DIR / "architecture.json", architecture)
|
||||
|
||||
在新工单中引用
屏蔽一个用户