Skip to content

app/starry: add resource monitoring visualization#1370

Merged
ZR233 merged 7 commits into
rcore-os:devfrom
2026-Proj4-YatSenOS:feat/app-starry-resource-monitor-ui
Jun 26, 2026
Merged

app/starry: add resource monitoring visualization#1370
ZR233 merged 7 commits into
rcore-os:devfrom
2026-Proj4-YatSenOS:feat/app-starry-resource-monitor-ui

Conversation

@Je-suis-un-chat

@Je-suis-un-chat Je-suis-un-chat commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

概述

本 PR 在 apps/starry/resource-monitor/ 下新增一个离线资源监测与网页可视化工具,用于 StarryOS 应用实验中的离线数据采集、日志导出和主机端回放分析。

该功能定位为 apps/starry 用户态辅助工具,主要服务于:

  • StarryOS QEMU / 板端调试;
  • Linux 与 StarryOS 资源日志对比;
  • 比赛演示和实验报告中的离线证据展示。

它不是内核功能,不修改驱动、NPU、USB、调度器、文件系统、系统调用或板卡配置,也不依赖云端监控服务。

主要改动

新增 system-monitor.sh

新增:

apps/starry/resource-monitor/system-monitor.sh

该脚本从当前系统已有的 /proc 接口采集系统资源数据,并输出:

system_metrics.csv
events.jsonl

采集内容包括:

时间戳;
uptime;
CPU 总占用;
各核 CPU 占用;
运行队列长度;
上下文切换增量;
中断增量;
内存总量;
已用内存;
空闲内存;
内存峰值。

当前系统暂时无法提供的字段会保留为 NA,不会伪造数据。
新增 app 目录下的演示 wrapper
新增:

apps/starry/resource-monitor/scripts/run-offline-monitor.sh

该脚本用于演示和串口日志导出,不再放入 test-suit。它会运行 collector,并在输出中打印便于提取的标记:

STARRY_SYSTEM_METRICS_BEGIN
STARRY_SYSTEM_METRICS_END
STARRY_EVENTS_BEGIN
STARRY_EVENTS_END

如果 collector 缺失、执行失败或日志文件未生成,会输出:

OFFLINE_MONITOR_FAILED

并返回非零状态。
新增离线网页 viewer
新增:

apps/starry/resource-monitor/offline-viewer/index.html

该网页是完全离线的单文件 HTML 工具,可以通过浏览器 File API 导入本地日志文件,不依赖 CDN 或公网服务。
支持导入:

system_metrics.csv
events.jsonl
robot_trace.csv(可选)

可展示:

CPU 曲线;
内存曲线;
FPS 曲线;
推理耗时曲线;
机器人状态时间线;
事件表;
Linux 与 StarryOS 对比摘要;
离线 HTML 分析报告导出。

同时,本 PR 已修复 viewer 中的 HTML 注入风险。来自 CSV/JSONL 的字段不再直接拼接进 innerHTML,事件表、timeline、legend、对比表等均改为 DOM API + textContent 渲染。
更新 README
更新:

apps/starry/resource-monitor/README.md

说明内容包括:

如何在 StarryOS QEMU / board 内运行 collector;
--duration-sec、--interval-sec、--out-dir 参数含义;
如何导出 system_metrics.csv 和 events.jsonl;
如何采集 Linux baseline;
如何打开离线 viewer;
当前 StarryOS 上哪些字段可能为 NA。

更新 .gitignore
新增忽略规则,避免误提交本地测试产物:

/logs/offline-monitor/
/images/linux-qemu/
offline-monitor-analysis*.html

范围说明

本 PR 只提供 apps/starry 下的用户态离线采集与可视化工具。
本 PR 不修改:

StarryOS 内核;
axvisor;
phytiumpi board 配置;
block device / root device 逻辑;
USB / NPU / 网络驱动;
调度器;
文件系统;
系统调用实现。
本 PR 也不再新增 test-suit/starryos 用例。

原因是当前 resource monitor 的演示流程只是运行采样脚本并生成日志,它不能断言某个具体 StarryOS ABI、syscall、文件系统、调度器或 /proc 语义是否正确。因此它更适合作为 app demo / 采样工具,而不是 test-suit regression case。

