Skip to content

test(starry): add monitoring-stack carpet (apps/starry/monitor) - #1501

Merged
ZR233 merged 1 commit into
rcore-os:devfrom
Lfan-ke:test-monitor-app
Jul 7, 2026
Merged

test(starry): add monitoring-stack carpet (apps/starry/monitor)#1501
ZR233 merged 1 commit into
rcore-os:devfrom
Lfan-ke:test-monitor-app

Conversation

@Lfan-ke

@Lfan-ke Lfan-ke commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

新增 apps/starry/monitor - 在 StarryOS 上对 Prometheus 监控栈 + Grafana + glances 系统监控器做 on-target 地毯级测试,x86_64 / aarch64 / riscv64 / loongarch64 四架构单核 qemu-10 真跑 8/8 通过(每架构 MONITOR_OK=8/8 + TEST PASSED),纯新增不改动已有代码。

运行:cargo xtask starry app qemu -t monitor --arch <arch>

8 个 carpet(run_monitor.py 逐个隔离子进程运行,全过才打 TEST PASSED)

  • prometheus - prometheus/promtool 3.11.3 版本红线 + --help 全树 + config 校验 + PromQL 引擎 + tsdb 功能腿(create-blocks-from 造块经 tsdb list 验证 + analyze 读块,全在 /root ext4 磁盘)。
  • node_exporter - 1.11.1,启用 cpu/meminfo/loadavg collector,暴露 53 个 node_* 指标。
  • grafana - 13.0.1 单个纯静态 CGO-free Go 二进制,headless 起 server + /api/health 断言(SQLite backend + 迁移)。
  • glances - cli / headless / tui / client-server / web 五种形态,TUI 经 pyte-over-PTY 内容驱动捕获断言。

孤立测 + 集成测

孤立测(各组件单独 carpet)是前置,之上叠加端到端集成测:prometheus 配 scrape node_exporter,先断言 up{job="node"}==1,再经 180s soak 后断言 node_cpu_seconds_total + node_memory_MemTotal_bytes 已以数值样本入 TSDB、query_range 时窗内返回多点,证明 scrape 到 store 到 query 全链路在四架构正确。

交付中根因并处理的三点

  • promtool 3.11.3 的 tsdb create-blocks-from 不把块表打到 stdout(块已落盘)- carpet 改经 tsdb list 输出验证。
  • StarryOS tmpfs 的 mmap read-back 返回零页,analyze 经 mmap 读块 meta/index 会得 \x00 - 故 TSDB 与临时目录落 /root ext4 磁盘(也是生产正确做法)。该 tmpfs mmap 缺陷单列内核跟进。
  • node_exporter 默认启动只开 uname collector - 启用 cpu/meminfo/loadavg 后 StarryOS /proc/stat·/proc/meminfo·/proc/loadavg 正常喂 collector。

@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.

需要继续修改后再合并。当前 runner 的通过锚点和 qemu success_regex 不一致,会导致 app 实际全通过后仍被 harness 判失败。

Comment thread apps/starry/monitor/qemu-x86_64.toml Outdated
@Lfan-ke Lfan-ke closed this Jul 6, 2026
@Lfan-ke Lfan-ke reopened this Jul 7, 2026

@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.

审查结论:REQUEST_CHANGES

本次审查确认 @ZR233 在上次 review 中指出的 MONITOR_OK=7/7 vs 8/8 不一致问题仍未修复(head SHA 未变)。四个 qemu 配置文件和全部文档(README.md、APPLY.md)仍写 7/7,而 run_monitor.pyCARPETS 列表有 8 项,实际输出 MONITOR_OK=8/8。这意味着即便所有 8 个 carpet 通过,xtask 的 success_regex 也无法匹配,harness 会判失败。

PR 概述

PR #1501 新增 apps/starry/monitor——在 StarryOS 四架构(x86_64 / aarch64 / riscv64 / loongarch64)单核 QEMU 上对 Prometheus 监控栈(prometheus 3.11.3 + promtool + node_exporter 1.11.1)+ Grafana 13.0.1 + glances 4.4.1 做地毯级测试。8 个 carpet(prometheus、node_exporter、grafana、glances 五种形态)逐个子进程隔离运行,端到端集成测(prometheus scrape node_exporter → 180s soak → PromQL query_range)覆盖 scrape→store→query 全链路。纯新增文件,不改动已有代码。

