Skip to content

Commit cf76ee9

Browse files
rename to pingping; 运行截图 + 深链接 + FUNDING/赞助说明
1 parent d10cdb9 commit cf76ee9

13 files changed

Lines changed: 59 additions & 34 deletions

File tree

.github/FUNDING.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
github: githubflyideas
2+
# 爱发电开通后取消注释:
3+
# custom: ["https://afdian.com/a/githubflyideas"]

.gitignore

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
/pingd
1+
/pingping
22
/data/
33
/testdata/
4-
pingd.jsonc
4+
pingping.jsonc
55
test.jsonc
66
*.log
77
nohup.out

DEPLOY.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,38 +3,38 @@
33
## systemd
44

55
```ini
6-
# /etc/systemd/system/pingd.service
6+
# /etc/systemd/system/pingping.service
77
[Unit]
8-
Description=pingd link quality oscilloscope
8+
Description=pingping link quality oscilloscope
99
After=network-online.target
1010

1111
[Service]
12-
ExecStart=/opt/pingd/pingd -c /opt/pingd/pingd.jsonc
13-
WorkingDirectory=/opt/pingd
12+
ExecStart=/opt/pingping/pingping -c /opt/pingping/pingping.jsonc
13+
WorkingDirectory=/opt/pingping
1414
Restart=always
1515
RestartSec=5
1616
# 非 root 运行时二选一:
1717
# 1) sysctl net.ipv4.ping_group_range="0 2147483647"
1818
# 2) AmbientCapabilities=CAP_NET_RAW
19-
User=pingd
19+
User=pingping
2020
AmbientCapabilities=CAP_NET_RAW
2121

2222
[Install]
2323
WantedBy=multi-user.target
2424
```
2525

2626
```bash
27-
useradd -r -s /sbin/nologin pingd
28-
mkdir -p /opt/pingd && cp pingd pingd.jsonc /opt/pingd/ && chown -R pingd: /opt/pingd
29-
systemctl enable --now pingd
27+
useradd -r -s /sbin/nologin pingping
28+
mkdir -p /opt/pingping && cp pingping pingping.jsonc /opt/pingping/ && chown -R pingping: /opt/pingping
29+
systemctl enable --now pingping
3030
```
3131

3232
## 隔离网(air-gapped)
3333

3434
在有网机器上 `CGO_ENABLED=0 go build`,把二进制和配置 scp 进去即可。
3535
无外部依赖,数据目录整个 tar 走就是完整备份。
3636

37-
## pingd 自己也被看住(可选)
37+
## pingping 自己也被看住(可选)
3838

3939
监控工具也要被监控,但不必自己监控自己。向任意 dead man's switch 服务发心跳:
4040

README.md

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
1-
# pingd
1+
# pingping
22

3-
> **监控告诉你挂没挂,pingd 告诉你活得好不好。**
3+
> **监控告诉你挂没挂,pingping 告诉你活得好不好。**
44
> 用户说"卡",监控全绿 —— 故障藏在 RTT 分布和丢包突发里,而 up/down 类工具的数据模型在数学上就看不见它。
55
6-
pingd 是一个网络链路质量示波器:每轮发 20 个探测包,把**全部样本**画成烟雾图(Smokeping 的可视化语义),用 robust z-score 自动判定丢包突发和 P99 劣化,结论直接推进飞书。
6+
pingping 是一个网络链路质量示波器:每轮发 20 个探测包,把**全部样本**画成烟雾图(Smokeping 的可视化语义),用 robust z-score 自动判定丢包突发和 P99 劣化,结论直接推进飞书。
77

88
A single-binary network link quality oscilloscope — modern Smokeping semantics, zero dependencies, air-gapped friendly, conclusions-first Feishu alerting.
99

10+
![广州电信 · 6h 窗口:一场 40 分钟的拥塞事件,烟雾散开、突发标为 ◆](docs/hero.png)
11+
12+
| 24h 视图:昨晚的劣化窗口 + 晚高峰抖动 | 健康链路就是一条细亮线 |
13+
|---|---|
14+
| ![24h](docs/day.png) | ![clean](docs/clean.png) |
15+
16+
*(截图为内置回放机制生成的演示数据)*
17+
1018
## 特性
1119

1220
- **单二进制,零依赖** — 纯 Go 标准库,`go.mod` 里没有一行 require。Web UI(ECharts)内嵌,存储是 JSONL 文本文件。没有 Docker、没有数据库、没有 Prometheus,scp 一个文件就能在隔离网跑
@@ -19,13 +27,13 @@ A single-binary network link quality oscilloscope — modern Smokeping semantics
1927

2028
```bash
2129
# 1. 构建(或从 Releases 下载)
22-
go build -o pingd .
30+
go build -o pingping .
2331

2432
# 2. 配置
25-
cp config.example.jsonc pingd.jsonc && vi pingd.jsonc # 填 targets 和飞书 webhook
33+
cp config.example.jsonc pingping.jsonc && vi pingping.jsonc # 填 targets 和飞书 webhook
2634

2735
# 3. 运行
28-
./pingd -c pingd.jsonc
36+
./pingping -c pingping.jsonc
2937
# 浏览器打开 http://<host>:8517 看烟雾图
3038
```
3139

