pace

module
v0.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 4, 2026 License: MIT

README

pace

给代理、校园内网、CERNET 测速的命令行工具——多视角、不打分、诚实数据。

CI Go Reference Release

pace 不把不同线路压成一个"网络分数",而是按顺序回答几个清楚的 问题:南大校园网或校园 VPN 是否通、公网出口表现如何、负载下网络是否 仍有响应,以及附近的运营商侧参考服务器表现如何。支持 macOS、Linux 和 Windows,Go 编写,终端界面基于 Bubble Tea 内联渲染。

为什么是 pace

  • 多视角,不打分:每个目标独立回答一个问题;不同目标的结果永远 不会被替换、排名或折算成综合分数。
  • 教育网优先:NJU 校园网是产品主线,同济等教育网站点是可选参考 方向,M-Lab 提供公网出口视角。
  • 诚实失败:失败记录零速率和稳定的失败阶段;取消后未开始的目标记 skipped 与 null 速率。失败不伪装成成功。
  • JSON 自动化:全局 --json 输出单个无 ANSI 文档,退出码稳定, 历史可导出 JSONL/CSV。
  • 隐私 fail-closed:M-Lab 测试要求显式接受其隐私政策,无同意记录 时非交互命令直接失败;pace 自身无遥测、无 ASN/地理定位。

终端演示

$ pace run --targets nju-campus,mlab,apple --family ipv4

pace v0.4.0 · success · 34.2s
Run 8f3c1a2b
Network en0 · wifi · NJU-WLAN
TARGET                METHOD                   DOWNLOAD     UPLOAD      SERVER                       STATUS
NJU Campus IPv4       librespeed-three-stream  812.44 Mbps  93.10 Mbps  speed.nju.edu.cn             success
M-Lab NDT7            ndt7-single-stream       203.52 Mbps  41.87 Mbps  ndt-abc12.measurement-lab    success
Apple networkQuality  apple-networkquality     486.20 Mbps  88.31 Mbps  —                            success

(示例输出,数值为演示。校内三流 812 与公网单流 203 不可比大小, 方法与路径都不同——这正是分开呈现的意义。)

快速开始

brew tap soundadam/tap
brew install pace
pace doctor --json
pace

首次在交互终端运行会选择语言与日常测速站(macOS 默认预选 nju-campus、mlab、apple;Linux/Windows 预选 nju-campus、 mlab),之后可用 pace setup 修改。Homebrew Formula 当前只 覆盖 macOS;Linux/Windows 使用 release 二进制或源码构建,详见 安装文档。

测速视角

目标 ID 默认 它回答的问题 方法与结果边界
nju-campus 是 南大校内服务、校园网或 NJU VPN 是否连通 LibreSpeed 三流;IPv4/IPv6 可分别选择
mlab 是 当前公网/代理出口的 bulk-transport 表现 M-Lab NDT7 单流;节点由 Locate 动态返回
apple macOS 默认 macOS 内置的公网吞吐与负载下响应性 /usr/bin/networkQuality -c -s;显示吞吐、基础 RTT 与 RPM;Linux/Windows 自动跳过
ookla 否 附近 Ookla 测试服务器的运营商侧参考 仅官方 Speedtest CLI;动态服务器、ID、赞助方和地址写入结果
tongji 否 上海及江浙沪方向的教育网参考 Tongji LibreSpeed 三流,IPv4
cernet 否 CERNET 公共站点兼容性 当前服务不可达,保留显式诊断,不进入日常设置

中科大网页测速是浏览器产品,不加入 CLI 测速。教育网三流是三个并发 HTTP 请求,不是三条物理线路,也不表示服务器带宽异常大。NDT7 是单流 bulk-transport;两种方法的数值不应直接横向排名。

所有选中目标按显示顺序串行执行,避免互相争抢带宽。Ookla 不自动加入: 只有在 pace setup 中主动选择且官方 helper 可用时才运行。

CLI 一览

