feat(alert-center): 添加飞书Webhook通知渠道 + 告警引擎实时通知

- 后端: NotifyChannel 模型新增 feishu 类型, FeishuWebhookConfig
- 后端: TestNotifyChannel 真实发送飞书测试消息(文本格式)
- 后端: 告警引擎触发/恢复时自动发送飞书通知(sendFeishuAlert/sendFeishuRecovery)
- 后端: AlertEngine 新增 tcp_time_wait/tcp_close_wait/service_process 指标检测
- 后端: NetworkStatModel 新增 TCPCloseWait 字段
- 后端: QuickSetupRules 一键创建6条告警规则(CPU/内存/磁盘/TIME_WAIT/CLOSE_WAIT/进程)
- 后端: 注册 /alerts/quick-setup 路由
- 前端: AlertChannelDialog 新增飞书类型选项
- 前端: helpers 新增 getChannelIcon/getChannelTypeLabel 支持 feishu/dingtalk/wechat
This commit is contained in:
attacker committed 2026-06-24 08:34:43 +00:00
1 parent 7bc5169e8f
commit 5333f6f04a
30 files changed
+2406 -1001

No files matched your search

+106 -75
View File
@@ -57,30 +57,51 @@ func (DeployTool) TableName() string {
}
// ============================================
// 预置工具定义(Seeder)
// 预置工具定义(Seeder)— 精简版 v2
// 移除: kubectl(Dockerfile 预装)、helm(非核心)
// 新增: nvm(管理 Node 版本)、jdk(Java 构建)
// ============================================
// PredefinedTools 返回系统预置的工具配置列表
func PredefinedTools() []DeployTool {
return []DeployTool{
// ──── JDK — Java 构建 // Logan.Li ────
{
Name: "kubectl",
DisplayName: "Kubectl",
Description: "Kubernetes 命令行工具,用于 K8s 集群交互(已预装在镜像中)",
Category: "k8s",
InstallMethod: ToolPreinstall,
BinaryName: "kubectl",
InstallPath: "/usr/local/bin/kubectl",
CheckCommand: "kubectl version --client --short 2>/dev/null || kubectl version --client 2>/dev/null",
VersionURL: "https://dl.k8s.io/release/stable.txt",
DownloadURL: "https://dl.k8s.io/release/{version}/bin/linux/amd64/kubectl",
DefaultVersion: "v1.32.0",
SortOrder: 1,
Name: "jdk",
DisplayName: "JDK (Java)",
Description: "Java 开发工具包,流水线 Java/Maven 构建阶段使用",
Category: "build",
InstallMethod: ToolLazy,
BinaryName: "java",
InstallPath: "/usr/local/bin/java",
CheckCommand: "java -version 2>&1 | head -1",
VersionURL: "https://api.adoptium.net/v3/info/release_versions?heap_size=normal&image_type=jdk&page=0&page_size=1&project=jdk&release_type=ga&semver=false&sort_method=DEFAULT&sort_order=DESC&version=%5B17%2C99%5D",
DownloadURL: "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-{version}/OpenJDK17U-jdk_x64_linux_hotspot_{version}.tar.gz",
DefaultVersion: "17.0.13+7",
InstallScript: `#!/bin/sh
# JDK lazy install — Temurin OpenJDK
JDK_VERSION="${TOOL_VERSION:-17.0.13+7}"
JDK_MAJOR=$(echo "$JDK_VERSION" | cut -d. -f1)
JDK_URL="https://github.com/adoptium/temurin${JDK_MAJOR}-binaries/releases/download/jdk-${JDK_VERSION}/OpenJDK${JDK_MAJOR}U-jdk_x64_linux_hotspot_${JDK_VERSION}.tar.gz"
echo "[JDK] Downloading ${JDK_VERSION}..."
cd /tmp
curl -sL "$JDK_URL" -o jdk.tar.gz
tar xzf jdk.tar.gz
mkdir -p /usr/local/share
mv jdk-${JDK_VERSION} /usr/local/share/jdk
ln -sf /usr/local/share/jdk/bin/java /usr/local/bin/java
ln -sf /usr/local/share/jdk/bin/javac /usr/local/bin/javac
ln -sf /usr/local/share/jdk/bin/jar /usr/local/bin/jar
rm -f jdk.tar.gz
echo "[JDK] Installed: $(java -version 2>&1 | head -1)"
`,
SortOrder: 1,
},
// ──── Maven — Java 构建 // Logan.Li ────
{
Name: "maven",
DisplayName: "Maven",
Description: "Java 项目构建工具,流水线 Java 构建阶段使用",
Description: "Java 项目构建工具,流水线 Java 构建阶段使用(依赖 JDK)",
Category: "build",
InstallMethod: ToolLazy,
BinaryName: "mvn",
@@ -102,87 +123,97 @@ mv apache-maven-${MAVEN_VERSION} /usr/local/share/maven
ln -sf /usr/local/share/maven/bin/mvn /usr/local/bin/mvn
rm -f maven.tar.gz
echo "[Maven] Installed: $(mvn --version 2>&1 | head -1)"
`,
`,
SortOrder: 2,
},
// ──── NVM — Node Version Manager // Logan.Li ────
{
Name: "nvm",
DisplayName: "NVM (Node 版本管理)",
Description: "Node 版本管理器,流水线 Node.js 构建阶段使用(node 依赖此工具)",
Category: "build",
InstallMethod: ToolLazy,
BinaryName: "nvm",
InstallPath: "/usr/local/share/nvm/nvm.sh",
CheckCommand: "source /usr/local/share/nvm/nvm.sh 2>/dev/null && nvm --version 2>/dev/null",
VersionURL: "https://api.github.com/repos/nvm-sh/nvm/releases/latest",
DefaultVersion: "0.40.1",
InstallScript: `#!/bin/sh
# NVM lazy install
NVM_VERSION="${TOOL_VERSION:-0.40.1}"
NVM_DIR="/usr/local/share/nvm"
echo "[NVM] Downloading ${NVM_VERSION}..."
mkdir -p "$NVM_DIR"
curl -sL "https://raw.githubusercontent.com/nvm-sh/nvm/v${NVM_VERSION}/install.sh" | NVM_DIR="$NVM_DIR" bash
# Make available system-wide via profile.d
cat > /etc/profile.d/nvm.sh << 'NVM_PROFILE'
export NVM_DIR="/usr/local/share/nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
NVM_PROFILE
chmod +x /etc/profile.d/nvm.sh
echo "[NVM] Installed: v${NVM_VERSION}"
`,
SortOrder: 3,
},
// ──── Node.js — 通过 NVM 安装 // Logan.Li ────
{
Name: "nodejs",
DisplayName: "Node.js + npm",
Description: "前端构建工具,流水线 npm install/build 阶段使用",
Description: "前端构建工具,流水线 npm install/build 阶段使用(通过 NVM 安装)",
Category: "build",
InstallMethod: ToolLazy,
BinaryName: "node",
InstallPath: "/usr/local/bin/node",
CheckCommand: "node --version 2>/dev/null",
DownloadURL: "https://nodejs.org/dist/{version}/node-{version}-linux-x64.tar.xz",
VersionURL: "https://nodejs.org/dist/latest-v22.x/",
DefaultVersion: "v22.14.0",
InstallScript: `#!/bin/sh
# Node.js lazy install — download & extract
# Node.js via NVM install
NODE_VERSION="${TOOL_VERSION:-v22.14.0}"
NODE_URL="https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-linux-x64.tar.xz"
echo "[Node.js] Downloading ${NODE_VERSION}..."
cd /tmp
curl -sL "$NODE_URL" -o node.tar.xz
tar xJf node.tar.xz
mkdir -p /usr/local/share
mv node-${NODE_VERSION}-linux-x64 /usr/local/share/node
ln -sf /usr/local/share/node/bin/node /usr/local/bin/node
ln -sf /usr/local/share/node/bin/npm /usr/local/bin/npm
ln -sf /usr/local/share/node/bin/npx /usr/local/bin/npx
rm -f node.tar.xz
echo "[Node.js] Installing via NVM ${NODE_VERSION}..."
export NVM_DIR="/usr/local/share/nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
if ! command -v nvm >/dev/null 2>&1; then
# NVM not found — install it first
echo "[Node.js] NVM not found, installing NVM first..."
curl -sL "https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh" | NVM_DIR="$NVM_DIR" bash
\. "$NVM_DIR/nvm.sh"
fi
nvm install "${NODE_VERSION#v}"
nvm alias default "${NODE_VERSION#v}"
nvm use "${NODE_VERSION#v}"
# Symlink for system-wide access
ln -sf "$NVM_DIR/versions/node/$(nvm version)/bin/node" /usr/local/bin/node
ln -sf "$NVM_DIR/versions/node/$(nvm version)/bin/npm" /usr/local/bin/npm
ln -sf "$NVM_DIR/versions/node/$(nvm version)/bin/npx" /usr/local/bin/npx
npm config set registry https://registry.npmmirror.com
echo "[Node.js] Installed: $(node --version) / npm $(npm --version)"
`,
SortOrder: 3,
},
{
Name: "helm",
DisplayName: "Helm",
Description: "Kubernetes 包管理工具,Chart 部署使用",
Category: "k8s",
InstallMethod: ToolLazy,
BinaryName: "helm",
InstallPath: "/usr/local/bin/helm",
CheckCommand: "helm version --short 2>/dev/null",
VersionURL: "https://get.helm.sh/",
DownloadURL: "https://get.helm.sh/helm-{version}-linux-amd64.tar.gz",
DefaultVersion: "v3.16.0",
InstallScript: `#!/bin/sh
# Helm lazy install — download & extract
HELM_VERSION="${TOOL_VERSION:-v3.16.0}"
HELM_URL="https://get.helm.sh/helm-${HELM_VERSION}-linux-amd64.tar.gz"
echo "[Helm] Downloading ${HELM_VERSION}..."
cd /tmp
curl -sL "$HELM_URL" -o helm.tar.gz
tar xzf helm.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
rm -rf helm.tar.gz linux-amd64
echo "[Helm] Installed: $(helm version --short 2>&1)"
`,
`,
SortOrder: 4,
},
// ──── Git — 版本控制(预装)// Logan.Li ────
{
Name: "git",
DisplayName: "Git",
Description: "版本控制工具,流水线代码拉取使用",
Category: "build",
InstallMethod: ToolPreinstall,
BinaryName: "git",
InstallPath: "/usr/bin/git",
CheckCommand: "git --version 2>/dev/null",
SortOrder: 5,
Name: "git",
DisplayName: "Git",
Description: "版本控制工具,流水线代码拉取使用",
Category: "build",
InstallMethod: ToolPreinstall,
BinaryName: "git",
InstallPath: "/usr/bin/git",
CheckCommand: "git --version 2>/dev/null",
SortOrder: 5,
},
// ──── Docker CLI — 容器构建(预装)// Logan.Li ────
{
Name: "docker-cli",
DisplayName: "Docker CLI",
Description: "Docker 命令行工具,流水线镜像构建/推送使用",
Category: "deploy",
InstallMethod: ToolPreinstall,
BinaryName: "docker",
InstallPath: "/usr/bin/docker",
CheckCommand: "docker --version 2>/dev/null",
SortOrder: 6,
Name: "docker-cli",
DisplayName: "Docker CLI",
Description: "Docker 命令行工具,流水线镜像构建/推送使用",
Category: "deploy",
InstallMethod: ToolPreinstall,
BinaryName: "docker",
InstallPath: "/usr/bin/docker",
CheckCommand: "docker --version 2>/dev/null",
SortOrder: 6,
},
}
}