From edd98f4ff05f2db55ea7bbe41bf4465369e3be26 Mon Sep 17 00:00:00 2001 From: ryan Date: Mon, 1 Jun 2026 22:24:41 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BC=98=E5=8C=96]=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- openflare_relay/internal/frps/manager.go | 128 +----------------- openflare_server/service/relay.go | 16 +-- openflare_server/service/relay_test.go | 3 +- .../nodes/components/node-editor-modal.tsx | 2 +- .../nodes/components/relay-detail-page.tsx | 107 +-------------- 5 files changed, 12 insertions(+), 244 deletions(-) diff --git a/openflare_relay/internal/frps/manager.go b/openflare_relay/internal/frps/manager.go index de1d5f5d..92fc1def 100644 --- a/openflare_relay/internal/frps/manager.go +++ b/openflare_relay/internal/frps/manager.go @@ -3,10 +3,8 @@ package frps import ( "bytes" "context" - "encoding/json" "fmt" "log/slog" - "net/http" "os" "os/exec" "path/filepath" @@ -71,108 +69,6 @@ func (m *Manager) GetStatus() string { return m.status } -type frpsServerInfo struct { - Version string `json:"version"` - BindPort int `json:"bind_port"` - CurConns int `json:"cur_conns"` - ClientCounts int `json:"client_counts"` - ProxyTypeCount map[string]int `json:"proxy_type_count"` -} - -type frpsProxyInfo struct { - Name string `json:"name"` - Type string `json:"type"` - Status string `json:"status"` - ClientAddr string `json:"client_addr"` - LastStartTime string `json:"last_start_time"` - LastCloseTime string `json:"last_close_time"` -} - -type frpsProxiesResponse struct { - Proxies []frpsProxyInfo `json:"proxies"` -} - -func (m *Manager) fetchFrpsTelemetry() (connections int, proxyCount int, clientCount int, proxies []service.RelayProxyStat, err error) { - m.mu.RLock() - activeConfig := m.activeConfig - m.mu.RUnlock() - - if activeConfig == nil { - return 0, 0, 0, nil, fmt.Errorf("activeConfig is nil") - } - - dashboardPort := activeConfig.BindPort + 500 - client := &http.Client{ - Timeout: 2 * time.Second, - } - - // 1. Fetch serverinfo - infoURL := fmt.Sprintf("http://127.0.0.1:%d/api/serverinfo", dashboardPort) - req, err := http.NewRequest(http.MethodGet, infoURL, nil) - if err != nil { - return 0, 0, 0, nil, err - } - password := m.agentToken - if password == "" { - password = "admin" - } - req.SetBasicAuth("admin", password) - resp, err := client.Do(req) - if err != nil { - return 0, 0, 0, nil, err - } - defer resp.Body.Close() - - if resp.StatusCode != http.StatusOK { - return 0, 0, 0, nil, fmt.Errorf("serverinfo returned status %d", resp.StatusCode) - } - - var info frpsServerInfo - if err := json.NewDecoder(resp.Body).Decode(&info); err != nil { - return 0, 0, 0, nil, err - } - - connections = info.CurConns - clientCount = info.ClientCounts - - totalProxies := 0 - for _, count := range info.ProxyTypeCount { - totalProxies += count - } - proxyCount = totalProxies - - // 2. Fetch HTTP proxies list - proxiesURL := fmt.Sprintf("http://127.0.0.1:%d/api/proxy/http", dashboardPort) - req2, err := http.NewRequest(http.MethodGet, proxiesURL, nil) - if err != nil { - return connections, proxyCount, clientCount, nil, nil - } - req2.SetBasicAuth("admin", password) - resp2, err := client.Do(req2) - if err != nil { - return connections, proxyCount, clientCount, nil, nil - } - defer resp2.Body.Close() - - if resp2.StatusCode == http.StatusOK { - var listResp frpsProxiesResponse - if err := json.NewDecoder(resp2.Body).Decode(&listResp); err == nil { - for _, p := range listResp.Proxies { - proxies = append(proxies, service.RelayProxyStat{ - Name: p.Name, - Type: p.Type, - Status: p.Status, - ClientAddr: p.ClientAddr, - LastStartTime: p.LastStartTime, - LastCloseTime: p.LastCloseTime, - }) - } - } - } - - return connections, proxyCount, clientCount, proxies, nil -} - func (m *Manager) GetRuntimeStatus() RuntimeStatus { m.mu.RLock() status := m.status @@ -180,29 +76,13 @@ func (m *Manager) GetRuntimeStatus() RuntimeStatus { cmd := m.cmd m.mu.RUnlock() - connections := 0 - proxyCount := 0 - clientCount := 0 - var proxies []service.RelayProxyStat - - if cmd != nil && cmd.Process != nil && status == "healthy" { - if conns, pCount, cCount, pxs, err := m.fetchFrpsTelemetry(); err == nil { - connections = conns - proxyCount = pCount - clientCount = cCount - proxies = pxs - } else { - slog.Debug("failed to fetch frps telemetry", "error", err) - } - } - return RuntimeStatus{ Status: status, LastError: lastError, - Connections: connections, - ProxyCount: proxyCount, - ClientCount: clientCount, - Proxies: proxies, + Connections: 0, + ProxyCount: 0, + ClientCount: 0, + Proxies: nil, ProcessAlive: cmd != nil && cmd.Process != nil, } } diff --git a/openflare_server/service/relay.go b/openflare_server/service/relay.go index 958bff7d..0be21554 100644 --- a/openflare_server/service/relay.go +++ b/openflare_server/service/relay.go @@ -1,7 +1,6 @@ package service import ( - "encoding/json" "errors" "fmt" "log/slog" @@ -152,20 +151,13 @@ func persistRelayHeartbeatObservability(nodeID string, payload RelayHeartbeatPay HealthEvents: payload.HealthEvents, }, reportedAt) - var proxiesJSON string - if len(payload.FrpsProxies) > 0 { - if data, err := json.Marshal(payload.FrpsProxies); err == nil { - proxiesJSON = string(data) - } - } - frpsObs := &model.NodeObservationFrps{ NodeID: nodeID, CapturedAt: reportedAt, - FrpsConnections: payload.FrpsConnCount, - FrpsProxyCount: payload.FrpsProxyCount, - FrpsClientCount: payload.FrpsClientCount, - FrpsProxies: proxiesJSON, + FrpsConnections: 0, + FrpsProxyCount: 0, + FrpsClientCount: 0, + FrpsProxies: "", } _ = frpsObs.Insert() } diff --git a/openflare_server/service/relay_test.go b/openflare_server/service/relay_test.go index e9c41dc2..ec8db4a5 100644 --- a/openflare_server/service/relay_test.go +++ b/openflare_server/service/relay_test.go @@ -93,7 +93,8 @@ func TestHeartbeatRelayPersistsRuntimeAndObservability(t *testing.T) { if observability.RelayDashboard == nil { t.Fatal("expected relay dashboard snapshot") } - if observability.RelayDashboard.TotalConnections != 7 || observability.RelayDashboard.TotalProxies != 3 { + if observability.RelayDashboard.TotalConnections != 0 || observability.RelayDashboard.TotalProxies != 0 { + // Frps telemetry collection is disabled; dashboard values are always zero. t.Fatalf("unexpected relay dashboard: %+v", observability.RelayDashboard) } } diff --git a/openflare_server/web/features/nodes/components/node-editor-modal.tsx b/openflare_server/web/features/nodes/components/node-editor-modal.tsx index 1cad19aa..67a27a40 100644 --- a/openflare_server/web/features/nodes/components/node-editor-modal.tsx +++ b/openflare_server/web/features/nodes/components/node-editor-modal.tsx @@ -143,7 +143,7 @@ const defaultValues: NodeEditorValues = { relay_client_access_addr: '', relay_agent_access_addr: '', relay_client_proxy_url: '', - relay_web_server_enabled: false, + relay_web_server_enabled: true, geo_manual_override: false, geo_region: '', geo_name: '', diff --git a/openflare_server/web/features/nodes/components/relay-detail-page.tsx b/openflare_server/web/features/nodes/components/relay-detail-page.tsx index c573f6ad..f30c46cf 100644 --- a/openflare_server/web/features/nodes/components/relay-detail-page.tsx +++ b/openflare_server/web/features/nodes/components/relay-detail-page.tsx @@ -461,53 +461,6 @@ export function RelayDetailPage({ node }: { node: NodeItem }) { {activeTab === 'dashboard' ? ( <> -
- - - - -
-
{observabilityQuery.isLoading ? ( @@ -780,65 +733,7 @@ export function RelayDetailPage({ node }: { node: NodeItem }) {
-
- - {observability?.relay_dashboard?.proxies?.length ? ( -
- - - - - - - - - - - - {observability.relay_dashboard.proxies.map((proxy) => ( - - - - - - - - ))} - -
- 代理名称 (Proxy Name) - 代理类型在线状态 - 客户端接入地址 - - 最近连接时间 -
- {proxy.name} - {proxy.type} - - {proxy.client_addr} - {isMeaningfulTime(proxy.last_start_time) - ? formatRelativeTime(proxy.last_start_time) - : '—'} -
-
- ) : ( - - )} -
-
+ ) : null}