Без опису

Taio_O 6335594577 first commit 10 місяців тому
config 6335594577 first commit 10 місяців тому
go-speed-test 6335594577 first commit 10 місяців тому
public 6335594577 first commit 10 місяців тому
src 6335594577 first commit 10 місяців тому
.gitignore 6335594577 first commit 10 місяців тому
README.md 6335594577 first commit 10 місяців тому
env.example 6335594577 first commit 10 місяців тому
get-chat-id.js 6335594577 first commit 10 місяців тому
go-analysis.md 6335594577 first commit 10 місяців тому
package-lock.json 6335594577 first commit 10 місяців тому
package.json 6335594577 first commit 10 місяців тому
start.js 6335594577 first commit 10 місяців тому
test-advanced-proxy.js 6335594577 first commit 10 місяців тому
test-direct-connection.js 6335594577 first commit 10 місяців тому
test-simple-proxy.js 6335594577 first commit 10 місяців тому
test-subscription-content.js 6335594577 first commit 10 місяців тому
test-subscription.js 6335594577 first commit 10 місяців тому
test-telegram.js 6335594577 first commit 10 місяців тому

README.md

Clash节点测速工具

一个基于Node.js的Clash节点测速工具,支持定时监控、Telegram通知和自动订阅更新。

功能特性

  • 🔄 定时测速: 每15分钟自动测试所有节点
  • 📊 多维度测试: 延迟、速度、连接性测试
  • 🔔 智能通知: Telegram机器人故障和恢复通知
  • 📈 数据统计: 详细的测试历史和性能统计
  • 🌐 API接口: 完整的RESTful API
  • 📁 配置导入: 支持Clash配置文件导入
  • 🔄 自动订阅: 支持订阅地址自动更新节点
  • 🗄️ 数据持久化: MySQL数据库存储

技术栈

  • 后端: Node.js + Express
  • 数据库: MySQL + Sequelize ORM
  • 定时任务: node-cron
  • 通知: Telegram Bot API
  • 日志: Winston
  • 配置解析: YAML

快速开始

1. 环境要求

  • Node.js 16+
  • MySQL 8.0+
  • 可访问的Telegram Bot Token

2. 安装依赖

npm install

3. 配置环境变量

复制 env.example.env 并修改配置:

cp env.example .env
# 数据库配置
DB_HOST=localhost
DB_PORT=3306
DB_NAME=clash_speed_test
DB_USER=root
DB_PASSWORD=your_password

# Telegram机器人配置
TELEGRAM_BOT_TOKEN=7804040067:AAFeV7WeCWHUJTJzLUnN83C0Wid0pGSj6NQ
TELEGRAM_CHAT_ID=your_chat_id

# 应用配置
PORT=3000
NODE_ENV=development

# Clash配置
CLASH_CONFIG_PATH=./config/clash_config.yaml
CLASH_API_URL=http://127.0.0.1:9090
CLASH_SUBSCRIPTION_URL=http://so.xfxssr.me/api/v1/client/subscribe?token=7854d59f38ac51700730b9e782c5160c

# 测速配置
SPEED_TEST_INTERVAL=15
SPEED_TEST_TIMEOUT=10000
SPEED_TEST_URLS=https://www.google.com,https://www.youtube.com,https://www.github.com

# 通知配置
NOTIFICATION_FAILURE_THRESHOLD=3
NOTIFICATION_RECOVERY_THRESHOLD=2

4. 创建数据库

CREATE DATABASE clash_speed_test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

5. 运行数据库迁移

npm run migrate

6. 启动应用

# 开发模式
npm run dev

# 生产模式
npm start

API接口

节点管理

  • GET /api/nodes - 获取节点列表
  • GET /api/nodes/:id - 获取节点详情
  • POST /api/nodes - 创建节点
  • PUT /api/nodes/:id - 更新节点
  • DELETE /api/nodes/:id - 删除节点

