工坊统计服务(Phase A
August 14, 2026 · View on GitHub
零服务器是工坊的默认形态;本目录是可选的远程统计服务参考实现(Cloudflare Worker + D1,免费额度足够),部署后工坊自动解锁:
- 卡片上的 ↓ 装机 N · 近7天 +M 社区装机徽章
/trending真·飙升榜(按实际安装净增长,而非 stars/创建时间近似)
不部署 = 完全无影响:宿主侧仅在 DSH_WORKSHOP_STATS_URL 环境变量存在时才上报,客户端拉取失败静默降级。
隐私
- 只上报
full_name+ 事件类型(install/update/uninstall)+ 匿名安装 ID(每台机器一个随机 UUID,存于 profile 目录); - 无用户身份、无路径、无 IP 持久化。匿名 ID 仅用于防刷参考,不跨服务关联。
API
| 端点 | 说明 |
|---|---|
POST /events | { full_name, event, install_id },记录事件并更新计数器 |
GET /stats?repos=a/b,c/d | 每仓库 totals + installs7d / net7d |
GET /trending?days=7&limit=20 | 按窗口内净增长排序 |
部署(Cloudflare)
cd remote/worker
# 1. 创建 D1 数据库并记录 database_id
wrangler d1 create dsh-workshop-stats
# 2. 把 database_id 填进 wrangler.toml 的 REPLACE_WITH_YOUR_D1_DATABASE_ID
# 3. 建表
wrangler d1 execute dsh-workshop-stats --remote --file=schema.sql
# 4. 部署
wrangler deploy
# → 得到 https://dsh-workshop-stats.<你的子域>.workers.dev
接入工坊
给 dsh web 进程设置环境变量(例):
set DSH_WORKSHOP_STATS_URL=https://dsh-workshop-stats.<你的子域>.workers.dev
重启 dsh web 后:/dsh-plugin-workshop/api/status 返回 statsUrl,客户端开始显示装机徽章并上报事件。
本地验证
node remote/test/harness.mjs
用内存 Mock D1 跑通事件上报、stats 查询、trending 排序与参数校验。
后续(Phase B 起)
- 评分/评论(需要更强的身份与防滥用设计)
- 更新徽章(服务端镜像最新版本,替代逐仓库 API 调用)
- 服务端全文/中文搜索索引