使用方式

在目标系统中运行:

cd apps/starry/resource-monitor
sh system-monitor.sh \
  --out-dir /root/monitor \
  --interval-sec 1 \
  --duration-sec 60

生成:

/root/monitor/system_metrics.csv
/root/monitor/events.jsonl

如果需要串口标记输出,可运行:

sh scripts/run-offline-monitor.sh \
  --out-dir /root/monitor \
  --interval-sec 1 \
  --duration-sec 60

在主机端打开网页:

cd apps/starry/resource-monitor/offline-viewer
python3 -m http.server 8000

然后访问:

http://127.0.0.1:8000/

@ZR233 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查结果

这个 PR 新增了 StarryOS 用户态资源采集脚本、离线 HTML viewer,以及一个 x86_64 QEMU smoke case。思路本身是应用层辅助工具,不改变内核计数器或驱动边界;system-monitor.sh 在字段缺失时输出 NA,这比伪造指标更稳妥。

但当前分支不能合并:mergeStateStatus=DIRTY,冲突至少在 .gitignore,并且 maintainerCanModify=false,维护者无法直接帮忙推 rebase 修复;当前 head 也没有任何 CI/check runs。更关键的是 PR 基于旧的 Starry test-suit 布局和命令:最新 dev 已经不再使用 test-suit/starryos/normal/ 作为一级分组,cargo xtask starry test qemu --help 也没有 -g/--test-group 选项。现在 README 写的 -g normal -c offline-monitor 和新增路径 test-suit/starryos/normal/qemu-smp1/offline-monitor/ 合到最新 dev 后会变成过时入口。

需要先 rebase 最新 dev,并把应用目录和测试目录按当前约定调整:应用工作流放到 apps/starry/resource-monitor/,文档命令同步为 apps/starry/...;CI smoke case 放到当前 Starry test-suit 能发现的位置,例如 test-suit/starryos/qemu-smp1/offline-monitor/qemu-x86_64.toml,或者如果它要作为 grouped/system 子测例,则按 qemu-smp1/system/<subcase>/CMakeLists.txt / src/ 规则接入。调整后请用最新 dev 上实际存在的命令重跑,例如 cargo xtask starry test qemu --arch x86_64 -c qemu-smp1/offline-monitor(或你最终采用的当前布局 selector),并让当前 head CI 重新触发。

审查清单:PR 元数据和当前 head 已确认;review threads 为空;CI 缺失;冲突已确认且 maintainer edits 未开启;该 PR 不涉及 LoongArch 平台配置,动态平台要求不适用;Starry app/test-suit 规则已检查,当前路径和文档命令落后于最新 dev;未发现 crates.io patch;重复/重叠搜索只发现本 PR,没有其它 open PR 实现同一 resource-monitor 工具。

本地验证:git diff --check origin/dev...origin/pr/1370 通过;两个 shell 脚本 bash -n 通过;在旧 PR head 上按 README 的旧命令运行 cargo xtask starry test qemu --target x86_64-unknown-none -g normal -c offline-monitor,QEMU 能注入脚本并匹配 STARRY_EVENTS_END。不过这只是旧 head/旧布局证据,不能替代 rebase 到最新 dev 后的当前命令验证。

Comment thread app/starry/resource-monitor/README.md Outdated
Comment thread app/starry/resource-monitor/README.md Outdated

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查结果

这个 PR 新增 StarryOS 用户态离线资源监测脚本、HTML 可视化网页,以及一个 QEMU smoke case。思路清晰,system-monitor.sh 在字段缺失时输出 NAoffline-viewer/index.html 为纯静态离线页面,整体不改变内核计数器或驱动边界。

但当前分支有多个阻塞问题,需要修改后才能合并:

