From 673659abd7979b7e19d83386c6dca2a40295ec42 Mon Sep 17 00:00:00 2001 From: gfdgd_xi <3025613752@qq.com> Date: Wed, 31 Jul 2024 09:34:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=A1=E6=81=AF=E8=8E=B7=E5=8F=96=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E7=9A=84=E5=88=9D=E6=AD=A5=E9=87=8D=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VM/buildvbox.py | 31 ++++----- VM/infoUtils.py | 180 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 194 insertions(+), 17 deletions(-) create mode 100644 VM/infoUtils.py diff --git a/VM/buildvbox.py b/VM/buildvbox.py index 0132de2..9130a67 100644 --- a/VM/buildvbox.py +++ b/VM/buildvbox.py @@ -8,6 +8,8 @@ import psutil import subprocess from vbox import * from qemu import * +from infoUtils import * +from PyQt5.QtNetwork import * class buildvbox: def homePath(self): @@ -43,21 +45,16 @@ class buildvbox: return value def GetNet(self) -> str: - # TODO - '''QList netList = QNetworkInterface::allInterfaces() - foreach(QNetworkInterface net, netList): - qDebug() << "Device:" << net.name() - QList entryList = net.addressEntries() - foreach(QNetworkAddressEntry entry, entryList): - QString ip = entry.ip().toString() - qDebug() << "IP Address: " << ip - if(ip != "127.0.0.1" and ip != "192.168.250.1" and ip != "::1" and net.name() != "lo"): - # 返回网卡名称 - return net.name() - } - } - } - return ""''' + netList = QNetworkInterface.allInterfaces() + for net in netList: + print("Device:", net.name()) + entryList = net.addressEntries() + for entry in entryList: + ip = entry.ip().toString() + print("IP Address: ", ip) + if(ip != "127.0.0.1" and ip != "192.168.250.1" and ip != "::1" and net.name() != "lo"): + # 返回网卡名称 + return net.name() return "" def Download(self, url: str, path: str, fileName: str) -> int: @@ -142,7 +139,7 @@ class buildvbox: swap = 0 swapAll = 0 # TODO - #infoUtils::memoryRate(memory, memoryAll, swap, swapAll) + infoUtils.memoryRate(memory, memoryAll, swap, swapAll) vm.SetMemory(memoryAll / 3 / 1024) vm.SetNetBridge(net) vm.EnabledAudio() @@ -225,7 +222,7 @@ class buildvbox: swap = 0 swapAll = 0 # TODO - #infoUtils::memoryRate(memory, memoryAll, swap, swapAll) + infoUtils.memoryRate(memory, memoryAll, swap, swapAll) #memoryRate(memory, memoryAll, swap, swapAll) vm.SetMemory(memoryAll / 3 / 1024) vm.SetNetBridge(net) diff --git a/VM/infoUtils.py b/VM/infoUtils.py new file mode 100644 index 0000000..665589c --- /dev/null +++ b/VM/infoUtils.py @@ -0,0 +1,180 @@ +PROC_UPTIME = "/proc/uptime" +PROC_CPU = "/proc/stat" +PROC_MEM = "/proc/meminfo" +PROC_NET = "/proc/net/dev" + +import enum +from PyQt5.QtCore import * + +class infoUtils: + class RateUnit(enum.Enum): + RateBit = 0, + RateByte = 1, + RateKb = 2, + RateMb = 3, + RateGb = 4, + RateTb = 5, + RateUnknow = 6 + + class Sensitive(enum.Enum): + Default = 0, # 大小写混合 + Upper = 1, # 全部大写 + Lower = 2 # 全部小写 + + def setRateUnitSensitive(self, unit: RateUnit, sensitive: Sensitive): + if (sensitive == self.Sensitive.Default): + if (unit == self.RateUnit.RateBit): + return str("b/s") + elif (unit == self.RateUnit.RateByte): + return str("B/s") + elif (unit == self.RateUnit.RateKb): + return str("Kb/s") + elif (unit == self.RateUnit.RateMb): + return str("Mb/s") + elif (unit == self.RateUnit.RateGb): + return str("Gb/s") + elif (unit == self.RateUnit.RateTb): + return str("Tb/s") + else: + # print("Sensitive::Default, RateUnit is RateUnknow.") + return str("") + elif (sensitive == self.Sensitive.Upper): + if (unit == self.RateUnit.RateBit): + return str("BIT/S") + elif (unit == self.RateUnit.RateByte): + return str("B/S") + elif (unit == self.RateUnit.RateKb): + return str("KB/S") + elif (unit == self.RateUnit.RateMb): + return str("MB/S") + elif (unit == self.RateUnit.RateGb): + return str("GB/S") + elif (unit == self.RateUnit.RateTb): + return str("TB/S") + else: + #print("Sensitive::Upper, RateUnit is RateUnknow.") + return str("") + elif (sensitive == self.Sensitive.Lower): + if (unit == self.RateUnit.RateBit): + return str("bit/s") + elif (unit == self.RateUnit.RateByte): + return str("b/s") + elif (unit == self.RateUnit.RateKb): + return str("kb/s") + elif (unit == self.RateUnit.RateMb): + return str("mb/s") + elif (unit == self.RateUnit.RateGb): + return str("gb/s") + elif (unit == self.RateUnit.RateTb): + return str("tb/s") + else: + #qDebug()< float: + # 自动判断合适的速率单位,默认传进来的是 Byte + # * bit 0 ~ 7 位 (不到 1 字节) + # * Byte 1 ~ 2^10 Byte + # * KB 2^10 ~ 2^20 Byte + # * MB 2^20 ~ 2^30 Byte + # * GB 2^30 ~ 2^40 Byte + # * TB 2^40 ~ 2^50 Byte + if (unit != self.RateUnit.RateByte): + #print("请先将单位转为字节(byte)后再传参") + return -1 + sp = 0 + if (0 <= speed and speed < pow(2, 10)): + unit = self.RateUnit.RateByte + sp = speed + elif (pow(2, 10) <= speed and speed < pow(2, 20)): + unit = self.RateUnit.RateKb + sp = float(speed / pow(2, 10) * 1.0) + elif (pow(2, 20) <= speed and speed < pow(2, 30)): + unit = self.RateUnit.RateMb + sp = float(speed / pow(2, 20) * 1.0) + elif (pow(2, 30) <= speed and speed < pow(2, 40)): + unit = self.RateUnit.RateGb + sp = float(speed / pow(2, 30) * 1.0) + elif (pow(2, 40) <= speed and speed < pow(2, 50)): + unit = self.RateUnit.RateTb + sp = float(speed / pow(2, 40) * 1.0) + else: + unit = self.RateUnit.RateUnknow + # qDebug()<<"本设备网络速率单位传输超过 TB, 或者低于 0 Byte." + sp = -1 + return sp + + # TODO run,idle 在原来是指针,这里还没做处理 + def uptime(self): + file = QFile(PROC_UPTIME) # /proc/uptime + if(not file.open(QIODevice.ReadOnly or QIODevice.Text)): + return + stream = QTextStream(file) + line = stream.readLine() + list = line.split(QRegExp("\\s{1,}")) + if(list.count()): + run = float(list[0]) + idle = float(list[1]) + file.close() + return run, idle + + # TODO netDown, netUpload 在原来是指针,这里还没做处理 + def netRate(self, netDown, netUpload): + file = QFile(PROC_NET) # /proc/net/dev + if (not file.open(QIODevice.ReadOnly or QIODevice.Text)): # 在读取时,把行尾结束符修改为 '\n'; 在写入时,把行尾结束符修改为本地系统换行风格,比如Windows文本换行是 "\r\n" + return + down = 0 + upload = 0 + stream = QTextStream(file) + line = stream.readLine() + line = stream.readLine() + line = stream.readLine() + while (not line.isNull()): + line = line.trimmed() + list = line.split(QRegExp("\\s{1,}")) # 匹配任意 大于等于1个的 空白字符 + if (list.count()): + down = int(list[1]) + upload = int(list[9]) + netDown += down + netUpload += upload + line = stream.readLine() + file.close() + + '''def cpuRate(self, cpuAll, cpuFree): + cpuAll = cpuFree = 0 + ok = False + file = QFile(PROC_CPU) # /proc/stat + if(not file.open(QIODevice.ReadOnly or QIODevice.Text)): + return + stream = QTextStream(file) + line = stream.readLine() + if (line != None): + list = line.split(QRegExp("\\s{1,}")) + for (auto v = list.begin() + 1 v != list.end() ++v) + cpuAll += (*v).toLong(&ok) + cpuFree = list.at(4).toLong(&ok) + file.close()''' + + def memoryRate(self): + memory = memoryAll = 0 + swap = swapAll = 0 + ok = False + file = QFile(PROC_MEM) # /proc/meminfo + if (not file.open(QIODevice.ReadOnly or QIODevice.Text)): + return + stream = QTextStream(file) + buff = [0] + for i in range(16): + line = stream.readLine() + list = line.split(QRegExp("\\s{1,}")) + buff[i] = int(list[1]) + memoryAll = buff[0] + memory = buff[0] - buff[2] + swapAll = buff[14] + swap = buff[14] - buff[15] + file.close() + return memory, memoryAll, swap, swapAll \ No newline at end of file