agent 0.10.0:新增 GET /api/v1/metrics(资源采集,复用 internal/sysinfo;CPU 两次采样差值 + 1 秒内复用上次结果)、GET /api/v1/logs/nginx(日志尾部,路径白名单来自 nginx -T / 环境变量 / 默认目录,32KB 块倒读、单行 4KB 截断、上限 2000 行)、GET /api/v1/frps/config(frps.toml 回读,256KB 上限) internal/sysinfo:补 LoadAvg 与 UptimeSeconds(Linux /proc/loadavg 与 /proc/uptime、Windows GetTickCount64、其它平台空值) 应用侧:AgentClient 三个只读方法;request 错误改为带状态码的 statusError,新增 ErrAgentEndpointMissing,把 404/405 统一转成「agent 版本过低需 ≥ 0.10.0」提示;补 service/handler/router 前端:公网 Agent 页「VPS 资源」横排带(占满环境与依赖整行);日志中心「公网 Nginx」页签;frps 同源配置弹窗「比对 VPS 实际文件」 二进制:内嵌 fonu-agent-linux-amd64 / arm64 用新代码重编;VERSION → 1.2.4
43 lines
1.4 KiB
Go
43 lines
1.4 KiB
Go
package frp
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
)
|
|
|
|
// 以下三个方法对应 agent 0.10.0 新增的只读端点;老版本 agent 会返回
|
|
// 「agent 版本过低」的提示(见 AgentClient 的 wrapEndpointMissing),而不是原始 HTTP 错误。
|
|
|
|
// AgentMetrics 返回 VPS 主机资源(CPU / 内存 / 磁盘 / 负载 / 运行时长)
|
|
func (s *Service) AgentMetrics(ctx context.Context, serverID int64) (map[string]any, error) {
|
|
client, ok := s.agentClient(ctx, serverID)
|
|
if !ok {
|
|
return nil, fmt.Errorf("公网 agent 未配置或 Token 未保存")
|
|
}
|
|
return client.Metrics(ctx)
|
|
}
|
|
|
|
// AgentNginxLogs 读取 VPS 上 Nginx 的 access / error 日志尾部
|
|
func (s *Service) AgentNginxLogs(ctx context.Context, serverID int64, kind string, lines int) (map[string]any, error) {
|
|
client, ok := s.agentClient(ctx, serverID)
|
|
if !ok {
|
|
return nil, fmt.Errorf("公网 agent 未配置或 Token 未保存")
|
|
}
|
|
if kind != "access" && kind != "error" {
|
|
kind = "access"
|
|
}
|
|
if lines <= 0 || lines > 2000 {
|
|
lines = 200
|
|
}
|
|
return client.NginxLogs(ctx, kind, lines)
|
|
}
|
|
|
|
// AgentFRPSConfig 回读 VPS 上的 frps.toml,供与「即将下发的内容」比对
|
|
func (s *Service) AgentFRPSConfig(ctx context.Context, serverID int64) (map[string]any, error) {
|
|
client, ok := s.agentClient(ctx, serverID)
|
|
if !ok {
|
|
return nil, fmt.Errorf("公网 agent 未配置或 Token 未保存")
|
|
}
|
|
return client.FRPSConfig(ctx)
|
|
}
|