运维宝典V1.0.0

2026-06-02 23:09   7   0  

运维宝典 v1.0.0

基于 PyQt5 的集成化运维工具箱,提供常用运维功能和工具。

✨ 功能特性

📊 系统监控

  • • 🖥️ 系统检查 — 监测 CPU、内存、磁盘使用情况

  • • 📋 日志分析 — 分析日志文件,统计 ERROR/WARNING,关键词搜索,支持大文件分页

🌐 网络管理

  • • 🌐 网络工具 — Ping 连通性测试、常用端口批量扫描、自定义端口检测、CIDR 网段扫描、DNS 域名解析

  • • 🔍 设备发现 — 局域网设备扫描与类型识别(Web 服务器、数据库、打印机等)

  • • 🔐 SSH 工具 — SSH 远程连接、交互式终端、远程命令执行、文件上传下载,支持华为/Cisco/H3C 设备自动适配

  • • 📟 Telnet 工具 — Telnet 远程连接与系统信息查询(老旧网络设备管理)

💾 数据管理

  • • 💾 备份工具 — 单文件复制备份、目录 ZIP 压缩备份,自动命名,支持清理旧备份

📖 运维知识

  • • 📖 Linux 命令查询 — 内置 75 条常用 Linux 命令速查,点击自动按分类展示(文件操作/系统管理/网络诊断等),支持精确匹配和关键词模糊搜索

  • • 🤖 AI 助手 — AI 运维问答(支持 DeepSeek / Groq / 自定义 OpenAI 兼容接口),聊天式多轮对话

🎨 界面与架构

  • • 模块按分类分组展示,支持折叠/展开(点击分类标题收起或展开该分类下的模块卡片)

  • • 卡片式交互,快速定位

  • 命令执行保护 — 当前命令执行中重复点击会弹窗提示,防止冲突

  • • 现代化 PyQt5 图形界面,启动时自动适配屏幕大小

  • 免责声明 — 首次运行弹出免责声明对话框,需同意后方可使用

  • 自动更新 — 启动时自动检查新版本,提示更新日志和下载链接

  • 用户反馈 — 工具栏内置反馈入口,通过邮件提交建议和 Bug

  • 日志查看器 — 工具栏内置运行日志查看器,实时滚动

  • • 输出面板实时滚动,SSH/Telnet 交互式终端

📦 安装

1. 安装依赖

pip install -r requirements.txt

2. 运行程序

python main.py

🏗️ 项目结构

Oamc/
├── main.py                      # 主程序入口
├── requirements.txt             # Python 依赖
├── README.md                    # 项目说明
├── 运维宝典.spec                # PyInstaller 打包配置
├── icon.ico                     # 程序图标
├── 开发日志.txt                 # 开发日志
├── config/
   ├── __init__.py
   ├── settings.py              # 全局配置 + 模块注册表
   └── app_config.json          # 应用配置(AI Key 等)
├── core/
   ├── __init__.py
   ├── base_module.py           # ⭐ BaseModule 基类(声明式模块开发)
   └── module_manager.py        # 模块管理器(动态加载/自动发现/热更新)
├── modules/
   ├── __init__.py
   ├── system_check.py          # 系统检查
   ├── log_analyzer.py          # 日志分析
   ├── network_tools.py         # 网络工具
   ├── network_device_discovery.py  # 设备发现
   ├── ssh_tools.py             # SSH 工具
   ├── telnet_tools.py          # Telnet 工具
   ├── backup_tools.py          # 备份工具
   ├── linux_commands.py        # Linux 命令查询
   └── ai_assistant.py          # AI 助手
├── ui/
   ├── __init__.py
   ├── main_window.py           # 主窗口(布局/工具栏/模块执行/Schema驱动UI)
   ├── widgets.py               # 自定义组件(ModuleCard/OutputPanel/StatusBar)
   ├── workers.py               # 后台工作线程(ModuleWorker/AIChatWorker/SSHReconnect)
   ├── ssh_terminal.py          # SSH 交互式终端组件
   ├── log_viewer.py            # 日志查看器对话框
   ├── disclaimer_dialog.py     # 免责声明对话框
   ├── feedback_dialog.py       # 用户反馈对话框(邮件发送)
   ├── style.py                 # 全局样式表
   └── stdout_redirector.py     # stdout 重定向
├── utils/
   ├── __init__.py
   ├── helpers.py               # 通用工具函数
   └── log_manager.py           # 日志管理器
├── bale/
   └── bale.py                  # 一键打包脚本
└── logs/                        # 运行日志目录

➕ 如何添加新功能模块

使用 BaseModule 声明式开发(自动注册,无需手动配置)。

🚀 BaseModule 声明式开发