@@ -34,7 +42,7 @@ cp config.example.jsonc pingd.jsonc && vi pingd.jsonc # 填 targets 和飞书
3442
```bash
3543
sysctl -w net.ipv4.ping_group_range="0 2147483647"
3644
# 或者给二进制授权 raw socket:
37-
setcap cap_net_raw+ep ./pingd
45+
setcap cap_net_raw+ep ./pingping
3846
```
3947

4048
## 读图
@@ -72,7 +80,15 @@ data/
7280

7381
## 前身
7482

75-
本项目继承自 [ai-sreagent](https://github.com/githubflyideas/ai-sreagent)(见 git history):robust z-score 异常检测、飞行记录器、结论先行的告警哲学来自那里 —— LLM 诊断循环被确定性规则引擎替代,三组件架构被压缩成一个二进制。同门项目:[deltascope](https://github.com/githubflyideas/deltascope)(air-gapped 性能回归对比)。
83+
本项目继承自 ai-sreagent(完整代码在本仓库 git history 中):robust z-score 异常检测、飞行记录器、结论先行的告警哲学来自那里 —— LLM 诊断循环被确定性规则引擎替代,三组件架构被压缩成一个二进制。同门项目:[deltascope](https://github.com/githubflyideas/deltascope)(air-gapped 性能回归对比)。
84+
85+
## 赞助
86+
87+
pingping 的目标是"不赔钱地存在"。如果它帮你抓到过一次"监控全绿但就是卡"的元凶:
88+
89+
- ⭐ Star 是最好的支持
90+
- [GitHub Sponsors](https://github.com/sponsors/githubflyideas) · 爱发电(筹备中)
91+
- **赞助位虚位以待** —— README 此处与推送卡片底部各有一个固定展示位(内容将明确标注"推广"),适合 VPS / IDC / 网络服务商,联系方式见 GitHub 主页
7692

7793
## License
7894

config.example.jsonc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
// pingd 配置示例 —— 复制为 pingd.jsonc 后修改
2+
// pingping 配置示例 —— 复制为 pingping.jsonc 后修改
33
// 支持 // 和 /* */ 注释。所有字段都有合理默认值,最小配置只需 targets + webhooks。
44

55
"listen": "0.0.0.0:8517", // Web 监听地址
@@ -37,7 +37,7 @@
3737
"burst_alert_n": 3 // 30 分钟内突发 3 次升级为告警
3838
},
3939

40-
// 周心跳:证明 pingd 自己活着(dead man's switch)。weekday: 0=周日 1=周一
40+
// 周心跳:证明 pingping 自己活着(dead man's switch)。weekday: 0=周日 1=周一
4141
"heartbeat": { "enabled": true, "weekday": 1, "hour": 10 },
4242

4343
// 日报:默认关。喜欢每天看一眼数字的人再打开

docs/clean.png

176 KB
Loading

docs/day.png

342 KB
Loading

docs/hero.png

264 KB
Loading

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
module pingd
1+
module pingping
22

33
go 1.22.2

main.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// pingd — 网络链路质量示波器
2-
// 监控告诉你挂没挂,pingd 告诉你活得好不好。
1+
// pingping — 网络链路质量示波器
2+
// 监控告诉你挂没挂,pingping 告诉你活得好不好。
33
package main
44

55
import (
@@ -15,12 +15,12 @@ import (
1515
var version = "dev"
1616

1717
func main() {
18-
cfgPath := flag.String("c", "pingd.jsonc", "配置文件路径 (JSONC)")
18+
cfgPath := flag.String("c", "pingping.jsonc", "配置文件路径 (JSONC)")
1919
showVer := flag.Bool("version", false, "打印版本")
2020
flag.Parse()
2121

2222
if *showVer {
23-
fmt.Println("pingd", version)
23+
fmt.Println("pingping", version)
2424
return
2525
}
2626

@@ -51,14 +51,14 @@ func main() {
5151
// 分钟级调度器:日汇总、保留期清理、日报、周心跳
5252
go scheduler(cfg, store, notifier, stop)
5353

54-
log.Printf("pingd %s 启动 · %d 个目标 · 监听 %s · 数据目录 %s",
54+
log.Printf("pingping %s 启动 · %d 个目标 · 监听 %s · 数据目录 %s",
5555
version, len(cfg.Targets), cfg.Listen, cfg.DataDir)
5656

5757
sig := make(chan os.Signal, 1)
5858
signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
5959
<-sig
6060
close(stop)
61-
log.Println("pingd 退出")
61+
log.Println("pingping 退出")
6262
}
6363

6464
// scheduler 每分钟醒一次,对表干活。刻意不用 cron 库:需求就四条。

0 commit comments

Comments
 (0)