mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-10 19:29:50 +08:00
feat: delegate 客户端替换为 hyper 原生实现,新增代理管理功能
aether-proxy: - 用 hyper-util Client + 自定义 InstrumentedConnector 替换 reqwest delegate 客户端 - 支持 HTTP/HTTPS 自动 TLS,ALPN h2 协商,connect/tls 分阶段计时 - ConnectTiming 通过 hyper extensions 传递,上游响应细分 connect_ms/tls_ms/ttfb_ms - upgrade 命令在非 root 下跳过 systemd restart 并提示手动操作 后端: - 新增 /admin/proxy-nodes/test-url 接口,支持直接测试代理 URL 连通性 - 新增 /admin/proxy-nodes/hmac-key 接口,获取 HMAC Key 供部署使用 - 提取 _test_proxy_connectivity 公共函数,消除 test_node 中的重复代码 - candidate_resolver 在 extra_data 中输出 needs_conversion/provider_api_format - stats_aggregator 小时聚合增加 IntegrityError 冲突重试 前端: - 请求时间线组件展示代理 timing 细分(DNS/连接/TLS/TTFB/上游处理) - 请求时间线增加格式转换分界标记和 conversion badge - ProxyNodes 页面新增代理 URL 测试和 HMAC Key 复制功能 - HardwareTooltip 从 Popover 改为 Tooltip 组件
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
<script setup lang="ts">
|
||||
import type { ProxyNode } from '@/api/proxy-nodes'
|
||||
import {
|
||||
Popover,
|
||||
PopoverContent,
|
||||
PopoverTrigger,
|
||||
Tooltip,
|
||||
TooltipContent,
|
||||
TooltipProvider,
|
||||
TooltipTrigger,
|
||||
} from '@/components/ui'
|
||||
import { Cpu } from 'lucide-vue-next'
|
||||
import { computed } from 'vue'
|
||||
@@ -76,36 +77,37 @@ function formatNumber(n: number) {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<Popover v-if="showHardwareInfo">
|
||||
<PopoverTrigger as-child>
|
||||
<button
|
||||
type="button"
|
||||
title="Hardware info"
|
||||
aria-label="Hardware info"
|
||||
class="inline-flex items-center justify-center rounded-sm p-0.5 hover:bg-muted/60 transition-colors"
|
||||
>
|
||||
<Cpu class="h-3.5 w-3.5 text-muted-foreground" />
|
||||
</button>
|
||||
</PopoverTrigger>
|
||||
<PopoverContent
|
||||
side="right"
|
||||
:side-offset="8"
|
||||
class="w-auto p-3 text-xs space-y-1"
|
||||
>
|
||||
<div
|
||||
v-if="hardwareRows.length === 0"
|
||||
class="text-muted-foreground"
|
||||
>
|
||||
No hardware info reported.
|
||||
</div>
|
||||
<template v-else>
|
||||
<div
|
||||
v-for="row in hardwareRows"
|
||||
:key="row.label"
|
||||
<TooltipProvider v-if="showHardwareInfo">
|
||||
<Tooltip>
|
||||
<TooltipTrigger as-child>
|
||||
<button
|
||||
type="button"
|
||||
aria-label="硬件信息"
|
||||
class="inline-flex items-center justify-center rounded-sm p-0.5 hover:bg-muted/60 transition-colors"
|
||||
>
|
||||
{{ row.label }}: {{ row.value }}
|
||||
<Cpu class="h-3.5 w-3.5 text-muted-foreground" />
|
||||
</button>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent
|
||||
side="right"
|
||||
:side-offset="8"
|
||||
class="w-auto px-3 py-2 text-xs space-y-1"
|
||||
>
|
||||
<div
|
||||
v-if="hardwareRows.length === 0"
|
||||
class="text-muted-foreground"
|
||||
>
|
||||
No hardware info reported.
|
||||
</div>
|
||||
</template>
|
||||
</PopoverContent>
|
||||
</Popover>
|
||||
<template v-else>
|
||||
<div
|
||||
v-for="row in hardwareRows"
|
||||
:key="row.label"
|
||||
>
|
||||
{{ row.label }}: {{ row.value }}
|
||||
</div>
|
||||
</template>
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
</TooltipProvider>
|
||||
</template>
|
||||
|
||||
Reference in New Issue
Block a user