继承 core.base_module.BaseModule,声明类属性即可自动注册——无需修改 settings.py 或 main_window.py

示例:1 分钟创建一个模块

modules/ 目录下创建 my_tool.py

from core.base_module import BaseModule

class MyTool(BaseModule):
    # ── 基本信息(必填)──
    module_id   = "my_tool"
    name        = "我的工具"
    description = "一个简单的示例模块"
    icon        = "✨"
    category    = "运维知识"

    # ── 输入框配置 ──
    input_hint        = "请输入参数"
    input_placeholder = "输入参数..."
    show_input_field  = True        # 显示输入框
    show_execute_button = True      # 显示"执行"按钮
    auto_run          = False       # False = 等待用户输入再执行

    def run(self, target=None):
        """模块主入口。target 为用户在输入框中输入的内容"""
        self.print_separator("=")
        self.print_info(f"接收到参数: {target or '(无)'}")
        self.print_success("模块执行成功!")
        self.print_separator("=")
        return True

运行程序,模块自动出现在界面中! 🎉

BaseModule 常用类属性速查

属性类型说明
module_idstr必填,唯一标识符(英文+下划线)
namestr必填,卡片标题
descriptionstr必填,卡片副标题
iconstrEmoji 图标,默认 🔧
categorystr分类名称,默认 其他
input_hintstr输入框上方提示文字
input_placeholderstr输入框占位文字
show_input_fieldbool是否显示通用输入框
show_execute_buttonbool是否显示"执行"按钮
execute_button_textstr执行按钮文字,默认 ▶ 执行
auto_runboolTrue = 点击即执行(无需输入)
特殊行为

is_ai_modulebool是否为 AI 对话模块
is_ssh_modulebool是否为 SSH 终端模块
is_log_modulebool是否为日志分析模块
专用按钮区

show_network_buttonsbool显示网络工具按钮(Ping/端口扫描等)
show_ssh_buttonsbool显示 SSH 专用按钮(连接/断开/上传/下载)
show_ai_buttonsbool显示 AI 专用按钮(设置Key/清空对话等)
use_ssh_inputsbool显示 SSH 连接信息输入(主机/端口/用户名/密码)

内置输出方法

class MyModule(BaseModule):
    def run(self, target=None):
        self.print_separator("=", 60)    # ═══════════════════════
        self.print_success("操作成功")    # [✓] 操作成功
        self.print_error("操作失败")      # [✗] 操作失败
        self.print_warning("警告信息")    # [!] 警告信息
        self.print_info("普通信息")       # [•] 普通信息

生命周期钩子

class MyModule(BaseModule):
    def on_registered(self):
        """模块注册成功时调用(可重写)"""
        pass

    def on_loaded(self):
        """模块首次加载到内存时调用(可重写)"""
        pass

💡 完整示例:添加进程管理模块(BaseModule 方式)

modules/process_manager.py

from core.base_module import BaseModule

try:
    import psutil
    PSUTIL_AVAILABLE = True
except ImportError:
    PSUTIL_AVAILABLE = False


class ProcessManager(BaseModule):
    module_id   = "process_manager"
    name        = "进程管理"
    description = "查看和管理系统进程"
    icon        = "⚙️"
    category    = "系统监控"
    auto_run    = True  # 点击卡片直接执行

    def run(self, target=None):
        self.print_separator("=")
        self.print_info("CPU 占用最高的进程")

        if not PSUTIL_AVAILABLE:
            self.print_error("psutil 未安装,请执行: pip install psutil")
            return False

        self.print_separator("-")
        print(f"{'PID':<10} {'名称':<30} {'CPU%':<10} {'内存':<15}")

        processes = []
        for proc in psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_info']):
            try:
                processes.append(proc.info)
            except (psutil.NoSuchProcess, psutil.AccessDenied):
                pass

        processes.sort(key=lambda x: x.get('cpu_percent', 0) or 0, reverse=True)
        for proc in processes[:10]:
            pid   = proc.get('pid', 'N/A')
            name  = (proc.get('name', 'N/A') or '')[:28]
            cpu   = proc.get('cpu_percent', 0) or 0
            mem   = proc.get('memory_info')
            mem_str = f"{mem.rss / 1024 / 1024:.1f} MB" if mem else "N/A"
            print(f"{pid:<10} {name:<30} {cpu:<10.1f} {mem_str:<15}")

        self.print_separator("=")
        self.print_success("进程信息获取完成")
        return True

🎯 模块开发最佳实践

1. 异常处理

def run(self, target=None):
    try:
        do_something()
        self.print_success("执行成功")
    except Exception as e:
        self.print_error(f"执行失败: {e}")
        import traceback
        traceback.print_exc()
        return False
    return True

2. 依赖检查

