62 lines
1.7 KiB
JavaScript
62 lines
1.7 KiB
JavaScript
import request from '../../lib/request/request.js'
|
|
import { Config } from '../../components/index.js'
|
|
|
|
export default function getNetworTestList () {
|
|
let { psTestSites, psTestTimeout } = Config.state
|
|
if (psTestSites) {
|
|
let psTest = psTestSites?.map(i => getNetworkLatency(i.url, psTestTimeout).then(res => {
|
|
return {
|
|
first: i.name,
|
|
tail: res
|
|
}
|
|
}))
|
|
return Promise.all(psTest)
|
|
} else {
|
|
return []
|
|
}
|
|
}
|
|
/**
|
|
* 网络测试
|
|
* @param {string} url 测试的url
|
|
* @param {number} [timeoutTime] 超时时间
|
|
* @returns {string}
|
|
*/
|
|
async function getNetworkLatency (url, timeoutTime = 5000) {
|
|
const AbortController = globalThis.AbortController || await import('abort-controller')
|
|
|
|
const controller = new AbortController()
|
|
const timeout = setTimeout(() => {
|
|
controller.abort()
|
|
}, timeoutTime)
|
|
try {
|
|
const startTime = Date.now()
|
|
let { status } = await request.get(url, { signal: controller.signal })
|
|
const endTime = Date.now()
|
|
let delay = endTime - startTime
|
|
let color = ''; let statusColor = ''
|
|
if (delay > 2000) {
|
|
color = '#F44336'
|
|
} else if (delay > 500) {
|
|
color = '#d68100'
|
|
} else {
|
|
color = '#188038'
|
|
}
|
|
if (status >= 500) {
|
|
statusColor = '#9C27B0'
|
|
} else if (status >= 400) {
|
|
statusColor = '#F44336'
|
|
} else if (status >= 300) {
|
|
statusColor = '#FF9800'
|
|
} else if (status >= 200) {
|
|
statusColor = '#188038'
|
|
} else if (status >= 100) {
|
|
statusColor = '#03A9F4'
|
|
}
|
|
return `<span style='color:${statusColor}'>${status}</span> | <span style='color:${color}'>${delay}ms</span>`
|
|
} catch {
|
|
return "<span style='color:#F44336'>timeout</span>"
|
|
} finally {
|
|
clearTimeout(timeout)
|
|
}
|
|
}
|