阻塞问题

  1. 应用目录路径不符合现有约定:仓库现有 Starry app 目录为 apps/starry/(复数),cargo xtask starry app ...apps/starry/README.md 也按此路径约定。PR 新增到 app/starry/(单数),与项目约定不符。请迁移到 apps/starry/resource-monitor/

  2. test-suit 布局已过时:最新 dev 的 test-suit 已经移除了 normal/ 一级分组,直接从 test-suit/starryos/qemu-smp1/ 发现 QEMU case。PR 的测试用例放在 test-suit/starryos/normal/qemu-smp1/offline-monitor/,当前 runner 无法发现此路径下的 case。

  3. QEMU TOML 使用了过时的 rootfs 路径和 runner 选项

    • TOML 中的 rootfs 路径为 target/rootfs/rootfs-x86_64-alpine.img,但当前 dev 已统一使用 tmp/axbuild/rootfs/rootfs-x86_64-alpine.img
    • README 中的命令 cargo xtask starry test qemu --target x86_64-unknown-none -g normal -c offline-monitor 使用了已不存在的 -g/--test-group 选项。请 rebase 最新 dev 后按当前命令格式修改,如 cargo xtask starry test qemu --arch x86_64 -c qemu-smp1/offline-monitor(以最终布局为准)。
  4. 合并冲突:PR 当前 mergeable_state=DIRTY,至少在 .gitignore 存在冲突,且 maintainerCanModify=false,维护者无法帮忙推修复。需要作者 rebase 最新 dev。

  5. 无 CI 覆盖:PR head 无任何 check runs 或 commit statuses。

  6. system-monitor.sh 重复文件app/starry/resource-monitor/system-monitor.shtest-suit/starryos/normal/qemu-smp1/offline-monitor/sh/system-monitor.sh 完全相同,建议测试用例直接复用应用目录下的脚本,避免维护两份相同文件。

CI 状态

PR head (6259f35) 无任何 check runs 或 commit statuses,CI 覆盖缺失。

前次 Review 讨论

@ZR233 的 CHANGES_REQUESTED review 指出了上述 3 个关键问题,当前 PR 未做任何修改,这些问题仍然存在。

重复/重叠分析

搜索了相关 open PR,未发现其它 PR 实现相同的 resource-monitor 工具,PR 不存在功能重复问题。

Reviewer 分配建议

根据 discussion 594 人员方向整理,本 PR 涉及 Starry app、test-suit、QEMU case 和 rootfs,建议分配 @ZCShou(测试/发行版/rootfs/axbuild)和 @luodeb(Starry/rootfs)。

总结

请作者 rebase 最新 dev,修正应用目录路径为 apps/starry/,迁移测试用例到当前 runner 能发现的布局(如 test-suit/starryos/qemu-smp1/offline-monitor/),更新 rootfs 路径和文档命令为当前格式,然后重跑 CI。

Powered by mimo-v2.5-pro

Comment thread apps/starry/resource-monitor/README.md
Comment thread test-suit/starryos/qemu-smp1/offline-monitor/qemu-x86_64.toml
Comment thread app/starry/resource-monitor/README.md Outdated
@Je-suis-un-chat
Je-suis-un-chat force-pushed the feat/app-starry-resource-monitor-ui branch from 6259f35 to 8ba82b4 Compare June 25, 2026 09:44

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查结果

作者已回应并修复了前两次审查(@ZR233 和 mai-team-app[bot])提出的所有阻塞问题,当前 head (57750fd) 的布局和配置符合最新 dev 约定。

前次审查问题修复确认

  1. 应用目录路径:已迁移到 apps/starry/resource-monitor/(正确复数形式),apps/starry/README.md 已同步更新。
  2. test-suit 布局:已迁移到 test-suit/starryos/qemu-smp1/offline-monitor/,移除了过时的 normal/ 一级分组。
  3. QEMU TOML rootfs 路径:已修正为 ${workspace}/tmp/axbuild/rootfs/rootfs-x86_64-alpine.img
  4. README 文档命令:已更新为 cargo xtask starry test qemu --arch x86_64 -c qemu-smp1/offline-monitor(当前正确格式)。
  5. 合并冲突:已解决,mergeable=true

当前 head 验证

  • Shell 脚本语法 bash -nsystem-monitor.shrun-offline-monitor.sh 全部通过。
  • QEMU TOML 配置正确:有 success_regexfail_regex(匹配 panic 和 OFFLINE_MONITOR_FAILED)、timeout=180
  • run-offline-monitor.sh 错误处理完善:set -eu,检查 /usr/bin/system-monitor.sh 存在性,检查输出文件存在性,失败时打印 OFFLINE_MONITOR_FAILED
  • 无 crates.io patch。

CI 状态

