Repository navigation
dsh-remote v0.8.26 — 插件主页 + 实时用量看板(GitHub Pages);修掉会污染统计的两处缺陷
插件主页 + 实时用量看板(GitHub Pages);修掉会污染统计的两处缺陷
站点上线:插件主页 · 实时用量看板。同时修掉了"跑一次 npm test 就往生产统计灌假装机"的问题。
升级方式
# npm 用户(推荐)
dsh plugin --profile web add dsh-remote@latest
# 或在设置页 → 更新 处点击「立即更新」
# 若 updateMode=auto(0.8.27 起默认),会自动更新正常升级即可。
本版变更
插件主页 + 实时用量看板(GitHub Pages);修掉会污染统计的两处缺陷
Pages 站点(https://flymysql.github.io/dsh-remote/,源目录切到 /docs):
docs/index.html插件主页:hero + 实时计数(版本 / 周下载 / star / 日活)、能力卡片、
20 个rw_*工具面、界面截图、安装块(含"0.8.24 之前首次升级需重启一次"的提示)、
以及遥测与隐私表格。docs/stats/index.html用量看板:DAU / WAU / MAU / 累计装机 KPI、逐日日活柱图、
npm 下载对照图、版本与平台分布。- 图表是手写 SVG:本仓库刻意零构建,为了一个看板引入图表库不划算。
架构上的硬约束(决定了不能"前端直连云端"):
- GitHub Pages 是完全公开静态站 ⇒ 统计口令绝不能进前端;
- CloudBase 的 HTTP 访问服务不返回 CORS 头,浏览器本来也直连不了
/stats。 - 因此由
scripts/snapshot-stats.mjs在 CI 里拉数据(口令放 GitHub Secrets),
写成同源的docs/data/{stats,history}.json给页面读;.github/workflows/pages-data.yml
每 6 小时刷新一次,且只在数据真的变化时才 commit(避免空提交噪声)。
顺手修掉两个会污染统计的真缺陷(都是端到端验证时发现的):
- 测试会往生产统计灌数据:
upload.test.js调用真实apply(),而apply()里有
void sendHeartbeat(...)⇒ 跑一次npm test就在线上日活表写下假装机
(实测表现为"一台只跑过 Windows 的机器冒出两个 Linux 装机")。现在端点可用
DSH_REMOTE_HEARTBEAT_URL覆盖(仅接受 https),并由test/setup-telemetry-off.mjs
通过--import在任何业务代码加载前重定向整个测试进程;另加一条断言,
一旦 URL 指回生产就失败。 - 延迟发送可能永远发不出去:启动延迟定时器被
unref(),而 await 一个已 unref 的
定时器不会让事件循环保活 ⇒ 进程若无其他 pending 句柄会直接退出,心跳一次都发不出
(CI 每轮必现,本地因其它测试占着句柄而侥幸变绿)。延迟的目的是让发送成功,就必须留住进程。
看板刻意"暴露"而不是隐藏的数据质量问题:
-
npm 的零值日画成灰色并标注为上报缺口(对照包零值日完全一致 ⇒ 管线缺口,非真实零使用);
-
今天的柱压暗表示"未完整",且 DAU 卡片显示的是最近一个完整日,避免把半天读成暴跌;
-
页面明确写出版本覆盖偏差(只有升级到含心跳版本的安装会上报 ⇒ 这些数字是下限,不是全部用户)。
-
测试:
npm test236/236;node check.mjs通过。