pace
pace run [--targets LIST] [--family ipv4|ipv6|dual] [--label TEXT] [--note TEXT] [--no-save]
pace campus [--ipv4|--ipv6] [--label TEXT] [--note TEXT] [--no-save]
pace domestic [--targets tongji] [--family ipv4] [--no-save]
pace mlab | apple | ookla [--label TEXT] [--note TEXT] [--no-save]
pace stations [--json]
pace history [--limit N] | last [--json] | show RUN_ID [--json]
pace export --format jsonl|csv --output PATH
pace consent status|accept|revoke
pace setup | doctor [--json] | version

退出码稳定:0 全部成功,1 配置/环境错误,2 目标失败或部分成功, 130 取消。完整参数见 CLI 命令参考。

文档

文档站源文件在 docs/(Mintlify),线上地址计划为 https://docs.soundadam.com(或 pace.mintlify.app,域名待绑定):

安装与可选 provider(要点)

  • 基础测量依赖 pace 发布的 LibreSpeed/ndt7 helper;缺少 helper 时 doctor 明确报告,不下载未知程序。
  • Apple networkQuality 是 macOS 自带组件,pace 只调用、不捆绑、 不代用户接受条款。
  • Ookla 仅支持官方 Speedtest CLI,由用户自行安装 (brew tap teamookla/speedtest && brew install speedtest --force); pace 不自动安装、不自动传 --accept-license/--accept-gdpr, 并拒绝已停维护的 Python speedtest-cli(可用 PACE_OOKLA_PATH 指定官方二进制)。
  • 交互式 pace ookla 检测到冲突时,仅在用户按 Enter 确认后执行 官方 Homebrew 安装序列,且从不自动卸载已有 formula。

细节(冲突修复、helper 解析顺序、平台目录)见 安装文档。

M-Lab 隐私(要点)

M-Lab 会公开并无限期保留测试结果和 ISP 提供的公网 IP(隐私政策)。 pace 要求显式同意且 fail closed:

pace consent accept
pace consent status

无同意记录时,非交互命令在接触 M-Lab 前以 consent_required 失败; 不含 M-Lab 的计划不需要这一步。详见 M-Lab 隐私与同意。

JSON、历史与自动化(要点)

每次结果包含按执行顺序排列的 targets 与 measurements,可选字段 (serverId、serverSponsor、三类 RPM)缺省时保持 null/absent。历史 永久保存在用户配置目录(目录 0700、文件 0600、原子写入):

macOS:   ~/Library/Application Support/pace/history/v1/<run-id>.json
Linux:   ${XDG_CONFIG_HOME:-~/.config}/pace/history/v1/<run-id>.json
Windows: %AppData%\pace\history\v1\<run-id>.json

export --format jsonl|csv 导出全部历史。字段表与脚本示例见 JSON 输出与自动化。

本地开发

make test-offline   # 全部离线测试(fixtures/mock helper)
make test-race
make build
./bin/pace version

测试、Formula 与 release automation 只使用 fixtures/mock helper,常规 CI 不执行真实带宽测试;真实测速由对应平台操作者单独验收。Makefile 目标拆分在 make/*.mk。流程详见 TESTING.md 与 RELEASE.md。

许可与第三方

  • pace 本体:MIT(见 LICENSE)。
  • librespeed-cli helper:LGPL-3.0-only,维护源码在 components/librespeed-cli,作为独立进程执行、不静态链接。
  • ndt7-client helper:Apache-2.0,按固定版本与 SHA-256 构建。
  • pace 从不代替用户接受任何第三方条款(Apple、Ookla、M-Lab 的条款由用户自己面对),也不读取或修改 soundVPN、SFM、NJUConnect 的私有配置。

完整清单见 THIRD_PARTY_NOTICES.md;产品契约 见 SPEC.md。

命名约定

产品名、仓库名、Homebrew Formula、可执行文件、TUI 标题和 CLI 输出均 保持小写 pace。Go 模块路径保持 github.com/soundadam/pace。

Contributing

欢迎 issue 与 PR。提交前请阅读 SPEC.md(产品契约与表述 边界)和 TESTING.md(验证门槛),运行 make test-offline 并保持 git diff --check 干净。涉及测量语义的 改动请先开 issue 讨论——本项目对表述准确性有洁癖。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL