首页 > 其他分享 >主机资源情况监视器demo

主机资源情况监视器demo

时间:2023-04-17 13:34:50浏览次数:34  
标签:demo self percent label 监视器 主机 usage 使用率 wx

import paramiko # 导入paramiko模块用于SSH连接
import psutil # 导入psutil模块用于获取系统信息
import wx # 导入wx模块用于构建GUI应用程序

class RemoteMonitor(wx.Frame): # 定义RemoteMonitor类,继承自wx.Frame类
    def __init__(self, host, username, password, port=22):
        super().__init__(None, title="Remote Monitor") # 初始化wx.Frame对象,设置窗口标题
        self.host = host # 保存主机名
        self.username = username # 保存用户名
        self.password = password # 保存密码
        self.port = port # 保存端口号,默认为22
        self.cpu_label = wx.StaticText(self, label="CPU usage:") # 创建CPU使用率标签
        self.mem_label = wx.StaticText(self, label="Memory usage:") # 创建内存使用率标签
        self.disk_label = wx.StaticText(self, label="Disk usage:") # 创建磁盘使用率标签
        self.cpu_value = wx.StaticText(self, label="") # 创建显示CPU使用率的静态文本框
        self.mem_value = wx.StaticText(self, label="") # 创建显示内存使用率的静态文本框
        self.disk_value = wx.StaticText(self, label="") # 创建显示磁盘使用率的静态文本框
        self.init_ui() # 调用初始化UI方法
        self.connect_ssh() # 连接SSH并保存客户端对象

    def init_ui(self):
        sizer = wx.BoxSizer(wx.VERTICAL) # 创建垂直方向的BoxSizer对象
        sizer.Add(self.cpu_label, 0, wx.ALL, 5) # 添加CPU使用率标签到Sizer中
        sizer.Add(self.cpu_value, 0, wx.ALL, 5) # 添加显示CPU使用率的文本框到Sizer中
        sizer.Add(self.mem_label, 0, wx.ALL, 5) # 添加内存使用率标签到Sizer中
        sizer.Add(self.mem_value, 0, wx.ALL, 5) # 添加显示内存使用率的文本框到Sizer中
        sizer.Add(self.disk_label, 0, wx.ALL, 5) # 添加磁盘使用率标签到Sizer中
        sizer.Add(self.disk_value, 0, wx.ALL, 5) # 添加显示磁盘使用率的文本框到Sizer中
        self.SetSizer(sizer) # 将Sizer设置为窗口的Sizer
        self.Fit() # 让窗口自适应大小

    def connect_ssh(self):
        self.client = paramiko.SSHClient() # 创建SSHClient对象
        self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 设置自动添加主机密钥的策略
        self.client.connect(self.host, self.port, self.username, self.password) # 通过SSH连接到远程主机

    def get_cpu_usage(self):
        cpu_percent = psutil.cpu_percent() # 获取CPU使用率
        self.cpu_value.SetLabel(f"{cpu_percent}%") # 在界面上更新CPU使用率

    def get_mem_usage(self):
        mem_percent = psutil.virtual_memory().percent # 获取内存使用率
        self.mem_value.SetLabel(f"{mem_percent}%") # 在界面上更新内存使用率

    def get_disk_usage(self):
        disk_percent = psutil.disk_usage('/').percent # 获取磁盘使用率
        self.disk_value.SetLabel(f"{disk_percent}%") # 在界面上更新磁盘使用率

    def update_usage(self, event):
        self.get_cpu_usage() # 更新CPU使用率信息
        self.get_mem_usage() # 更新内存使用率信息
        self.get_disk_usage() # 更新磁盘使用率信息
        self.send_usage() # 发送使用率信息到远程主机

    def send_usage(self):
        stdin, stdout, stderr = self.client.exec_command(f"echo {psutil.cpu_percent()} {psutil.virtual_memory().percent} {psutil.disk_usage('/').percent}") # 执行命令并获取输入、输出和错误流
        response = stdout.read().decode() # 获取输出流并将字节解码为字符串
        if response:
            print(response) # 输出远程主机的响应
