同步完整源码至远程:扁平化重构现状 + 未入库源文件

- 补入库:server/internal/db/dump.go、redis 分页/扫描预算测试、opsxdb-mcp main_test、
  packages/opsxdb-mcp package-lock、docs 审计与对比文档等 37 个新文件
- 含结构扁平化进行中的 80 处修改与 155 处旧结构删除(server/ src/ src-tauri/ 为当前有效源)
- 构建产物(bin/target/dist)与签名私钥仍按规则排除
This commit is contained in:
logan committed 2026-10-16 03:47:33 +08:00
1 parent 5c0be49217
commit 2c0bfafd8d
269 files changed
+10372 -16435

No files matched your search

+44 -26
View File
@@ -18,10 +18,10 @@ import (
"crypto/sha1"
"crypto/sha256"
"encoding/hex"
"hash"
"encoding/json"
"errors"
"fmt"
"hash"
"io"
"net/http"
"os"
@@ -215,13 +215,9 @@ func (b *cappedBuffer) String() string {
// StartAgent 按 spec 启动(或复用)JVM agent 进程并完成握手。
// agent jar 与开源驱动 jar 在首次连接时按需下载(DMG 不打包 Java 产物,保持安装包瘦身)。
func StartAgent(spec AgentSpec) (*AgentClient, error) {
javaBin := os.Getenv("OPSXDB_JAVA_BIN")
if javaBin == "" {
p, err := exec.LookPath("java")
if err != nil {
return nil, errors.New("未找到 java:请安装 JDK 17+ 或设置 OPSXDB_JAVA_BIN")
}
javaBin = p
javaBin, _, err := agentJavaRuntime()
if err != nil {
return nil, err
}
if err := ensureAgentRuntime(spec); err != nil {
return nil, err
@@ -1019,27 +1015,21 @@ type JarStatus struct {
type DriverStatus struct {
ID string `json:"id"`
Label string `json:"label"`
Runtime string `json:"runtime"` // agent
License string `json:"license"` // oss / proprietary
AutoFetch bool `json:"autoFetch"` // 开源可自动下载
Runtime string `json:"runtime"` // agent
License string `json:"license"` // oss / proprietary
AutoFetch bool `json:"autoFetch"` // 开源可自动下载
Jars []JarStatus `json:"jars"`
AllInstalled bool `json:"allInstalled"`
JDKRequired bool `json:"jdkRequired"` // agent 驱动恒 true
JDKRequired bool `json:"jdkRequired"` // agent 驱动恒 true
JDKOK bool `json:"jdkOk"`
JavaVersion string `json:"javaVersion"` // 探测到的版本(如 21.0.12)
AgentInstalled bool `json:"agentInstalled"` // agent jar 是否就位
OfflinePack bool `json:"offlinePack"` // 离线驱动包是否就位
AgentInstalled bool `json:"agentInstalled"` // agent jar 是否就位
OfflinePack bool `json:"offlinePack"` // 离线驱动包是否就位
}
// DriversStatus 汇总所有 agent 驱动的安装状态,供驱动管理界面展示。
func DriversStatus() []DriverStatus {
javaBin, _ := exec.LookPath("java")
javaVersion := ""
if javaBin != "" {
if out, err := exec.Command(javaBin, "-version").CombinedOutput(); err == nil {
javaVersion = parseJavaVersion(string(out))
}
}
_, javaVersion, javaErr := agentJavaRuntime()
_, offlineErr := os.Stat(offlinePackPath())
out := []DriverStatus{}
@@ -1057,7 +1047,7 @@ func DriversStatus() []DriverStatus {
Runtime: "agent",
AutoFetch: auto,
JDKRequired: true,
JDKOK: javaBin != "",
JDKOK: javaErr == nil,
JavaVersion: javaVersion,
OfflinePack: offlineErr == nil,
AgentInstalled: fileExists(filepath.Join(agentDir(), agentJarName)),
@@ -1103,10 +1093,8 @@ func InstallDriver(driverKey string) error {
if !ok {
return fmt.Errorf("未知 agent 驱动: %s", driverKey)
}
if _, err := exec.LookPath(os.Getenv("OPSXDB_JAVA_BIN")); err != nil && os.Getenv("OPSXDB_JAVA_BIN") == "" {
if _, err := exec.LookPath("java"); err != nil {
return fmt.Errorf("未找到 java,请先安装 JDK 17+")
}
if _, _, err := agentJavaRuntime(); err != nil {
return err
}
return ensureAgentRuntime(spec)
}
@@ -1159,6 +1147,9 @@ func ImportOfflinePack(zipPath string) (int, error) {
if !strings.HasPrefix(rel, "agent/") && !strings.HasPrefix(rel, "libs/") && !strings.HasPrefix(rel, "drivers/") {
continue
}
if !filepath.IsLocal(filepath.FromSlash(rel)) {
return imported, fmt.Errorf("离线包包含非法路径: %s", rel)
}
rc, err := f.Open()
if err != nil {
return imported, err
@@ -1209,3 +1200,30 @@ func parseJavaVersion(out string) string {
}
return ""
}
// agentJavaRuntime 与实际启动使用同一 Java 路径,避免设置页把旧版 Java 误报为就绪。
func agentJavaRuntime() (string, string, error) {
javaBin := os.Getenv("OPSXDB_JAVA_BIN")
if javaBin == "" {
javaBin = "java"
}
path, err := exec.LookPath(javaBin)
if err != nil {
return "", "", errors.New("未找到 Java,请安装 Java 17+ 或设置 OPSXDB_JAVA_BIN")
}
out, err := exec.Command(path, "-version").CombinedOutput()
version := parseJavaVersion(string(out))
if err != nil {
return path, version, fmt.Errorf("Java 运行失败: %w", err)
}
major := 0
if strings.HasPrefix(version, "1.") {
fmt.Sscanf(version, "1.%d", &major)
} else {
fmt.Sscanf(version, "%d", &major)
}
if major < 17 {
return path, version, fmt.Errorf("Java %s 不受支持,agent 需要 Java 17+", version)
}
return path, version, nil
}