配置导入

  • POST /api/import/clash - 导入Clash配置

订阅管理

  • POST /api/subscription/update - 手动更新订阅
  • GET /api/subscription/status - 获取订阅状态

测试管理

  • POST /api/test/manual - 手动触发测试
  • GET /api/test/results - 获取测试结果

通知管理

  • GET /api/notifications - 获取通知列表
  • POST /api/notifications/test - 测试通知连接

统计信息

  • GET /api/stats - 获取统计信息
  • GET /api/status - 获取系统状态

使用说明

1. 创建Telegram机器人

  1. 在Telegram中搜索 @BotFather
  2. 发送 /newbot 创建新机器人
  3. 获取Bot Token
  4. 将机器人添加到目标群组或频道
  5. 获取Chat ID

快速获取Chat ID:

npm run get-chat-id

测试机器人功能:

npm run test-telegram

2. 导入Clash配置

# 通过API导入
curl -X POST http://localhost:3000/api/import/clash \
  -H "Content-Type: application/json" \
  -d '{
    "configPath": "/path/to/your/clash/config.yaml"
  }'

# 或通过URL导入
curl -X POST http://localhost:3000/api/import/clash \
  -H "Content-Type: application/json" \
  -d '{
    "configUrl": "https://example.com/clash-config.yaml"
  }'

3. 订阅管理

# 手动更新订阅
curl -X POST http://localhost:3000/api/subscription/update

# 获取订阅状态
curl -X GET http://localhost:3000/api/subscription/status

4. 手动测试

# 测试所有节点
curl -X POST http://localhost:3000/api/test/manual

# 测试指定节点
curl -X POST http://localhost:3000/api/test/manual \
  -H "Content-Type: application/json" \
  -d '{
    "nodeIds": [1, 2, 3]
  }'

项目结构

speed-test/
├── src/
│   ├── api/              # API路由
│   ├── config/           # 配置文件
│   ├── core/             # 核心功能
│   ├── database/         # 数据库相关
│   ├── models/           # 数据模型
│   └── utils/            # 工具函数
├── logs/                 # 日志文件
├── config/               # 配置文件目录
├── package.json
├── env.example
└── README.md

配置说明

测速配置

  • SPEED_TEST_INTERVAL: 测速间隔(分钟)
  • SPEED_TEST_TIMEOUT: 测试超时时间(毫秒)
  • SPEED_TEST_URLS: 测试目标网站(逗号分隔)

通知配置

  • NOTIFICATION_FAILURE_THRESHOLD: 故障通知阈值
  • NOTIFICATION_RECOVERY_THRESHOLD: 恢复通知阈值

订阅配置

  • CLASH_SUBSCRIPTION_URL: Clash订阅地址
  • SUBSCRIPTION_UPDATE_INTERVAL: 订阅更新间隔(毫秒)

部署

Docker部署

FROM node:16-alpine

WORKDIR /app

COPY package*.json ./
RUN npm ci --only=production

COPY . .

EXPOSE 3000

CMD ["npm", "start"]

PM2部署

npm install -g pm2
pm2 start src/app.js --name clash-speed-test
pm2 save
pm2 startup

监控和维护

日志查看

# 查看应用日志
tail -f logs/combined.log

# 查看错误日志
tail -f logs/error.log

数据清理

系统会自动清理:

  • 30天前的测试结果
  • 7天前的已发送通知

性能优化

  • 数据库索引已自动创建
  • 测试结果分页查询
  • 并发测试限制

故障排除

常见问题

  1. 数据库连接失败

    • 检查数据库配置
    • 确保数据库服务运行
  2. Telegram通知失败

    • 检查Bot Token和Chat ID
    • 确保机器人有发送消息权限
  3. 节点测试失败

    • 检查网络连接
    • 验证节点配置正确性

调试模式

NODE_ENV=development npm run dev

贡献

欢迎提交Issue和Pull Request!

许可证

MIT License