LangPulse
收藏数据集名称
LangPulse
核心数据内容
LangPulse 每日发布一个 UTC 日快照,统计过去30天内活跃的公共 GitHub 仓库数量,并按编程语言和星标数量阈值进行细分。
数据衡量标准
对于每个 UTC 日期 D、每种活跃语言 L 和每个活跃星标阈值 T,数据集存储一个整数,该整数对应于以下 GitHub 仓库搜索查询的返回结果:
language:"<L>" is:public pushed:>=D-29 stars:>=T
具体说明:
- 时间窗口:始终为30天,包含观察日期 (
D-29 .. D)。 - 活跃定义:
pushed:>=反映任何分支上的任何推送活动,是“仓库近期有人类活动”的代理指标,而非直接的质量信号。 - 星标阈值:
threshold = 0会完全去掉stars:限定符,因此计算该语言中所有最近推送过的公共仓库。 - 语言分类:使用 GitHub 自身的 Linguist 分类,而非文件扩展名。
- 查询拼写:
config/metrics.json中的github_query_fragment是每种语言查询拼写的权威来源。同一语言的不同拼写需要两个不同的language.id。
数据集架构
┌──────────────┐ HTTP + Bearer ┌────────────────────┐ │ collector/ │ ───────────────────────▶│ worker/ (CF) │ │ Go, daily │ /internal/quality-* │ D1: runs, rows, │ │ via Actions │ │ publications │ └──────┬───────┘ └─────────┬──────────┘ │ GitHub Search API │ same-origin ▼ ▼ ┌──────────────┐ ┌────────────────────┐ │ GitHub │ │ web/ (React) │ │ │ │ static assets │ └──────────────┘ └────────────────────┘
- 收集器 (collector/):Go 语言编写,通过 GitHub Actions 每日在
00:15 UTC运行。它在共享速率限制器下并行查询 GitHub Search,并将整个结果集以原子批次提交给 Worker 的内部摄取端点。 - 工作者 (worker/):单个 Cloudflare Worker,提供公共 API 和静态前端。
- 前端 (web/):React 19 + @tanstack/react-query 仪表盘。
数据模型
数据存储在 Cloudflare D1 中,包含三张表(完整架构见 migrations/0001_init.sql):
quality_30d_runs:每一次采集尝试,包含状态 (running, failed, expired, complete)、租约记账以及(observed_date, attempt_no)唯一约束。quality_30d_run_rows:每个(run_id, language_id, threshold_value)对应一个整数值。quality_30d_publications:从observed_date到成功run_id的不可变指针。公共读取始终通过此表连接,因此失败或过期的尝试对外不可见,但保留用于审计。
公共 API
所有端点通过已部署的 Worker 同源提供。响应格式为 JSON,日期为 UTC YYYY-MM-DD。
| 方法 | 路径 | 用途 |
|---|---|---|
GET |
/api/health |
检测 D1 连接,按客户端 IP 限速。 |
GET |
/api/metadata |
注册表投影:活跃语言、阈值、启动日期、窗口天数。 |
GET |
/api/quality/latest |
返回 { observed_date } 最近发布快照的日期,或 null。 |
GET |
/api/quality/snapshot?date=YYYY-MM-DD&threshold=N |
返回指定日期+阈值的语言排名计数,以及上一个发布日期的计数,用于前端展示变化。 |
GET |
/api/quality/compare?languages=a,b,c&threshold=N&from=...&to=... |
返回少量语言在指定日期范围内的时间序列计数。 |