try:
    import some_library
    LIB_AVAILABLE = True
except ImportError:
    LIB_AVAILABLE = False

class MyModule(BaseModule):
    def run(self, target=None):
        if not LIB_AVAILABLE:
            self.print_error("缺少依赖: some_library")
            self.print_info("请执行: pip install some_library")
            return False
        # 正常功能...

3. 使用内置输出方法

def run(self, target=None):
    self.print_separator("=")     # ══════════════════════════
    self.print_info("开始处理...")  # [•] 开始处理...
    self.print_warning("注意!")   # [!] 注意!
    self.print_success("完成")    # [✓] 完成

🔧 架构说明

BaseModule 自动发现机制

程序启动
   
   ├── 1. 加载 AVAILABLE_MODULES 中的传统格式模块
   ├── 2.  AUTO_DISCOVER_MODULES = True
        └── 扫描 modules/*.py → 查找 BaseModule 子类 → 自动注册
   └── 3. UI 根据注册结果渲染模块卡片

Schema 驱动 UI:模块通过 get_input_schema() 声明界面行为(是否显示输入框、执行按钮、网络/SSH/AI 专用按钮等),main_window 无需为每个模块写硬编码分支。

🎨 界面预览

  • 主界面:左侧卡片式模块选择(按分类分组,点击分类标题可折叠/展开),右侧实时输出

  • 工具栏:📋 查看日志 → 🔄 检查更新 → 💬 反馈 → 🔄 热更新模块 → ℹ️ 关于 → 🚪 退出

  • 免责声明:首次启动显示免责声明对话框,滚动查看条款后确认

  • 自动更新:启动时自动检查新版本(通过 UPDATE_CHECK_URL 配置),有更新时弹窗提示

  • 用户反馈:填写建议/Bug 报告后通过邮件发送至开发团队

  • 输出面板:Consolas 等宽字体,自动滚动

  • SSH/Telnet 终端:连接成功后切换为交互式终端模式,SSH 支持文件上传下载

  • 命令执行保护:当前命令执行中再次点击会弹窗提示,避免冲突

  • 状态栏:实时状态指示 + 执行信息

💻 技术栈

  • Python 3.6+

  • PyQt5 — 图形界面框架

  • psutil — 系统资源监控

  • paramiko — SSH 远程连接

  • 标准库os, sys, socket, shutil, zipfile, json, logging, ipaddress, smtplib, email, importlib, inspect, pathlib

🚀 打包发布

项目提供一键打包脚本,自动完成图标生成、UPX 压缩、构建和清理:

python bale/bale.py

脚本功能

步骤说明
🎨 图标生成自动从 emoji 生成多尺寸 icon.ico(需安装 Pillow)
🔍 UPX 检测自动检测项目根目录 upx/ 下的 UPX 压缩工具(可减小 30%-70% 体积)
🧹 清理旧文件删除 build/dist/、旧的 .spec 文件
🚀 PyInstaller 构建自动收集所有模块和数据文件,构建 exe
📋 复制文件目录模式下自动复制 README 等额外文件

打包模式

运行脚本后可选择:

  • 模式 1:单文件 exe(推荐,便于分发)

  • 模式 2:目录模式(启动更快)

环境要求

打包前需安装:

pip install pyinstaller Pillow

可选:UPX 压缩

下载 UPX 解压至项目根目录的 upx/ 文件夹中,脚本会自动检测并启用,进一步减小 exe 体积。

手动打包

如需手动打包,也可使用预置的 spec 文件:

pyinstaller 运维宝典.spec

❓ 常见问题

Q: 我创建的 BaseModule 模块没有显示?

  • • 文件是否在 modules/ 目录下(.py 文件)

  • • 类名是否继承自 BaseModule

  • module_id 是否已填写(且不与其他模块重复)

  • • 检查类属性是否有拼写错误

Q: AI 助手如何使用?

  • • 点击左侧 🤖 AI 助手卡片

  • • 点击 🔑 设置Key 按钮输入 API Key(需自行注册获取)

  • • 选择 DeepSeek / Groq / 自定义 切换提供商

  • • 在输入框输入问题后点击发送

Q: 如何让输出更美观?

使用 BaseModule 内置方法:

self.print_separator("=")     # ══════════════════════════
self.print_success("完成")     # [✓] 完成
self.print_warning("注意")    # [!] 注意
self.print_error("失败")      # [✗] 失败
self.print_info("信息")       # [•] 信息

Q: 可以使用第三方库吗?

  • • 在模块中正常 import

  • • 做好异常处理和依赖检查

  • • 在 requirements.txt 中补充依赖

📄 许可证

MIT License

👨‍💻 作者

Oamc Team

享受便捷的运维体验! 🎉


下一篇
没有了
博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。