当前 head 的所有 GitHub Actions check runs 为 skipped。这是因为 PR 仅修改 shell 脚本、HTML 和 TOML 配置,不涉及 Rust 代码,CI 路径过滤器正确跳过了不相关的 Rust 构建/测试作业,属于预期行为。

重复/重叠分析

未发现其它 open PR 实现相同功能。

剩余建议(非阻塞)

  1. PR 描述中仍引用旧路径(如 test-suit/starryos/normal/...),建议后续同步更新。
  2. system-monitor.shapps/starry/resource-monitor/test-suit/starryos/qemu-smp1/offline-monitor/sh/ 中有相同副本。test-suit 副本用于 rootfs 注入,保持两份是合理的,但后续可考虑构建系统自动复制。

总结

PR 为 StarryOS 用户态新增离线资源监测与可视化辅助工具,包括采集脚本、静态 HTML 离线查看器和 QEMU smoke 测试用例。实现逻辑清晰:脚本读取 /proc 接口,不支持的字段输出 NA;离线查看器为纯静态页面,支持 CSV/JSONL 导入和 StarryOS/Linux 对比;QEMU 测试用例验证了脚本注入和日志生成流程。所有前次审查阻塞问题已修复,代码质量满足合并要求。

Powered by mimo-v2.5-pro

@ZR233 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这轮重新看了当前 head 57750fdbc42ecd60c48ab84fab2d55b540c240ba。之前我提到的应用路径、test-suit 布局、README 命令和 CI 缺失问题已经修掉了;当前 head CI 全部通过/预期跳过,merge state 现在是 blocked 主要来自仍有 unresolved requested changes review。

本地也补了验证:

  • bash -n apps/starry/resource-monitor/system-monitor.sh test-suit/starryos/qemu-smp1/offline-monitor/sh/run-offline-monitor.sh 通过。
  • git diff --check origin/dev...HEAD 通过。
  • cargo xtask starry test qemu --arch x86_64 -c qemu-smp1/offline-monitor --list 能发现 qemu-smp1/offline-monitor
  • cargo xtask starry test qemu --arch x86_64 -c qemu-smp1/offline-monitor 通过,guest 输出 STARRY_EVENTS_END,结果为 1/1 case(s) passed

还需要改一个阻塞点:offline viewer 会把导入的 CSV/JSONL 字段直接拼进 innerHTML,日志文件属于外部输入,导入后可触发 HTML/JS 注入;报告导出还会把这部分表格继续带出去。具体位置我留了 inline。修复建议是把事件表、timeline/legend 等来自日志的字符串改成 DOM API + textContent,或者统一 HTML escape 后再拼接。修完这个安全问题后,这个 PR 的功能和测试路径我认为就基本可以进入可合并状态。

Comment thread apps/starry/resource-monitor/offline-viewer/index.html Outdated
Comment thread apps/starry/resource-monitor/offline-viewer/index.html Outdated

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查结果

作者已回应并修复了所有前序审查提出的阻塞问题,当前 head ea4204045 符合合并要求。

前次审查问题修复确认

  1. XSS 安全问题(@ZR233 指出):已在当前 head(commit message "app/starry: escape offline monitor log rendering")中修复。确认 index.htmlinnerHTML 使用,所有来自 CSV/JSONL 的字符串均通过 textContent / createTextNode / appendChild 等安全 DOM API 渲染。appendText 辅助函数使用 node.textContent = valueappendCell 通过 appendText 实现,事件表、timeline legend、状态行等所有外部数据输出点均已覆盖。outerHTML 报告导出捕获的也是已通过 textContent 渲染的 DOM,序列化时会正确转义 HTML 特殊字符。修复完整且正确。

  2. 应用目录路径:已迁移至 apps/starry/resource-monitor/(正确复数形式),apps/starry/README.md 已同步更新。

  3. test-suit 布局:已迁移至 test-suit/starryos/qemu-smp1/offline-monitor/,移除了过时的 normal/ 分组。

  4. QEMU TOML rootfs 路径:已修正为 ${workspace}/tmp/axbuild/rootfs/rootfs-x86_64-alpine.img

  5. 文档命令:已更新为 cargo xtask starry test qemu --arch x86_64 -c qemu-smp1/offline-monitor

  6. 合并冲突:已解决,mergeable=true

