Skip to content

Commit

Permalink
Merge pull request #169 from mlmmlm/backend
Browse files Browse the repository at this point in the history
🎉连通性测试条目支持自定义排序
  • Loading branch information
AirportR authored Feb 26, 2024
2 parents 0f004d3 + a2aa84a commit 800bc52
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 6 deletions.
8 changes: 3 additions & 5 deletions resources/config.yaml.example
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ bot:
# ====================以上为必填项,否则无法启动成功========================
# proxy: host:端口:用户名:密码 #socks5代理,用户名和密码为可选配置,已和下面的proxy单独分离,请勿混用
# strictmode: false # 严格模式,代表测试的时侯,bot内联按钮只有发起测试的主人才能按,否则所有用户用户权限都可以按。默认false,目前未适配,敬请期待。
# scripttext: "⏳联通性测试进行中..." # 解锁脚本测试进度条自定义文本
# scripttext: "⏳连通性测试进行中..." # 解锁脚本测试进度条自定义文本
# analyzetext: "⏳节点测试拓扑进行中..." # 拓扑测试进度条自定义文本
# speedtext: "⏳速度测试进行中..." # 速度测试进度条自定义文本
# bar: "=" #进度条自定义文本
Expand All @@ -19,16 +19,14 @@ bot:
#以下是fulltclash的buildtoken,可以用默认的,但是安全性得不到保障,具体原因详见文档
#buildtoken: c7004ded9db897e538405c67e50e0ef0c3dbad717e67a92d02f6ebcfd1022a5ad1d2c4419541f538ff623051759ec000d2f426e03f9709a6608570c5b9141a6b
#clash:
# path: './bin/fulltclash-linux-amd64' # 代理客户端的路径,默认为 ./bin/ 下。不会弄不要动这里,用默认的即可。本仓库默认仅提供win-amd64与linux-amd64两种(意味着如果为这两种架构,这里不用改。),其他架构需要自行编译。
# allow-caching: false #是否缓存测试过程产生的订阅,若否,则测试完成后会自动删除测试订阅,以免造成空间浪费。(此配置暂不生效)
# path: './bin/FullTCore' # 代理客户端的路径,请前往 https://github.com/AirportR/FullTCore/releases 下载
# core: 4 # 核心数,数量越多测试速度越快,但代价是内存会大量占用(每个核心大概10M),自己的机子多少内存自己平衡。默认值为1.
# auto-start: false # bot启动时顺带启动,若为false则需要在 bot上输入/clash start 手动启动,默认false
# startup: 1124 #起始端口。表示从此端口开始往下数占用数量,比如核心数为4,就会占用[1124,1126,1128,1130]共4个端口,遇到端口占用时可配置此项。推荐10000以上作为初始端口
# branch: origin #clash内核上游分支,仅有两个有效值: [origin, meta], meta分支支持更多协议,比如vless、tuic等,但是使用上较为不可控,默认为origin原生内核。
#proxy: "host:端口" # http配置代理(非socks5),括号内可选用于下载获取订阅链接,订阅链接国内打不开可尝试开启(可选配置),本机提供的代理可以这样填: '127.0.0.1:7890'
#如果要http代理要验证,配置格式为: proxy: "用户名:密码@host:端口" 比如: user1:112233@127.0.0.1:7890
#geoip-api: "ip-api.com" # GEOIP 测试api,取二级域名,目前支持 ip-api.com ip.sb ipleak.net ipdata.co ipapi.co 五种,其中 ipdata 需要配置下面的geoip-key
#geoip-key: xxxxxxx #ipdata 的 apikey,如果使用其他api则无需填写
#test_sort: ['类型', 'HTTP(s)排序', 'Netflix', 'Youtube', 'Disney+'] #连通性测试条目自定义排序
#subconverter: #订阅转换(此配置主要开发者已无心维护,能用但不稳定)
# enable: true #是否启用
# host: '127.0.0.1:25500' #域名或者ip加端口
Expand Down
11 changes: 10 additions & 1 deletion utils/backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import socket
import time

from collections import Counter
from collections import Counter, OrderedDict
from operator import itemgetter
from typing import Union, Callable, Coroutine, Tuple

Expand Down Expand Up @@ -559,6 +559,7 @@ async def batch_test_pro(self, proxyinfo: list, test_items: list, pool: dict,

async def core(self, proxyinfo: list, **kwargs):
info = {} # 存放测试结果
test_sort = GCONFIG.config.get('test_sort', ["0", "1"])
media_items = kwargs.get('script', None) or kwargs.get('test_items', None) or kwargs.get('media_items', None)
test_items = collector.media_items if media_items is None else media_items
test_items = cleaner.addon.mix_script(test_items, False)
Expand Down Expand Up @@ -603,6 +604,14 @@ async def core(self, proxyinfo: list, **kwargs):
# 任务信息
info['task'] = kwargs.get('task', {})
# 保存结果
sorted_dict = OrderedDict()
for key in test_sort:
if key in info:
sorted_dict[key] = info[key]
for key in info:
if key not in sorted_dict:
sorted_dict[key] = info[key]
info = dict(sorted_dict)
self.saveresult(info)
return info

Expand Down

0 comments on commit 800bc52

Please sign in to comment.