feat: 18 引擎驱动全家桶 + 驱动管理/离线包 + 设置中心 + 工作台交互打磨
驱动接入(全部本机真实例验收): - Elasticsearch 原生 SQL API、InfluxDB 原生 HTTP+Flux(官方 JDBC 付费许可,实测弃用) - ZooKeeper/MongoDB JVM agent(连接时自动下载官方驱动 jar,sha256 钉版本到 ~/.opsxdb/drivers/) - 达梦 JDBC agent 桥就绪(待厂商 jar+实例);TiDB 真实例验收 - 协议族代码审查放行 PolarDB/TDSQL/OceanBase/Kingbase/GaussDB/Oracle - 驱动能力模型:按驱动开关对象树分组/右键菜单/行编辑,NoSQL 树拍平(对象直挂库节点) 驱动管理: - 驱动管理弹框(状态/预装/离线包导入/JDK 检测)+ /api/drivers/* 三接口 - opsxdb-driver 驱动商店仓库(清单/fetch.sh/pack.sh 离线包/import.sh) - 连接时懒加载:DMG 零 Java 产物,首连自动下载(实测 ZK 九件套 1.35s),离线包自动回退 UI/交互: - 设置中心(⚙):常规/执行/结果/驱动/快捷键/关于,左导航+右面板(对标 opsxshell) - 实例级展开箭头(行首 SVG chevron,替代字体回退失真的 Unicode 三角) - 树内嵌套渲染修复:对象树挂在激活连接下;工具栏窄窗口不断行(按钮 nowrap+整颗换行) - 侧栏连接行精简(图标+连接名)、SQLite SSH 守卫、Oracle 死参数清理 质量: - Go 协议层/离线回退单测、E2E 门控测试(ES/ZK/Influx/Mongo/TiDB/JDBC 桥) - 驱动注册表单一事实来源 connection-types.json,README/BACKLOG/AGENTS 同步
This commit is contained in:
1 parent
26f459d1b8
commit
a9510235bb
156 files changed
+17200
-2520
No files matched your search
@@ -1,15 +1,16 @@
|
||||
#!/usr/bin/env bash
|
||||
# OpsxDB launcher — scene profiles, not random process soup
|
||||
#
|
||||
# ./run.sh # = web
|
||||
# ./run.sh web # Gin 代理 + Vite(浏览器)
|
||||
# ./run.sh gui # Vite + Tauri 桌面(Gin 可选;默认也拉起方便对照)
|
||||
# ./run.sh all # Gin + Vite + Desktop
|
||||
# ./run.sh server|web-only|desktop # 单组件
|
||||
# ./run.sh # = web:仅 Gin 官网 + docs(:8788)
|
||||
# ./run.sh web # 同上(浏览器不当客户端)
|
||||
# ./run.sh gui # 桌面唯一操作入口:Vite(本机给 Tauri) + Tauri + 默认 Gin
|
||||
# ./run.sh all # 同 gui(兼容旧命令;不再起「浏览器工作台产品」)
|
||||
# ./run.sh server|desktop # 单组件
|
||||
# ./run.sh package # Tauri 安装包 + sidecar
|
||||
# ./run.sh stop|restart|status|help
|
||||
#
|
||||
# 设计:一份 Vite UI,Web/GUI 共用;Gin 对 Web 刚需,对 GUI 可选。
|
||||
# 产品形态:浏览器 = 官网/docs;操作 = 桌面 Tauri。
|
||||
# apps/web 的 Vite 仅作桌面打包/devUrl 源,不要用浏览器当工作台。
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
@@ -39,7 +40,45 @@ SERVER_LOG="$LOG_DIR/server.log"
|
||||
WEB_LOG="$LOG_DIR/web.log"
|
||||
DESKTOP_LOG="$LOG_DIR/desktop.log"
|
||||
|
||||
export PATH="${HOME}/.nvm/versions/node/v24.19.0/bin:/opt/homebrew/bin:/usr/local/bin:${HOME}/.cargo/bin:$PATH"
|
||||
# node/npm 不在此强制注入,由 detect_node 按需探测(start_web/start_desktop 前调用)。
|
||||
export PATH="/opt/homebrew/bin:/usr/local/bin:${HOME}/.cargo/bin:$PATH"
|
||||
|
||||
# detect_node 探测 node/npm:PATH 已有直接用;否则依次探测
|
||||
# $NVM_DIR/versions/node、~/.nvm/versions/node(取最高版本)、homebrew、/usr/local。
|
||||
# 找不到给出清晰报错并退出。结果写入 NODE_BIN_DIR 供 launchctl/nohup 子 shell 使用。
|
||||
NODE_BIN_DIR=""
|
||||
detect_node() {
|
||||
if command -v node >/dev/null 2>&1 && command -v npm >/dev/null 2>&1; then
|
||||
NODE_BIN_DIR="$(cd "$(dirname "$(command -v node)")" && pwd)"
|
||||
return 0
|
||||
fi
|
||||
local roots=() d v best=""
|
||||
[ -n "${NVM_DIR:-}" ] && roots+=("$NVM_DIR/versions/node")
|
||||
roots+=("${HOME}/.nvm/versions/node")
|
||||
for d in "${roots[@]}"; do
|
||||
[ -d "$d" ] || continue
|
||||
v="$(ls -1 "$d" 2>/dev/null | sort -V | tail -n 1)"
|
||||
if [ -n "$v" ] && [ -x "$d/$v/bin/node" ]; then
|
||||
best="$d/$v/bin"
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ -z "$best" ]; then
|
||||
for d in /opt/homebrew/bin /usr/local/bin; do
|
||||
if [ -x "$d/node" ]; then
|
||||
best="$d"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
if [ -z "$best" ]; then
|
||||
error "未找到 node/npm。请先安装 Node.js(https://nodejs.org)或 nvm,或设置 NVM_DIR 后重试。"
|
||||
exit 1
|
||||
fi
|
||||
NODE_BIN_DIR="$best"
|
||||
export PATH="$NODE_BIN_DIR:$PATH"
|
||||
info "使用 Node.js: $NODE_BIN_DIR"
|
||||
}
|
||||
|
||||
check_port() { lsof -ti:"$1" 2>/dev/null | head -1 || true; }
|
||||
|
||||
@@ -72,6 +111,7 @@ stop_detached() {
|
||||
}
|
||||
|
||||
ensure_npm() {
|
||||
detect_node
|
||||
if [ ! -d "$SCRIPT_DIR/node_modules" ]; then
|
||||
warning "缺少 node_modules,正在 npm install..."
|
||||
npm install
|
||||
@@ -84,7 +124,8 @@ ensure_npm() {
|
||||
|
||||
build_server() {
|
||||
info "编译 Gin 服务..."
|
||||
(cd "$SCRIPT_DIR/$SERVER_DIR" && go build -o "$SCRIPT_DIR/$SERVER_DIR/bin/$SERVER_BIN" ./cmd/opsxdb)
|
||||
# -trimpath 去本地路径;-ldflags "-s -w" 去符号表/调试信息;CGO_ENABLED=0 静态化减体积
|
||||
(cd "$SCRIPT_DIR/$SERVER_DIR" && CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o "$SCRIPT_DIR/$SERVER_DIR/bin/$SERVER_BIN" ./cmd/opsxdb)
|
||||
}
|
||||
|
||||
wait_http() {
|
||||
@@ -128,21 +169,25 @@ stop_server() {
|
||||
success "后端已停止"
|
||||
}
|
||||
|
||||
start_web() {
|
||||
# 仅供桌面 Tauri devUrl / 打包源;不是浏览器产品入口
|
||||
start_vite_for_desktop() {
|
||||
if curl -fsS "http://127.0.0.1:$WEB_PORT/" >/dev/null 2>&1; then
|
||||
success "Web 已在运行 :$WEB_PORT"
|
||||
success "桌面 UI(Vite) 已在运行 :$WEB_PORT"
|
||||
return 0
|
||||
fi
|
||||
info "启动 Web UI :$WEB_PORT ..."
|
||||
info "启动桌面 UI 源 :$WEB_PORT(仅本机给 Tauri,勿当浏览器客户端)..."
|
||||
: >"$WEB_LOG"
|
||||
ensure_npm
|
||||
kill_port "$WEB_PORT"
|
||||
start_detached "$WEB_LABEL" "$WEB_LOG" \
|
||||
"export PATH=\"/Users/logan/.nvm/versions/node/v24.19.0/bin:/opt/homebrew/bin:/usr/local/bin:\$PATH\"; cd \"$SCRIPT_DIR\" && exec npm run dev -w @opsxdb/web"
|
||||
"export PATH=\"$NODE_BIN_DIR:/opt/homebrew/bin:/usr/local/bin:\$PATH\"; cd \"$SCRIPT_DIR\" && exec npm run dev -w @opsxdb/web"
|
||||
wait_http "http://127.0.0.1:$WEB_PORT/" "Web UI" 80
|
||||
success "Web UP http://127.0.0.1:$WEB_PORT"
|
||||
success "桌面 UI(Vite) UP http://127.0.0.1:$WEB_PORT(请用 ./run.sh gui,勿当工作台)"
|
||||
}
|
||||
|
||||
# 兼容旧名
|
||||
start_web() { start_vite_for_desktop; }
|
||||
|
||||
stop_web() {
|
||||
stop_detached "$WEB_LABEL"
|
||||
kill_port "$WEB_PORT"
|
||||
@@ -150,8 +195,8 @@ stop_web() {
|
||||
}
|
||||
|
||||
start_desktop() {
|
||||
# GUI 依赖同一份 Vite;先保证 5174
|
||||
start_web
|
||||
# GUI 依赖同一份 Vite 源;先保证 5174(仅本机)
|
||||
start_vite_for_desktop
|
||||
info "启动桌面 OpsxDB ..."
|
||||
: >"$DESKTOP_LOG"
|
||||
ensure_npm
|
||||
@@ -160,7 +205,7 @@ start_desktop() {
|
||||
pkill -f 'target/debug/opsxdb-desktop' 2>/dev/null || true
|
||||
stop_detached "$DESKTOP_LABEL"
|
||||
start_detached "$DESKTOP_LABEL" "$DESKTOP_LOG" \
|
||||
"export PATH=\"/Users/logan/.nvm/versions/node/v24.19.0/bin:/opt/homebrew/bin:/usr/local/bin:\$HOME/.cargo/bin:\$PATH\"; cd \"$SCRIPT_DIR/apps/desktop\" && exec npm run tauri -- dev"
|
||||
"export PATH=\"$NODE_BIN_DIR:/opt/homebrew/bin:/usr/local/bin:\$HOME/.cargo/bin:\$PATH\"; cd \"$SCRIPT_DIR/apps/desktop\" && exec npm run tauri -- dev"
|
||||
|
||||
local i=0
|
||||
while true; do
|
||||
@@ -200,9 +245,13 @@ status() {
|
||||
warning "server :$SERVER_PORT DOWN"
|
||||
fi
|
||||
if curl -fsS "http://127.0.0.1:$WEB_PORT/" >/dev/null 2>&1; then
|
||||
success "web :$WEB_PORT UP http://127.0.0.1:$WEB_PORT"
|
||||
success "vite :$WEB_PORT UP(桌面源,非浏览器产品)"
|
||||
else
|
||||
warning "web :$WEB_PORT DOWN"
|
||||
warning "vite :$WEB_PORT DOWN"
|
||||
fi
|
||||
if curl -fsS "http://127.0.0.1:$SERVER_PORT/home" >/dev/null 2>&1 \
|
||||
|| curl -fsS "http://127.0.0.1:$SERVER_PORT/docs" >/dev/null 2>&1; then
|
||||
success "site :$SERVER_PORT 官网/docs 可达"
|
||||
fi
|
||||
if pgrep -f 'target/debug/OpsxDB' >/dev/null 2>&1 \
|
||||
|| pgrep -f 'target/debug/opsxdb-desktop' >/dev/null 2>&1; then
|
||||
@@ -238,29 +287,31 @@ package_desktop() {
|
||||
|
||||
usage() {
|
||||
cat <<USAGE
|
||||
$PROJECT_NAME 启动脚本(场景 profile)
|
||||
$PROJECT_NAME 启动脚本(产品形态:浏览器=官网/docs · 操作=桌面)
|
||||
|
||||
./run.sh # 同 web
|
||||
./run.sh web # 浏览器:Gin + Vite
|
||||
./run.sh gui # 桌面:Vite + Tauri(默认也起 Gin,OPSXDB_GUI_WITH_SERVER=0 可关)
|
||||
./run.sh all # Gin + Vite + Desktop
|
||||
./run.sh web # 仅 Gin:官网 + docs → http://127.0.0.1:$SERVER_PORT/
|
||||
./run.sh gui # 桌面唯一操作入口(Vite 本机源 + Tauri;默认也起 Gin)
|
||||
./run.sh all # 同 gui(兼容旧名)
|
||||
|
||||
./run.sh server # 只 Gin
|
||||
./run.sh web-only # 只 Vite
|
||||
./run.sh desktop # 只 Desktop(会确保 Vite)
|
||||
./run.sh server # 只 Gin(官网/docs + API)
|
||||
./run.sh desktop # 只 Desktop(会起本机 Vite 源)
|
||||
./run.sh package # 打桌面安装包
|
||||
|
||||
./run.sh stop | restart | status | help
|
||||
|
||||
端口: server $SERVER_PORT / web $WEB_PORT
|
||||
端口: Gin/官网 $SERVER_PORT · 桌面 Vite 源 $WEB_PORT(不对外当客户端)
|
||||
日志: logs/{server,web,desktop}.log
|
||||
USAGE
|
||||
}
|
||||
|
||||
start_web_scene() {
|
||||
# 产品:浏览器只开官网/docs,不起 Vite 工作台
|
||||
start_server
|
||||
start_web
|
||||
stop_web || true
|
||||
echo
|
||||
success "Web 场景就绪 → http://127.0.0.1:$WEB_PORT"
|
||||
success "官网/文档就绪 → http://127.0.0.1:$SERVER_PORT/ · docs → http://127.0.0.1:$SERVER_PORT/docs"
|
||||
info "操作请用 ./run.sh gui(桌面)。:5174 不是产品入口。"
|
||||
}
|
||||
|
||||
start_gui_scene() {
|
||||
@@ -275,11 +326,8 @@ start_gui_scene() {
|
||||
}
|
||||
|
||||
start_all_scene() {
|
||||
start_server
|
||||
start_web
|
||||
start_desktop
|
||||
echo
|
||||
success "All 就绪:Web + Desktop + Gin"
|
||||
# 与 gui 同:桌面操作 + Gin;不起「浏览器工作台产品」语义
|
||||
start_gui_scene
|
||||
}
|
||||
|
||||
stop_all() {
|
||||
@@ -295,7 +343,10 @@ case "$cmd" in
|
||||
all) start_all_scene ;;
|
||||
server) start_server ;;
|
||||
package|dist) package_desktop ;;
|
||||
web-only) start_web ;;
|
||||
web-only|vite)
|
||||
warning "已弃用浏览器工作台。Vite 仅桌面源;请用: ./run.sh gui"
|
||||
start_vite_for_desktop
|
||||
;;
|
||||
desktop|gui-only) start_desktop ;;
|
||||
stop) stop_all ;;
|
||||
restart)
|
||||
|
||||
Reference in new issue
Block a user