⚗️ 状态网络测试增加是否使用代理

This commit is contained in:
yeyang
2024-04-20 21:10:08 +08:00
parent ccabbe2cf6
commit 4fdfe40451
3 changed files with 23 additions and 12 deletions

View File

@@ -3,6 +3,7 @@
# name: 显示名称
# url: 要访问的网址
# timeout: 测试超时时间
# useProxy: 是否使用插件配置中的代理访问
psTestSites:
show: pro
list:
@@ -10,6 +11,9 @@ psTestSites:
url: https://baidu.com
- name: Google
url: https://google.com
- name: Google(proxy)
url: https://google.com
useProxy: true
timeout: 5000
#监控任务

View File

@@ -204,8 +204,7 @@ export default new class {
...options.headers
}
if (options.agent == undefined) options.agent = this.getAgent(options.cf)
if (options.agent === undefined || options.agent === true) options.agent = this.getAgent(options.cf)
return options
}

View File

@@ -22,11 +22,12 @@ export function getNetworkTestList(e) {
}
const parsedData = parseConfig(psTestSites, psTestTimeout)
if (!parsedData.show || (parsedData.show === "pro" && !e.isPro)) {
if (!parsedData.show) {
return Promise.resolve([])
}
if (parsedData.show === "pro" && !e.isPro) {
return Promise.resolve([])
}
// 如果testList为空直接返回空数组的Promise
if (parsedData.list.length === 0) {
return Promise.resolve([])
}
@@ -35,7 +36,7 @@ export function getNetworkTestList(e) {
let currentRequests = 0
return Promise.all(parsedData.list.map((site) => {
currentRequests++
return handleSite(site, psTestTimeout).finally(() => {
return handleSite(site).finally(() => {
if (--currentRequests === 0) {
logger.debug("[yenai-plugin][state]已完成所有网络测试")
}
@@ -44,15 +45,20 @@ export function getNetworkTestList(e) {
}
// 封装处理每个测试站点逻辑到一个单独的函数
const handleSite = (site, TestTimeout) => {
return getNetworkLatency(site.url, TestTimeout)
const handleSite = (site) => {
return getNetworkLatency(site.url, site.timeout, site.useProxy)
.then(res => ({ first: site.name, tail: res }))
.catch(error => {
logger.error(`[yenai-plugin][state]Error testing site: ${site.name}`, error)
return { first: site.name, tail: "Error" } // 捕获错误并返回一个错误标记
})
}
/**
* 解析配置参数并返回配置对象。
* @param {Array | string | boolean} psTestSites - 预期应该是对象包含show,list,timeout
* @param {number} psTestTimeout - 保留老配置文件psTestTimeout
* @returns {object} 包含配置信息的对象。
*/
function parseConfig(psTestSites, psTestTimeout) {
let data = {
show: "pro",
@@ -69,7 +75,7 @@ function parseConfig(psTestSites, psTestTimeout) {
(typeof psTestSites === "string" && psTestSites === "default")
) {
data.show = true
data.list = defList // Assuming defList is defined elsewhere
data.list = defList
}
return data
@@ -78,9 +84,10 @@ function parseConfig(psTestSites, psTestTimeout) {
* 网络测试
* @param {string} url 测试的url
* @param {number} [timeoutTime] 超时时间
* @param {boolean} useProxy 是否使用代理
* @returns {string}
*/
async function getNetworkLatency(url, timeoutTime = 5000) {
async function getNetworkLatency(url, timeoutTime = 5000, useProxy = false) {
let { controller, clearTimeout } = await createAbortCont(timeoutTime)
try {
@@ -88,7 +95,8 @@ async function getNetworkLatency(url, timeoutTime = 5000) {
let { status } = await request.get(url, {
signal: controller.signal,
origError: true,
outErrorLog: false
outErrorLog: false,
agent: !!useProxy
})
const endTime = Date.now()
let delay = endTime - startTime