CI 状态

CI workflow run #28840501888 整体 conclusion: success。实际运行的 job 包括:Check formatting ✓、Run sync-lint ✓、Run spin-lint ✓、Test starry riscv64/loongarch64 qemu ✓、Test arceos qemu ✓、board tests ✓、axvisor tests ✓。这些是标准 Rust/workflow 检查,因为 PR 无 Rust 代码变更所以全部通过。

注意:CI 的 "Detect changed paths" 步骤不触发 cargo xtask starry app qemu -t monitor,即 monitor 应用的 QEMU 实际运行未被 CI 覆盖。这是路径过滤的预期行为,但也意味着 success_regex 不匹配的问题无法由 CI 发现。

阻断问题

1. success_regex 与 runner 输出不一致(阻塞)

run_monitor.py 第 26-35 行定义了 8 个 carpet(glances-cli、glances-headless、node_exporter、grafana、glances-cs、glances-web、prometheus、glances-tui),实际输出 MONITOR_OK=8/8。但四个 qemu 配置文件均使用 success_regex = ['(?m)^MONITOR_OK=7/7', ...]

  • qemu-x86_64.toml 第 16 行
  • qemu-aarch64.toml 第 14 行
  • qemu-riscv64.toml 第 13 行
  • qemu-loongarch64.toml 第 17 行

同时,文档中多处仍有 7/7

  • README.md 第 9 行、第 79 行
  • APPLY.md 第 25 行、第 45 行、第 68 行

修复方向:将所有 MONITOR_OK=7/7 改为 MONITOR_OK=8/8,或如果认为 node_exporter 不应单独计数,将 CARPETS 缩减为 7 项并更新文档。推荐前者(8/8),因为 node_exporter 作为一个独立的端到端验证目标(真正从 StarryOS /proc 读数据并被 prometheus scrape)值得单独计数。

重复/重叠分析

  • 同作者 @Lfan-ke 的 PR #1506(consul-etcd app)是另一个独立的 StarryOS app 添加,不同目录、不同组件,属于互补关系,不冲突。
  • dev 分支当前无等效的 monitor 测试覆盖。
  • 未发现其他重复或冲突的开放 PR。

其他观察(非阻塞)

  • prebuild.sh(344 行)和 assets/build-loong-binaries.sh(92 行)整体结构清晰,有 set -euo pipefail 保护,trap 清理临时目录,sha256 校验到位。
  • Python carpet 文件(PrometheusCarpet.pyGrafanaCarpet.pyGlancesTuiCarpet.py 等)结构一致,有守护进程生命周期管理、超时控制、HTTP 断言和输出验证。
  • GlancesTuiCarpet.py + pty_tui_drive.py + pyte_assert.py 的 PTY/pyte 方法学设计合理,对 SS3 应用键模式的正确处理是亮点。
  • 文档(APPLY.md、README.md、SOURCES.md、MANIFEST.md)详尽记录了 provenance、运行方式、已知限制和架构差异,质量很高。

Powered by deepseek-v4-pro

Comment thread apps/starry/monitor/qemu-x86_64.toml Outdated
to_bin = false
shell_prefix = "root@starry:"
shell_init_cmd = "sh /usr/bin/run-monitor.sh"
success_regex = ['(?m)^MONITOR_OK=7/7', '(?m)^TEST PASSED\s*$']

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.

run_monitor.pyCARPETS 有 8 项,实际输出 MONITOR_OK=8/8。此处 success_regex 使用 MONITOR_OK=7/7 会导致 xtask harness 无法匹配通过标志。请改为 MONITOR_OK=8/8

Comment thread apps/starry/monitor/qemu-aarch64.toml Outdated
to_bin = true
shell_prefix = "root@starry:"
shell_init_cmd = "sh /usr/bin/run-monitor.sh"
success_regex = ['(?m)^MONITOR_OK=7/7', '(?m)^TEST PASSED\s*$']

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.