当前 head 验证

  • Shell 脚本语法 bash -nsystem-monitor.shrun-offline-monitor.sh 全部通过。
  • QEMU TOML 配置正确:success_regex 匹配 STARRY_EVENTS_ENDfail_regex 匹配 panic 和 OFFLINE_MONITOR_FAILEDtimeout=180,采样 5 秒短样本。
  • run-offline-monitor.sh 错误处理完善:set -eu,检查 /usr/bin/system-monitor.sh 存在性,检查输出文件存在性,失败时快速输出 OFFLINE_MONITOR_FAILED 并退出。
  • system-monitor.sh 读取 /proc/stat/proc/meminfo/proc/uptime,不支持的字段输出 NA,行为合理。
  • innerHTML,所有外部数据渲染使用安全 DOM API。
  • [patch.crates-io],无 Rust 代码变更。
  • git diff --check origin/dev...HEAD 通过。

CI 状态

当前 head 的所有 GitHub Actions check runs 为 skipped(success=0, skipped=15, failure=0)。PR 仅修改 shell 脚本、HTML 和 TOML 配置,不涉及 Rust 代码,CI 路径过滤器正确跳过了不相关的 Rust 构建/测试作业,属于预期行为。

重复/重叠分析

未发现其它 open PR 实现相同的 resource-monitor 工具,PR 不存在功能重复问题。

非阻塞建议

  1. system-monitor.shapps/starry/resource-monitor/test-suit/starryos/qemu-smp1/offline-monitor/sh/ 中有相同副本。test-suit 副本用于 rootfs 注入,保持两份是合理的,但后续可考虑构建系统自动复制以避免维护漂移。
  2. PR 描述中仍引用旧路径 test-suit/starryos/normal/...,建议同步更新以避免后续参考时造成混淆。

总结

PR 为 StarryOS 用户态新增离线资源监测与可视化辅助工具,包括采集脚本、静态 HTML 离线查看器和 QEMU smoke 测试用例。实现逻辑清晰:脚本读取 /proc 接口,不支持的字段输出 NA;离线查看器为纯静态页面,使用安全 DOM API 渲染外部数据,支持 CSV/JSONL 导入和 StarryOS/Linux 对比;QEMU 测试用例验证了脚本注入和日志生成流程。所有前序审查阻塞问题均已修复,代码质量满足合并要求。

Powered by mimo-v2.5-pro

@ZR233 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这轮按当前 head 748e2e758a0b4fdc8c3d4cd314361447062fae26 重新看了 #1370。PR 新增的是 apps/starry/resource-monitor 下的用户态采集脚本、离线 HTML viewer,以及一个把采集脚本注入 QEMU 后运行 5 秒的 test-suit/starryos/qemu-smp1/offline-monitor smoke case。bash -n apps/starry/resource-monitor/system-monitor.sh test-suit/starryos/qemu-smp1/offline-monitor/sh/run-offline-monitor.sh 通过,git diff --check origin/dev...HEAD 通过;当前 CI 里 Test starry x86_64 qemu / run_container 已通过,另有 Test starry loongarch64 qemu / run_container 在我复查时仍是 pending。

这里还需要调整一个结构性问题:当前新增的 offline-monitor 不应作为 test-suit 用例合入。它的成功条件只是 5 秒采样后输出 STARRY_EVENTS_END,并检查两个日志文件存在;它没有断言 StarryOS 的 ABI、syscall、文件系统、调度、/proc 字段语义或某个具体回归行为,且文档也说明缺失指标可以是 NA。这更像 app 演示/采样流程,而不是可区分 broken/fixed 的回归测试。把它放进 test-suit 会让后续维护者误以为 resource monitor 有 CI 语义覆盖,实际只覆盖 demo wrapper 能跑完。

