feat: JSON 配置、质量分与仪表盘,及设置与爬取流程

- 后端改为 config/app.json;pytest 使用 config/app.test.json 与 set_config_file,不再依赖环境变量;移除 pydantic-settings。

- 前端 API/WebSocket 由 config/webui.json 经 Vite define 注入。

- 代理分数按延迟与随机取用次数计算,新增 use_count 与 proxy_scoring;保存设置时同步调度器启停。

- 仪表盘双饼图(可用/待验证协议);设置页去掉调度器启停按钮并移动立即验证;爬取全部结束后自动提交全量验证。

- 删除 script/settings_maintain.py(此前已标记删除)。

Made-with: Cursor
This commit is contained in:
祀梦
2026-04-05 16:08:32 +08:00
parent 07248ff4ee
commit 7bc6d4e4de
31 changed files with 643 additions and 280 deletions

37
config/app.json Normal file
View File

@@ -0,0 +1,37 @@
{
"db_path": "db/proxies.sqlite",
"host": "127.0.0.1",
"port": 18080,
"validator_timeout": 5,
"validator_max_concurrency": 200,
"validator_connect_timeout": 3,
"crawler_num_validators": 50,
"crawler_max_queue_size": 500,
"log_level": "INFO",
"log_dir": "logs",
"ws_stats_interval_seconds": 1,
"export_max_records": 10000,
"score_valid": 10,
"score_invalid": -5,
"score_min": 0,
"score_max": 100,
"score_latency_ref_ms": 500.0,
"score_use_penalty_per_pick": 2.5,
"score_max_use_penalty": 70.0,
"score_default_latency_ms": 1500.0,
"validator_test_urls": [
"http://httpbin.org/ip",
"https://httpbin.org/ip",
"http://api.ipify.org",
"https://api.ipify.org",
"http://www.baidu.com",
"http://www.qq.com"
],
"plugins_dir": "plugins",
"cors_origins": [
"http://localhost:8080",
"http://localhost:5173",
"http://127.0.0.1:18081",
"http://localhost:18081"
]
}

33
config/app.test.json Normal file
View File

@@ -0,0 +1,33 @@
{
"db_path": "db/proxies.test.sqlite",
"host": "127.0.0.1",
"port": 18080,
"validator_timeout": 5,
"validator_max_concurrency": 200,
"validator_connect_timeout": 3,
"crawler_num_validators": 50,
"crawler_max_queue_size": 500,
"log_level": "INFO",
"log_dir": "logs",
"ws_stats_interval_seconds": 1,
"export_max_records": 10000,
"score_valid": 10,
"score_invalid": -5,
"score_min": 0,
"score_max": 100,
"score_latency_ref_ms": 500.0,
"score_use_penalty_per_pick": 2.5,
"score_max_use_penalty": 70.0,
"score_default_latency_ms": 1500.0,
"validator_test_urls": [
"http://httpbin.org/ip",
"https://httpbin.org/ip"
],
"plugins_dir": "plugins",
"cors_origins": [
"http://localhost:8080",
"http://127.0.0.1:18081",
"http://localhost:18081"
],
"run_network_tests": false
}

4
config/webui.json Normal file
View File

@@ -0,0 +1,4 @@
{
"api_base_url": "http://127.0.0.1:18080",
"ws_url": ""
}