# 运维项目管理

本项目是一个 Python Tkinter 桌面应用，用于本地维护项目基础信息、VPN 登录方式、VPN 账号密码和 MDM 版本号。
应用界面使用左侧菜单导航，包含 `项目管理`、`备份命令`、`文件迁移`、`AI服务识别` 和 `日志截取`。

## 本地运行

```bash
python app.py
```

如果在 Linux 环境运行并提示缺少 `tkinter`，需要先安装系统包，例如 Ubuntu/Debian：

```bash
sudo apt install python3-tk
```

Windows 官方 Python 安装包通常自带 Tkinter。

首次保存数据后，程序目录会生成两个 JSON 文件：

- `projects.json`：项目基础信息
- `vpn_credentials.json`：VPN 账号密码，格式为 `vpn_user` 和 `vpn_password`
- `ai_config.json`：AI 接口配置，用户自行填写并保存 API Key 后生成

## Windows 打包 exe

在 Windows 电脑上进入项目目录，执行：

```bat
build_windows.bat
```

打包完成后，exe 位于 `dist\OandMProjectManager.exe`。
脚本会先清理旧的 `build`、`dist`、`.spec` 和 `__pycache__`，避免继续运行旧版本 exe。

## 数据说明

VPN 登录方式固定支持：

- `aTrust`
- `Hillstone Secure Connect`
- `easy connect`
- `FortiClient VPN`
- `网页登录`
- `无VPN`

选择 `无VPN` 时，VPN 账号和 VPN 密码会自动清空并禁用。

## 备份命令生成

在 `备份命令` 菜单中选择项目后，程序会根据项目的 MDM 版本号加载默认 Java 服务包列表。服务表格包含 `服务名`、`jar文件名` 和 `部署目录`，可双击服务或点击 `编辑服务` 临时修改 jar 名和目录。

当前已配置 `MDM9` 默认服务包，部署目录统一为 `/u02/jars/`：

- `i-bpm-6.1.jar`
- `i-console-6.1.jar`
- `i-core-6.1.jar`
- `mdm-datacenter-6.1.jar`
- `mdm-engine-6.1.jar`
- `mdm-esb-6.1.jar`
- `mdm-ireport-6.1.jar`
- `mdm-mdmclean-6.1.jar`
- `mdm-mdmcode-6.1.jar`
- `mdm-mdmui-6.1.jar`
- `mdm-module-6.1.jar`
- `mdm-query-6.1.jar`
- `mdm-taskcenter-6.1.jar`

选择一个或多个服务后点击 `生成命令`，会生成类似下面的备份命令：

```bash
mv /u02/jars/i-bpm-6.1.jar /u02/jars/i-bpm-6.1.jar20260714
```

MDM12/MDM13 需要在项目的 `MDM版本号` 中填写完整 jar 版本号，例如 `13.2.0.0` 或 `MDM13.2.0.0`。
程序会生成 `sunway-cloud-*` 服务包，并默认使用 `/home/mdm/` 下的标准短目录作为部署目录：

- `admin` -> `/home/mdm/admin/`
- `auth` -> `/home/mdm/auth/`
- `base-service` -> `/home/mdm/base/`
- `bi-dv-service` -> `/home/mdm/bi-dv/`
- `file-service` -> `/home/mdm/file/`
- `gateway` -> `/home/mdm/gateway/`
- `gtx-service` -> `/home/mdm/gtx/`
- `mdm-esb-service` -> `/home/mdm/mdm-esb/`
- `mdm-model-service-yapp` -> `/home/mdm/mdm-model/`
- `mdm-quality-service` -> `/home/mdm/mdm-quality/`
- `xxl-job-service` -> `/home/mdm/xxl-job/`

例如：

```bash
mv /home/mdm/admin/sunway-cloud-admin-13.2.0.0.jar /home/mdm/admin/sunway-cloud-admin-13.2.0.0.jar20260714
```

程序只生成命令，不会执行命令。

## 文件迁移命令生成

在 `文件迁移` 菜单中选择项目后，程序会加载该项目 MDM 版本对应的服务包列表。
填写 A 下载目录后，选择一个或多个服务，点击 `生成命令` 会生成类似下面的命令。目标目录使用服务表格中的部署目录：

```bash
mv /A/sunway-cloud-admin-13.2.0.0.jar /home/mdm/admin/
```

如果目录中包含空格，程序会自动给路径加引号。迁移命令同样只生成，不会执行。

定制服务可以在生成命令前临时编辑，例如把 model 服务 jar 改为：

```text
sunway-cloud-mdm-model-service-yapp-13.2.0.0.jar
```

临时编辑只影响当前界面生成命令，不会写入项目 JSON。

## AI 服务识别

`AI服务识别` 菜单用于把服务器目录列表、`find` 结果、`ls` 结果或 jar 文件列表解析成结构化服务清单。
也可以直接粘贴 `ps -ef | grep sunway` 的输出，程序会优先识别 `-jar` 后面的真实 jar 路径。

默认接口配置：

- API URL：`https://api.deepseek.com`
- 模型：`deepseek-v4-flash`
- API Key：由用户自己配置

使用流程：

1. 选择项目。
2. 填写 DeepSeek API Key，点击 `保存配置`。
3. 粘贴服务器 jar 列表或目录列表；如果是 MDM12/MDM13，建议在服务器执行 `ps -ef | grep sunway`，把输出粘贴进去。
4. 点击输入框下方的 `开始AI识别`。
5. 查看识别出的服务名、jar 文件名、版本号、部署目录、定制标记和风险提示。
6. 可点击输入框下方的 `应用识别目录`，确认后把 AI 识别出的真实 jar 文件名和部署目录应用到当前项目的 `备份命令` 和 `文件迁移` 服务表格。
7. 可点击 `复制JSON结果` 保存识别结果。

例如 `ps -ef | grep sunway` 中包含：

```text
java ... -jar ... /data/mdm/mdm-esb/sunway-cloud-mdm-esb-service-13.2.0.0.jar
```

AI 会识别出 `mdm-esb-service` 的真实部署目录为 `/data/mdm/mdm-esb/`，应用后备份和迁移命令会使用该目录。

AI 配置会保存到程序目录下的 `ai_config.json`。API Key 会以明文保存在本地文件中，请只在可信机器上使用。

## 日志截取命令生成

`日志截取` 菜单用于生成日志时间段截取命令，只生成命令，不执行命令。

日志目录规则：

- 当前日志：`服务部署目录/log/app.log`
- 历史压缩日志：`服务部署目录/log/YYYY-MM/YYYY-MM-DD-app.log-1.log.gz`

支持两种方式：

1. 手动填写日期、开始时间、结束时间。
2. 使用 AI 解析自然语言时间，例如：

```text
今天 10:05 到 10:20
2026-07-13 14点到14点半
```

当天日志会生成：

```bash
sed -n '/10:05:00/,/10:20:00/p' /data/mdm/mdm-esb/log/app.log > /data/mdm/mdm-esb/esb0714-1.log
```

历史压缩日志会生成：

```bash
zcat /data/mdm/mdm-esb/log/2026-07/2026-07-13-app.log-1.log.gz | sed -n '/10:05:00/,/10:20:00/p' > /data/mdm/mdm-esb/esb0713-1.log
```

注意：第一版按需求使用 JSON 明文保存账号密码，请妥善保管生成的 JSON 文件。