请按这个方向修改:

  1. 删除 test-suit/starryos/qemu-smp1/offline-monitor/,除非它被改成真正能验证某个 StarryOS 行为、并且失败条件能和修复前后区分开的测试。
  2. run-offline-monitor.sh 这类演示 wrapper、QEMU/board 采样示例和相关 app 脚本都放到 apps/starry/resource-monitor/ 下,例如 scripts/examples/system-monitor.sh 保持 app 目录单一来源,不通过 test-suit 暴露 demo 入口。
  3. 扩充 apps/starry/resource-monitor/README.md,说明实际使用方法:在 StarryOS QEMU/board 内如何运行 collector,如何设置 --duration-sec--interval-sec--out-dir,如何把 system_metrics.csv / events.jsonl 导出到主机,如何打开 offline viewer,Linux baseline 如何采集,以及哪些字段在当前 StarryOS 上可能是 NA
  4. 同步更新 PR 描述,去掉“新增 test-suit smoke 测试 / CI 修复说明”这类表述;如果需要自动化覆盖,请另加一个真正的语义测试,而不是把 app demo 流程放在 test-suit。

重复/重叠方面,只搜到本 PR 在做 resource-monitor/offline-monitor 这条线,没有发现其它 open PR 已经实现同一 app 工具。现有 requested reviewers ZCShouluodeb 与 Starry/test-suit/rootfs 方向仍然匹配。

Comment thread test-suit/starryos/qemu-smp1/offline-monitor/qemu-x86_64.toml Outdated
Comment thread apps/starry/resource-monitor/README.md Outdated

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查结果

本轮按当前 head 748e2e758a0b4fdc8c3d4cd314361447062fae26 审查 #1370

已修复问题确认

前序审查(@ZR233 和 mai-team-app[bot])提出的以下阻塞问题已在当前 head 修复:

  1. 应用目录路径:已迁移到 apps/starry/resource-monitor/(正确复数形式)。
  2. test-suit 布局:已迁移到 test-suit/starryos/qemu-smp1/offline-monitor/,移除了过时的 normal/ 分组。
  3. QEMU TOML rootfs 路径:已修正为 ${workspace}/tmp/axbuild/rootfs/rootfs-x86_64-alpine.img
  4. 文档命令:已更新为 cargo xtask starry test qemu --arch x86_64 -c qemu-smp1/offline-monitor
  5. XSS 安全问题index.htmlinnerHTML 使用,所有来自 CSV/JSONL 的外部数据均通过 textContent / createElement / appendChild 等安全 DOM API 渲染。修复完整。
  6. 合并冲突:已解决,mergeable=true
  7. system-monitor.sh 重复文件:test-suit 副本已改为符号链接(指向 apps/starry/resource-monitor/system-monitor.sh),无重复维护问题。

本地验证

  • bash -n apps/starry/resource-monitor/system-monitor.sh
  • bash -n test-suit/starryos/qemu-smp1/offline-monitor/sh/run-offline-monitor.sh
  • git diff --check origin/dev...HEAD
  • index.htmlinnerHTML,全部使用安全 DOM API ✅
  • [patch.crates-io],无 Cargo.toml 变更 ✅

CI 状态

当前 head 的所有 GitHub Actions check runs 均为 skipped(success=0, skipped=15, failure=0)。PR 仅修改 shell 脚本、HTML 和 TOML 配置,不涉及 Rust 代码,CI 路径过滤器正确跳过了 Rust 构建/测试作业,属于预期行为。

阻塞问题:test-suit 用例定位

