mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-06-09 07:59:33 +08:00
- 新增 JVM 连接配置与共享 DTO,补齐 JMX 和 Endpoint 契约 - 实现后端归一化规则,支持默认只读、模式回退和 JMX 端口兜底 - 新增前端 JVM 默认值与配置构建工具,统一模式环境和端口收敛 - 补充 Go 与 Vitest 用例并更新需求追踪,记录 Task 1 验证证据
83 lines
1.8 KiB
Go
83 lines
1.8 KiB
Go
package jvm
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"GoNavi-Wails/internal/connection"
|
|
)
|
|
|
|
const defaultJMXPort = 9010
|
|
|
|
func NormalizeConnectionConfig(raw connection.ConnectionConfig) (connection.ConnectionConfig, error) {
|
|
cfg := raw
|
|
if strings.ToLower(strings.TrimSpace(cfg.Type)) != "jvm" {
|
|
return connection.ConnectionConfig{}, fmt.Errorf("unexpected connection type: %s", cfg.Type)
|
|
}
|
|
|
|
cfg.Type = "jvm"
|
|
cfg.JVM.Environment = strings.ToLower(strings.TrimSpace(cfg.JVM.Environment))
|
|
if cfg.JVM.ReadOnly == nil {
|
|
cfg.JVM.ReadOnly = boolPtr(true)
|
|
}
|
|
if cfg.JVM.JMX.Port <= 0 {
|
|
if cfg.Port > 0 {
|
|
cfg.JVM.JMX.Port = cfg.Port
|
|
} else {
|
|
cfg.JVM.JMX.Port = defaultJMXPort
|
|
}
|
|
}
|
|
|
|
cfg.JVM.AllowedModes = normalizeModes(cfg.JVM.AllowedModes)
|
|
|
|
preferredMode := strings.ToLower(strings.TrimSpace(cfg.JVM.PreferredMode))
|
|
if preferredMode == "" || !containsMode(cfg.JVM.AllowedModes, preferredMode) {
|
|
cfg.JVM.PreferredMode = cfg.JVM.AllowedModes[0]
|
|
} else {
|
|
cfg.JVM.PreferredMode = preferredMode
|
|
}
|
|
|
|
return cfg, nil
|
|
}
|
|
|
|
func normalizeModes(input []string) []string {
|
|
if len(input) == 0 {
|
|
return []string{ModeJMX}
|
|
}
|
|
|
|
result := make([]string, 0, len(input))
|
|
seen := make(map[string]struct{}, len(input))
|
|
for _, item := range input {
|
|
mode := strings.ToLower(strings.TrimSpace(item))
|
|
switch mode {
|
|
case ModeJMX, ModeEndpoint, ModeAgent:
|
|
default:
|
|
continue
|
|
}
|
|
if _, exists := seen[mode]; exists {
|
|
continue
|
|
}
|
|
seen[mode] = struct{}{}
|
|
result = append(result, mode)
|
|
}
|
|
|
|
if len(result) == 0 {
|
|
return []string{ModeJMX}
|
|
}
|
|
return result
|
|
}
|
|
|
|
func containsMode(items []string, target string) bool {
|
|
normalizedTarget := strings.ToLower(strings.TrimSpace(target))
|
|
for _, item := range items {
|
|
if strings.ToLower(strings.TrimSpace(item)) == normalizedTarget {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func boolPtr(value bool) *bool {
|
|
return &value
|
|
}
|