Skip to content

dsh-remote v0.8.26 — 插件主页 + 实时用量看板(GitHub Pages);修掉会污染统计的两处缺陷

Choose a tag to compare

@flymysql flymysql released this 30 Sep 07:00
· 206 commits to main since this release

插件主页 + 实时用量看板(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(避免空提交噪声)。

顺手修掉两个会污染统计的真缺陷(都是端到端验证时发现的):

  1. 测试会往生产统计灌数据:upload.test.js 调用真实 apply(),而 apply() 里有
    void sendHeartbeat(...) ⇒ 跑一次 npm test 就在线上日活表写下假装机
    (实测表现为"一台只跑过 Windows 的机器冒出两个 Linux 装机")。现在端点可用
    DSH_REMOTE_HEARTBEAT_URL 覆盖(仅接受 https),并由 test/setup-telemetry-off.mjs
    通过 --import 在任何业务代码加载前重定向整个测试进程;另加一条断言,
    一旦 URL 指回生产就失败。
  2. 延迟发送可能永远发不出去:启动延迟定时器被 unref(),而 await 一个已 unref 的
    定时器不会让事件循环保活 ⇒ 进程若无其他 pending 句柄会直接退出,心跳一次都发不出
    (CI 每轮必现,本地因其它测试占着句柄而侥幸变绿)。延迟的目的是让发送成功,就必须留住进程。

看板刻意"暴露"而不是隐藏的数据质量问题:

  • npm 的零值日画成灰色并标注为上报缺口(对照包零值日完全一致 ⇒ 管线缺口,非真实零使用);

  • 今天的柱压暗表示"未完整",且 DAU 卡片显示的是最近一个完整日,避免把半天读成暴跌;

  • 页面明确写出版本覆盖偏差(只有升级到含心跳版本的安装会上报 ⇒ 这些数字是下限,不是全部用户)。

  • 测试:npm test 236/236;node check.mjs 通过。


安装:npm install dsh-remote@0.8.26 · npm 页面 · 完整变更记录