赞
踩
完整项目:sysOr · Hardman233/MyStudentBase - 码云 - 开源中国 (gitee.com)
程序安装包:链接:https://pan.baidu.com/s/1DmbzKZ2u1yRjVTDzm2G28w
提取码:yq0i该项目使用PyQt5 QtDesigner Paramiko Loguru技术实现了一个简易的服务器监控器
本项目实现了获取部分服务器信息,用于简单的Linux服务器监控。
该项目很多代码可以进一步重构,由于太懒就没有重构,支持有需要的同学修改和进一步完善。
该项目只用于学习使用,转载请标明出处,如有错误请指正,微信:kc1124442970。
paramiko 安装:pip install paramiko
PyQt5 安装:pip install pyqt5
pyqt5-tools 安装:pip install pyqt5-tools
loguru 安装:pip install loguru
pyinstaller 安装:pip install pyinstaller ## 用于把程序打包成exe文件
com包下封装了一些常用的对服务器操作的类及其方法
./SSHConCore.py 该类下实现了SSH连接,但只作为一个接口文件是所有类的爹类~,方便阅读
./UseCOMMAND.py 该类继承了SSHConCore,用于使用Python代码去输入Linux命令操作其系统
./Linux 该包下存放了获取Linux系统信息的常用类
./Linux/AcquireLinSymInfo.py 该类继承了UseCOMMAND,用于获取CPU 磁盘 内存 负载均衡的所有信息
./Linux/CPUMsg.py 该类继承了AcquireLinSymInfo,用于获取常用CPU信息并做了人性化处理(类中的方法有注释)
./Linux/DiskSpaceMsg.py 该类继承了AcquireLinSymInfo,用于获取常用磁盘信息(暂未实现,部分实现代码在UiMain中)
./Linux/LoadMsg.py 该类继承了AcquireLinSymInfo,用于获取负载均衡常用信息并做了人性化处理(类中的方法有注释)
./Linux/MemoryMsg.py 该类继承了AcquireLinSymInfo,用于获取内存常用信息并做了人性化处理(类中的方法有注释)
./test 该包只用于存放开发时测试文件(gitee上传的项目中已经删除)
./UiMain 该包存放了桌面应用的Python代码和以构建好的exe文件
./UiMain/build 该文件夹下存放了构建exe时生成的文件
./UiMain/dist 该文件夹下存放了构建的exe文件(若想启动exe文件则需要把exe文件移动到./UiMain下)
./UiMain/logs 该文件夹下存放了一些程序运行时生成的日志文件
./UiMain/static 该文件夹下存放了一下静态资源(目前不用)
./UiMain/EnterUiMain.py 该类为整个程序的GUI入口,如启动本程序则启动该文件即可
./UiMain/EnterUiMain.spec 该文件是程序打包后生成的配置文件,下次再次打包该项目只需在该文件中配置即可
./UiMain/UiMain.ui 该文件是Qt Designer到处的ui文件,就类似web前端的静态页面
./UiMain/4417102_desktop_pc_server_icon.ico 该文件为程序的图标文件
该文件为整个SSH连接的核心类,其中定义了连接Linux服务器的核心信息和四个模块的接口,例如:第一次连接选择Yes or No、公网IP、用户名密码等
import paramiko
class SSHConByPy:
def __init__(self, hostname, port, name, password):
# 全部属性
self.all_message = dict()
# 获取实例
self.client = paramiko.SSHClient()
# 加上这句话不用担心选yes的问题,会自动选上(用ssh连接远程主机时,第一次连接时会提示是否继续进行远程连接,选择yes)
self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接
self.client.connect(hostname, port, name, password)
# 关闭连接
def close_connect(self):
if self.client is not None:
self.client.close()
# 获取四个模块信息接口
def get_loadBalance(self):
pass
def get_allRAMemory(self):
pass
def get_allCPUInformation(self):
pass
def get_diskSpace(self):
pass
该文件封装了两种使用Linux命令的方法
from com.SSHConCore import SSHConByPy
class UseCOMMAND(SSHConByPy):
def __init__(self, hostname, port, name, password):
# 调用父类的构造器
super(UseCOMMAND, self).__init__(hostname, port, name, password)
# 输入一个命令,返回一个列表
def get_message_line(self, shell_command):
stdin, stdout, stderr = self.client.exec_command(shell_command)
# 输出返回信息
stdout_info_line = stdout.readlines()
return stdout_info_line
# 返回字符串
def get_message(self, shell_command):
stdin, stdout, stderr = self.client.exec_command(shell_command)
# 输出返回信息
stdout_info_str = stdout.read().decode('utf8')
return stdout_info_str
该文件获取实现了UseCOMMAND.py的四个模块接口,获取服务器中四个模块的所有信息。该文件相当于简单处理了每个模块的所有信息,供后面细分的子类调用做更细致的处理
from com.UseCOMMAND import UseCOMMAND
class AcquireLinSymInfo(UseCOMMAND):
def __init__(self, hostname, port, name, password):
# 调用父类的构造器
super(AcquireLinSymInfo, self).__init__(hostname, port, name, password)
# 获取全部内存信息
def get_allRAMemory(self):
mem_stdout_info = self.get_message_line("cat /proc/meminfo")
memory_dic = {}
for line in mem_stdout_info:
# 去除多余的冒号,并且把他们分割
ls_line = line.replace(":", "").split()
memory_dic[ls_line[0]] = round(float(ls_line[1]) / 1024, 2)
return memory_dic
# 获取CPU的全部信息
def get_allCPUInformation(self):
cpu_stdout_info = self.get_message_line('cat /proc/cpuinfo')
cpu_dic = {}
for line in cpu_stdout_info:
# 用冒号分割,去除多余的\n
ls_line = line.strip('\n').split(':')
# 去除第一个值的\t
ls_line[0] = ls_line[0].strip('\t')
# 由于上一步的处理 在获取key值的时候发现 有列表只有一个元素 且为 '' 故判断 否则会报错:列表下标溢出
if ls_line[0] != '':
cpu_dic[ls_line[0]] = ls_line[1]
return cpu_dic
# 负载均衡
def get_loadBalance(self):
loadBalance_stdout_info = self.get_message_line('cat /proc/loadavg')[0].split()
loadBalance_dic = {'bef_5min_loadavgs': loadBalance_stdout_info[0],
'bef_10min_loadavgs': loadBalance_stdout_info[1],
'bef_15min_loadavgs': loadBalance_stdout_info[2],
'usingThread_and_totalThread': loadBalance_stdout_info[3],
'recently_usingThread_id': loadBalance_stdout_info[4]
}
return loadBalance_dic
# 获取磁盘空间使用量
def get_diskSpace(self):
pass
除了AcquireLinSymInfo.py外,其他为细分四个模块的文件,结构较为简单
使用pyinstaller工具打包
由于不同机器的环境都不同,打包时遇到的坑也都不一样,请自行百度如何打包
附上参考链接:(57条消息) 【Python教程】保姆版教使用Pyinstaller 打包python成exe文件_王同学在这的博客-CSDN博客
使用Inno Setup 编译器,由于较为简单,在这里就不具体说明,可自行百度
附上参考链接:(57条消息) 如何将已经安装好的软件打包成安装包_Inno setup 打包教程(转载)_weixin_39575565的博客-CSDN博客
退出按钮
被禁用登录按钮
被禁用,退出按钮
启用,IP输入框
用户名输入框
密码输入框
被设为只读退出按钮
被禁用,登录按钮
启用,IP输入框
用户名输入框
密码输入框
被设为可修改登录按钮
此时需要用户查看日志,如遇见bug请及时反馈(联系方式在程序右下方)退出按钮
此时需要用户查看日志,如遇见bug请及时反馈Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。