From 4fdfe404512fa81bbf61a6c412062e312084a000 Mon Sep 17 00:00:00 2001 From: yeyang <746659424@qq.com> Date: Sat, 20 Apr 2024 21:10:08 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9A=97=EF=B8=8F=20=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E6=B5=8B=E8=AF=95=E5=A2=9E=E5=8A=A0=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E4=BD=BF=E7=94=A8=E4=BB=A3=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/default_config/state.yaml | 4 ++++ lib/request/request.js | 3 +-- model/State/Network.js | 28 ++++++++++++++++++---------- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/config/default_config/state.yaml b/config/default_config/state.yaml index 1e48ac2..f959d25 100644 --- a/config/default_config/state.yaml +++ b/config/default_config/state.yaml @@ -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 #监控任务 diff --git a/lib/request/request.js b/lib/request/request.js index 8b44f2a..faf00f0 100644 --- a/lib/request/request.js +++ b/lib/request/request.js @@ -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 } diff --git a/model/State/Network.js b/model/State/Network.js index abbaaba..e297f5d 100644 --- a/model/State/Network.js +++ b/model/State/Network.js @@ -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