同上:run_monitor.py 输出 MONITOR_OK=8/8,不是 7/7

Comment thread apps/starry/monitor/qemu-riscv64.toml Outdated
to_bin = true
shell_prefix = "root@starry:"
shell_init_cmd = "sh /usr/bin/run-monitor.sh"
success_regex = ['(?m)^MONITOR_OK=7/7', '(?m)^TEST PASSED\s*$']

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.

同上:run_monitor.py 输出 MONITOR_OK=8/8,不是 7/7

to_bin = true
shell_prefix = "root@starry:"
shell_init_cmd = "sh /usr/bin/run-monitor.sh"
success_regex = ['(?m)^MONITOR_OK=7/7', '(?m)^TEST PASSED\s*$']

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.

同上:run_monitor.py 输出 MONITOR_OK=8/8,不是 7/7

Comment thread apps/starry/monitor/README.md Outdated
- **Grafana**(观测/可视化 web 应用,13.0.1;单个 CGO-free 纯静态 Go 二进制 + 内嵌前端 SPA + 内嵌 SQLite) - headless 起 server + HTTP 断言(无浏览器、无 TUI)。
- **glances**(基于 psutil 的 Python 系统监控器,4.4.1)的全部五种运行形态:CLI / headless / **TUI(pyte 真实断言)** / client-server / web。

单次启动运行 7 个子 carpet,全过才由 `run_monitor.py` 输出唯一门控锚点 `MONITOR_OK=7/7` + `TEST PASSED`。

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.

文档仍写 7 个子 carpetMONITOR_OK=7/7,应同步改为 8。

Comment thread apps/starry/monitor/APPLY.md Outdated
│ ├── pty_tui_drive.py # PTY 驱动器(SS3 应用键模式)
│ └── pyte_assert.py # pyte 屏幕重建 + 三重不变量断言
└── python/
├── run_monitor.py # 编排器 + 唯一门控锚点(MONITOR_OK=7/7 + TEST PASSED)

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.

文档仍写 MONITOR_OK=7/7,应同步改为 8/8。同样第 45 行和第 68 行也需要更新。

@mai-team-app
mai-team-app Bot requested a review from ZR233 July 7, 2026 04:43
on-target carpet for the Prometheus stack (prometheus/promtool/node_exporter), Grafana and glances (cli/headless/tui-pyte/client-server/web) across the four single-core qemu arches; run_monitor.py gates on MONITOR_OK=N/N + TEST PASSED.

Signed-off-by: 林晨 (Leo Cheng) <chengkelfan@qq.com>
Signed-off-by: 林晨 <chengkelfan@qq.com>
@Lfan-ke
Lfan-ke force-pushed the test-monitor-app branch from b8ff56a to 5ec29d3 Compare July 7, 2026 05:49

@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.

审查结论:APPROVE

PR #1501 新增 apps/starry/monitor——在 StarryOS 四架构(x86_64 / aarch64 / riscv64 / loongarch64)单核 QEMU 上对 Prometheus 监控栈(prometheus 3.11.3 + promtool + node_exporter 1.11.1)+ Grafana 13.0.1 + glances 4.4.1 做地毯级测试。8 个 carpet 逐个子进程隔离运行,端到端集成测(prometheus scrape node_exporter → 180s soak → PromQL query_range)覆盖 scrape→store→query 全链路。纯新增文件,不改动已有代码。

上次审查阻断问题的处理

@ZR233 和 mai-team-app[bot] 在上次 review(commit b8ff56a)中指出的 MONITOR_OK=7/7 vs 8/8 不一致问题已完全修复

  • ✅ 四个 qemu 配置文件(qemu-x86_64.tomlqemu-aarch64.tomlqemu-riscv64.tomlqemu-loongarch64.toml)全部改为 success_regex = ['(?m)^MONITOR_OK=8/8', '(?m)^TEST PASSED\s*$'],与 run_monitor.py 的 8 项 CARPETS 一致。
  • ✅ 四份 qemu 配置新增了 fail_regex = ['(?i)\bpanic(?:ked)?\b', '(?m)^TEST FAILED\s*$'],增强失败检测。
  • README.md 第 9 行已改为「8 个子 carpet」和 MONITOR_OK=8/8
  • APPLY.md 第 25、45、68 行已全部同步为 8/8

CI 状态

当前 head SHA 5ec29d32 的 CI workflow run #28844679426:

  • Detect changed paths:✅ success
  • Cancel stale CI runs:✅ success
  • Publish base container imagePublish axvisor-lvz container imagematrix.name(×2):⏭️ skipped(路径过滤预期行为,PR 无 Docker/镜像变更)

CI 的路径过滤不触发 cargo xtask starry app qemu -t monitor,这是预期行为——monitor 应用需要下载大型二进制和 QEMU 实跑,不在标准 CI 矩阵中。

本地验证

  • bash -n prebuild.shbuild-loong-binaries.shrun-monitor.sh 语法全部通过
  • cargo fmt --check 无变更(PR 无 Rust 代码改动)
  • ✅ QEMU 运行时验证受限于容器环境(无 QEMU、无 rootfs 镜像、无预编译二进制),但作者已在四架构上自测通过(MONITOR_OK=8/8 + TEST PASSED

代码质量

  • prebuild.sh(344 行)结构清晰,set -euo pipefail 保护,sha256 逐档校验,trap 清理临时目录,grow_rootfs 只增不减。
  • build-loong-binaries.sh(92 行)正确从 pinned tag 交叉编译 loong64 二进制,有 CGO_ENABLED=0 确保纯静态。
  • Python carpet 文件(PrometheusCarpet.py 495 行、GrafanaCarpet.py 282 行、GlancesTuiCarpet.py 242 行等)结构一致,守护进程生命周期管理、超时控制、HTTP 断言、输出验证均到位。
  • GlancesTuiCarpet.py + pty_tui_drive.py + pyte_assert.py 的 PTY/pyte 方法学设计合理,SS3 应用键模式正确处理,内容驱动捕获跨架构时序鲁棒。
  • 四份 build 配置文件特征声明完整,loongarch64 的 dynamic 平台要求有清晰注释。
  • 文档(APPLY.md、README.md、SOURCES.md、MANIFEST.md)详尽记录了 provenance、运行方式、已知限制和架构差异,质量很高。

重复/重叠分析

  • dev 分支当前无等效的 monitor 测试覆盖。
  • 唯一搜索匹配是 PR #1501 自身,无其他开放 PR 涉及 apps/starry/monitor 路径或 monitor/prometheus/grafana/glances 主题。
  • 同作者 @Lfan-ke 的 PR #1506(consul-etcd app)是另一个独立的 StarryOS app 添加,不同目录、不同组件,属于互补关系,不冲突。

非阻塞观察

  • PR body 中「据实不足」部分的描述(/proc/diskstats 可能不存在、node_exporter 仅启用三 collector)与当前 README 不符——README 已更新为三左侧栏区块硬断言 + node_exporter 启用 6 collector。建议后续更新 PR body 以保持一致,但不影响合并。

Powered by deepseek-v4-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 5ec29d3209c8d07893f39e3162130abc291c0352,同意合入。

上一轮阻塞的成功锚点不一致问题已修复:run_monitor.py 的 8 个 carpet 与四个 qemu 配置、README/APPLY 中的 MONITOR_OK=8/8 保持一致,且 TEST PASSED 只由 runner 在全部子 carpet 通过后输出,不会被 shell 命令回显误匹配。

本地检查:git diff --check origin/dev...HEAD 通过,git merge-tree --write-tree origin/dev HEAD 干净;bash -n 覆盖 prebuild.shrun-monitor.sh、loong64 构建脚本,python3 -m py_compile 覆盖 app 内 Python harness。当前 PR body 记录四架构 app 运行均到 MONITOR_OK=8/8 + TEST PASSED;GitHub checks 里只有 path-filter 前置项成功、app 矩阵 skipped,符合纯 apps/starry/monitor 新增的现状。

@ZR233
ZR233 merged commit a6573e7 into rcore-os:dev Jul 7, 2026
6 checks passed
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