feat(serve): --demo 用内置示例数据启动看板 - #32
Merged
Merged
Conversation
看板只从真实的配置与守护进程状态文件取数据,于是"先看一眼前端长什么样"这件事以前只有 两条路:对着真基础设施跑,或者手搓一份状态文件。后者会随 payload 契约漂移而悄悄失真, 而它长得和真数据一模一样——最容易被当成真的。 --demo 把它收进产品:不读配置、不碰守护进程,用一份内置的确定性时间轴驱动同一个 HTTP 服务。三个 profile 覆盖看板会渲染的每一种状态——web 健康→断线→退避→重连;db 连上了但 服务器那一侧端口没监听(**确定失败**,而在线率并不低:这两列本就不是一回事);metrics 探针得不出结论(端口显示"未观测"而不是"未监听",即 #25 的语义)。 时间轴是"现在 − 启动时刻"算出来的纯函数,不是后台定时器线程:同一时刻永远是同一份 payload(测试因此能钉住时刻,而不是靠 sleep 去等一个事件发生),看板的 5 秒轮询自己 提供采样。周期互质(180/120/210 秒),所以三条隧道的状态变化会错开出现。 数据在三处自证是演示:payload 的 demo 标记(/status.json 一样)、页头的"演示数据"徽记 与页脚说明、命令行的一行黄字。一张看板截图里写着服务器地址与端口,它不该被误读成某个人 的真实基础设施——示例主机名一律 example.com。绑定校验照旧:非回环 --host 仍要求令牌。 顺带修掉一处自相矛盾:启动后的第一个周期里还没断过线时,"上次断线"会回头去取上一轮, 于是页面写得出"已运行 1 分 20 秒"+"上次断线 2 分钟前"——一条比进程本身还老的故障记录。 这条是看着运行中的看板发现的,现在钉进了测试:沿全时间轴扫描,任何记录都必须落在 [启动时刻, 现在] 之间。 --------- Co-authored-by: Codebuff <noreply@codebuff.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
看板只从真实的配置与守护进程状态文件取数据。于是"先看一眼前端长什么样"这件事以前只有
两条路:对着真基础设施跑,或者手搓一份状态文件。后者会随 payload 契约漂移而悄悄失真,而它
长得和真数据一模一样——最容易被当成真的。
这个 PR 把演示数据收进产品:
ponte serve --demo不读配置、不碰守护进程,用一份内置的确定性时间轴驱动同一个 HTTP 服务。
时间轴:为什么是纯函数而不是定时器线程
数据是"现在 − 启动时刻"算出来的,所以页面每次轮询都会取到一个新的、自洽的状态,而同一
时刻永远是同一份 payload。这带来两个具体好处:
tests/test_demo.py里没有一处sleep;接口(
/status.json从不缓存),采样由它自己提供。三个 profile 覆盖看板会渲染的每一种状态,周期互质(180/120/210 秒)所以变化会错开:
webdbmetricsdb那条是专门放的:它让"健康是确定失败"和"可用率不高"同时成立,而这两列本来就不是一回事;metrics那条让未观测与未监听在页面上真的能被区分开。数据在三处自证是演示
一张看板截图里写着服务器地址与端口,它不该被误读成某个人的真实基础设施:
/status.json与/metrics的 payload:"demo": true;演示数据徽记 + 页脚说明(标在 payload 上而不是服务端开关上,所以原地刷新不会把它刷没);
示例主机名一律
example.com。绑定校验照旧:非回环--host仍然要求令牌,演示数据一样是一张内网拓扑图。
顺带修掉一处自相矛盾(看着运行中的看板发现的)
启动后的第一个周期里还没断过线时,"上次断线"会回头去取上一轮——而那一轮根本没发生过。于是
页面写出 "已运行 0h 1m 20s" + "上次断线 0h 2m 0s前":一条比进程本身还老的故障记录。
现在启动后的第一个周期内没断过线就是没断过(显示为空)。这条钉进了测试:沿全时间轴扫描,
任何记录(事件流、上次断线、会话起点、上次通知)都必须落在
[启动时刻, 现在]之间。反向对照跑过:把修复改回旧写法,新测试红,报的正是
assert 999960.0 is None。验证
pytest432 passed(tests/test_demo.py新增 12 条),覆盖率 87%+;ruff/mypy(本机与--platform linux)/_smoke_test.py全绿;ponte.main._status_payload的真实输出来比键集合,而不是抄一份清单自己维护——这份数据是手写的,契约以后长出新字段时它会悄悄落后,而它看起来完全一样;
边界,说清楚
流),不是真的在连
example.com;想连真隧道请用真实配置跑ponte serve;provider()可调用对象,--demo只是换了一个 provider。