if __name__ == '__main__':
    app = wx.App() # 创建wx.App对象
    monitor = RemoteMonitor(hostIP,name,password) # 创建RemoteMonitor对象,连接到指定的远程主机
    monitor.Show() # 显示RemoteMonitor窗口
    timer = wx.Timer(monitor) # 创建定时器对象,关联到RemoteMonitor窗口
    timer.Start(1000) # 启动定时器,并设置间隔时间为1秒
    monitor.Bind(wx.EVT_TIMER, monitor.update_usage) # 绑定定时器事件到update_usage方法上
    app.MainLoop() # 进入wxPython的主事件循环

 

标签:demo,self,percent,label,监视器,主机,usage,使用率,wx
From: https://www.cnblogs.com/babashi9527/p/17325546.html

相关文章

  • 如何通过vip确定该vip对应的宿主机ip
    ###########      ......
  • 网络安全与网站安全及计算机安全:Kali Linux网络安全与主机扫描背后的“秘密”
    Kali的精髓在于安全测试,测试必须要有目标,主机扫描和发现就是要找到目标,以便有的放矢,精准打击,今天我们对照“七宝玲珑塔”来认识一下kali自带的几个主机发现的工具。一、二层主机发现1.二层主机发现指:利用ISO中链路层中的协议进行主机发现。一般使用ARP协议。2.优点:(局域网中通信使......
  • 网络安全与Kali Linux:如何使用Nmap探测网络空间存活主机?
    一、背景介绍nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。本文通过介绍三款工具(nmap、fping、ettercap)分别对......
  • CentOS7---Nginx安装并配置虚拟主机
    1、源码安装nginx,并提供服务脚本源码包的获取:官网下载实验环境:和企业环境类似,关闭防火墙,禁用selinux,使用静态IP地址安装步骤:步骤一:安装Nginx所需的pcre库[root@node01~]#yuminstallpcre-devel-y步骤二:安装依赖包[root@node01~]#yum-yinstallgcgccgcc-c++zlib......
  • kubebuilder开发kubernetes operator demo
    环境准备go环境配置wgethttps://golang.google.cn/dl/go1.19.8.linux-amd64.tar.gztarzxvfgo1.19.8.linux-amd64.tar.gzmvgo/usr/local/vim/etc/profile在最结尾添加exportHOME=/rootexportGOROOT=/usr/local/goexportGOPATH=/opt/idcus/goexportPATH=$PATH:......
  • 人体红外夜间远程监控【远程车子夜间监控】[车内监控][车内监视器]【远程夜间汽车监控
    (接上一篇:https://www.cnblogs.com/liuguiqing/p/17114911.html)(本篇讲解:实践操作) 调试设备:(摄像机部分) 调试设备:(网络部分)注意:共两路,一路控制wifi网卡(供摄像机上网);一路控制wifi摄像机。控制电路一样。 组装调试: 实际应用:手机app远程查看监控,效果: ......
  • Spring AOP demo
    动态代理模式实现,比如可以在Bean的生命周期创建阶段,根据Pointcut判断当前bean是否满足切入条件,如果满足,再根据织入器ProxyFactory织入到JoinPoint,再根据bean创建代理对象名词JoinPoint:可以理解成系统中每一个可以应用aop的点,一般是指方法。spring中只支持方法,Pointcut:根据P......
  • googleTest demo
    googletest的目录在的官方目录在https://github.com/google/googletest.git。作为用户,googleTest的库可以认为提供了两个东西:各种宏,如TEST,TEST_F,通过#include"gtest/gtest.h",即可使用。gtest_main的库libgtest_main.a,即提供了一个主函数,可以和一个测试套的“容器”。静态库......
  • 一台主机可以有多少个端口?为什么会有端口号的限制呢?与哪些因素有关
    一台主机可以有多少个端口?TCP/IP协议中的服务端口通过不同的逻辑端口来区分不同的服务。一个IP地址的端口通过16bit进行编号,最多可以有65535个端口。为什么会有端口号的限制呢?端口号就是一种用于标识网络应用程序的方法。在TCP/IP协议中,每个应用程序都需要绑定一个端口号,这个端......
  • 文字滚动demo
    1、主要采用css的@keyframes关键帧和animation动画<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="......