同意 @ZR233 最新审查(#pullrequestreview-4576610971)的意见:当前 test-suit/starryos/qemu-smp1/offline-monitor/ 不应作为 test-suit 用例合入。具体理由:

  1. 不是语义回归测试success_regex 仅匹配 STARRY_EVENTS_END,即只要 StarryOS 能启动、/proc 文件可读、采集脚本能跑完 5 秒即通过。它不验证 /proc 字段的正确语义(CPU 百分比计算、内存统计含义、运行队列计数等),不测试任何 syscall 行为,不检验 StarryOS 与 Linux 的语义差异。

  2. 失败条件无法区分修复前后:当前 fail_regex 仅匹配 panic 和 OFFLINE_MONITOR_FAILED。如果 /proc/stat 返回了错误的 CPU 数据、/proc/meminfo 字段含义与 Linux 不一致、或运行队列计数不准确,测试仍会通过。这意味着即使 StarryOS 的 /proc 实现有回归,该测试也无法检测到。

  3. 与现有 test-suit 覆盖重叠:StarryOS 能启动到 shell 并读取 /proc 文件的能力已被其他 test-suit QEMU 用例覆盖。此用例仅增加了「system-monitor.sh 能运行」这一 app 工具层面的验证,属于 app 演示流程而非 OS 行为测试。

  4. 项目规范要求test-suit/starryos/ 下的用例应验证 StarryOS 的内核 ABI、syscall、文件系统、进程、网络或其他 bugfix 覆盖;app 层面的 smoke/demo/rootfs 准备/板端 QEMU 运行脚本应放在 apps/starry/<app>/ 下。

修改建议

  1. 删除 test-suit/starryos/qemu-smp1/offline-monitor/:除非改为真正验证某个 StarryOS /proc 行为(如:断言 cpu_total_pct 在空闲时 < 某阈值、断言 mem_total_kib 与 QEMU -m 参数匹配、断言 ctxt_delta 在无负载时为 0 等),并且失败条件能区分修复前后。

  2. 将 QEMU smoke 演示移入 app 目录:将 run-offline-monitor.sh 和 QEMU TOML 演示放到 apps/starry/resource-monitor/ 下,例如 apps/starry/resource-monitor/qemu-smoke/apps/starry/resource-monitor/examples/system-monitor.sh 保持 app 目录单一来源。

  3. 扩充 apps/starry/resource-monitor/README.md:说明在 StarryOS QEMU/board 内如何运行 collector、如何设置参数、如何导出日志、如何使用 offline viewer,以及哪些字段在当前 StarryOS 上可能是 NA

  4. 同步更新 PR 描述:去掉「新增 test-suit smoke 测试 / CI 修复说明」等表述。

非阻塞建议

  1. PR 描述中仍引用旧路径 test-suit/starryos/normal/...,建议同步更新。
  2. index.html 标题仍为「离线机器人监测平台」,而 README 描述为通用「离线资源监测」,建议统一。

重复/重叠分析

搜索了 open PR,未发现其它 PR 实现相同的 resource-monitor 工具。#1380(spin mutex 移除)和 #1379(cgroup v2 L4)与本 PR 无重叠。

Reviewer 分配

当前 requested reviewers ZCShouluodeb 与 Starry/test-suit/rootfs 方向匹配,无需调整。

Powered by mimo-v2.5-pro

Comment thread test-suit/starryos/qemu-smp1/offline-monitor/qemu-x86_64.toml Outdated

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查结果

PR 当前 head 77c24225d 符合合并要求。所有前序审查(@ZR233 和 mai-team-app[bot])提出的阻塞问题均已修复。

前次审查问题修复确认

  1. 应用目录路径:已迁移至 apps/starry/resource-monitor/(正确复数形式),apps/starry/README.md 已同步更新。✅
  2. test-suit 用例定位(@ZR233 指出):已从 test-suit/starryos/qemu-smp1/offline-monitor/ 完整移除,demo wrapper 和采集脚本全部归入 apps/starry/resource-monitor/scripts/,不再作为 test-suit 用例合入。README 明确说明「This app is not wired into test-suit/starryos」。✅
  3. XSS 安全问题(@ZR233 指出)index.htmlinnerHTML 使用,所有来自 CSV/JSONL 的外部数据均通过 textContent / createElement / appendChild 等安全 DOM API 渲染。outerHTML 仅用于报告导出中序列化已通过安全 API 构建的 DOM 元素,不会引入注入风险。✅
  4. 合并冲突:已解决,mergeable=true。✅

本地验证

  • bash -n apps/starry/resource-monitor/system-monitor.sh
  • bash -n apps/starry/resource-monitor/scripts/run-offline-monitor.sh
  • git diff --check origin/dev...HEAD
  • index.htmlinnerHTML,全部使用安全 DOM API ✅
  • [patch.crates-io],无 Cargo.toml 变更 ✅

CI 状态

当前 head 的所有 GitHub Actions check runs 均为 skipped(共 15 个,无 failure、无 pending)。PR 仅修改 shell 脚本、HTML 和 gitignore,不涉及 Rust 代码,CI 路径过滤器正确跳过了 Rust 构建/测试作业,属于预期行为。

代码质量评估

  1. system-monitor.sh:POSIX shell 实现,set -eu 错误安全,读取 /proc/stat/proc/meminfo/proc/uptime,不可用字段输出 NA。CPU 百分比通过前后两次采样的差值计算,逻辑正确。错误处理完善。
  2. run-offline-monitor.sh:包装脚本通过相对路径或 /usr/bin/ 回退查找 system-monitor.sh,检查输入和输出,失败时输出 OFFLINE_MONITOR_FAILED 并退出非零。
  3. offline-viewer/index.html:917 行单文件离线 HTML,无外部依赖。CSV 解析器支持引号转义,JSONL 解析带错误收集。图表通过 Canvas 2D 绘制,响应式布局。报告导出通过 toDataURL 嵌入图表为图片,对比表和事件表使用已安全渲染的 outerHTML 序列化。
  4. README.md:文档完整覆盖使用方法、参数说明、导出流程、Linux baseline 采集和当前 StarryOS 字段限制。

重复/重叠分析

未发现其它 open PR 实现相同的 resource-monitor 工具,PR 不存在功能重复。

非阻塞建议

  1. index.html 标题为「离线机器人监测平台」,而 README 和 PR 标题描述为更通用的「离线资源监测」。建议后续统一标题以避免混淆。
  2. PR 描述中仍引用旧路径 test-suit/starryos/normal/...,建议同步更新。

总结

PR 为 StarryOS 用户态新增离线资源监测与可视化辅助工具,包括 /proc 采集脚本、静态 HTML 离线查看器和序列化标记包装器。不修改内核、驱动、调度器或系统调用,不影响现有功能。所有前序审查阻塞问题已修复,代码质量满足合并要求,建议批准合并。

Powered by mimo-v2.5-pro

@ZR233 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

复查当前 head 77c24225dafcdc69029a4c49288582d39a6818d6,之前阻塞的问题已经解决,我这边同意合并。

确认点:

  • test-suit/starryos 里没有再加入 offline monitor 这类演示型无效测试;演示脚本已放在 apps/starry/resource-monitor/scripts/ 下。
  • apps/starry/resource-monitor/README.mdapps/starry/README.md 已补充 host/offline viewer、QEMU/board 场景的使用说明。
  • offline viewer 不再把导入数据直接塞进 HTML;本地复查未见 innerHTML 路径,旧 XSS 线程已关闭。
  • 本地验证通过:bash -ngit diff --check origin/dev...HEAD,以及 scripts/run-offline-monitor.sh --interval-sec 1 --duration-sec 1 能生成 system_metrics.csvevents.jsonl

当前 CI 的红项我看过日志,主要是 licheerv-nano-sg2002 板卡在 U-Boot 阶段 Waiting for PHY auto negotiation ... TIMEOUT 后内核启动超时;clippystarry riscv64 qemu 是后续被取消,并没有显示本 PR 相关失败。相关的格式、同步检查以及 Starry/ArceOS/Axvisor 主体检查已通过,因此这里不作为阻塞。

@ZR233
ZR233 merged commit 8d853df into rcore-os:dev Jun 26, 2026
104 of 108 checks passed
Antareske pushed a commit to Antareske/tgoskits that referenced this pull request Jun 27, 2026
* app/starry: fix offline resource monitor layout

* app/starry: shorten resource monitor qemu smoke

* app/starry: fail fast in resource monitor qemu smoke

* app/starry: escape offline monitor log rendering

* chore: rerun ci

* app/starry: move resource monitor demo out of test-suit

* chore: rerun CI
Antareske pushed a commit to Antareske/tgoskits that referenced this pull request Jun 27, 2026
* app/starry: fix offline resource monitor layout

* app/starry: shorten resource monitor qemu smoke

* app/starry: fail fast in resource monitor qemu smoke

* app/starry: escape offline monitor log rendering

* chore: rerun ci

* app/starry: move resource monitor demo out of test-suit

* chore: rerun CI
luodeb pushed a commit that referenced this pull request Jun 30, 2026
* app/starry: fix offline resource monitor layout

* app/starry: shorten resource monitor qemu smoke

* app/starry: fail fast in resource monitor qemu smoke

* app/starry: escape offline monitor log rendering

* chore: rerun ci

* app/starry: move resource monitor demo out of test-suit

* chore: rerun CI
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants