Skip to content

Commit a57741b

Browse files
author
Zephyruso
authored
feat: speed test (#38)
1 parent 4eeb345 commit a57741b

File tree

5 files changed

+38
-7
lines changed

5 files changed

+38
-7
lines changed

src/App.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ export const App = () => {
3030
<div class="flex-1 overflow-y-auto p-4">
3131
<Routes>
3232
<Show when={selectedEndpoint()}>
33-
<Route path="/" component={Overview} />
3433
<Route path="/proxies" component={Proxies} />
3534
<Route path="/rules" component={Rules} />
3635
<Route path="/conns" component={Connections} />
3736
<Route path="/logs" component={Logs} />
3837
<Route path="/config" component={Config} />
38+
<Route path="*" component={Overview} />
3939
</Show>
4040

4141
<Route path="/setup" component={Setup} />

src/components/Header.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ const ThemeSwitcher = () => (
6565

6666
const navs = () => [
6767
{
68-
href: '/',
68+
href: '/overview',
6969
name: 'Overview',
7070
icon: <IconHome />,
7171
},

src/pages/Proxies.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { IconBrandSpeedtest } from '@tabler/icons-solidjs'
12
import { For, createSignal, onMount } from 'solid-js'
23
import { twMerge } from 'tailwind-merge'
34
import { useProxies } from '~/signals/proxies'
@@ -10,6 +11,7 @@ export default () => {
1011
delayMap,
1112
updateProxy,
1213
setProxiesByProxyName,
14+
delayTestByProxyGroupName,
1315
} = useProxies()
1416
const [collapseMap, setCollapseMap] = createSignal<Record<string, boolean>>(
1517
{},
@@ -40,6 +42,11 @@ export default () => {
4042
setCollapseMap({ ...cMap })
4143
}
4244

45+
const onSpeedTestClick = (e: MouseEvent, name: string) => {
46+
e.stopPropagation()
47+
delayTestByProxyGroupName(name)
48+
}
49+
4350
const getCollapseClassName = (name: string) => {
4451
return collapseMap()[name] ? 'collapse-open' : 'collapse-close'
4552
}
@@ -59,10 +66,14 @@ export default () => {
5966
)}
6067
>
6168
<div
62-
class="collapse-title text-xl font-medium"
69+
class="collapse-title flex items-center text-xl font-medium"
6370
onClick={() => onCollapseTitleClick(proxy.name)}
6471
>
6572
{proxy.name} {proxy.type}
73+
<IconBrandSpeedtest
74+
class="m-4 cursor-pointer"
75+
onClick={(e) => onSpeedTestClick(e, proxy.name)}
76+
/>
6677
</div>
6778
<div class="collapse-content grid grid-cols-1 gap-2 sm:grid-cols-3 lg:grid-cols-5">
6879
<For each={proxy.all}>

src/pages/Setup.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ export default () => {
8282
class="badge badge-info flex w-full cursor-pointer items-center gap-4 py-4"
8383
onClick={() => {
8484
setSelectedEndpoint(id)
85-
navigate('/')
85+
navigate('/overview')
8686
}}
8787
>
8888
{url}

src/signals/proxies.ts

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,15 @@ export function useProxies() {
3131
const { proxies } = await request
3232
.get('proxies')
3333
.json<{ proxies: Record<string, Proxy> }>()
34+
const sortIndex = proxies['GLOBAL'].all ?? []
3435

3536
setProxies(
36-
Object.values(proxies).filter(
37-
(proxy) => proxy.all && proxy.all.length > 0,
38-
),
37+
Object.values(proxies)
38+
.filter((proxy) => proxy.all && proxy.all.length > 0)
39+
.sort(
40+
(pre, next) =>
41+
sortIndex.indexOf(pre.name) - sortIndex.indexOf(next.name),
42+
),
3943
)
4044
}
4145

@@ -48,9 +52,25 @@ export function useProxies() {
4852
await updateProxy()
4953
}
5054

55+
const delayTestByProxyGroupName = async (proxyGroupName: string) => {
56+
const data: Record<string, number> = await request
57+
.get(
58+
`group/${proxyGroupName}/delay?url=https%3A%2F%2Fwww.gstatic.com%2Fgenerate_204&timeout=2000`,
59+
)
60+
.json()
61+
const dMap = delayMap()
62+
63+
Object.entries(data).forEach(([name, time]) => {
64+
dMap[name] = time
65+
})
66+
67+
setDelayMap({ ...dMap })
68+
}
69+
5170
return {
5271
proxies,
5372
proxyProviders,
73+
delayTestByProxyGroupName,
5474
delayMap,
5575
updateProxy,
5676
setProxiesByProxyName,

0 commit comments

Comments
 (0)