monitoring/utils/mem.py

131 lines
3.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# _*_ coding: utf-8 _*_
# @Time :2022/5/29 14:54
# @Email :508737091@qq.com
# @Author :qiangyanwen
# @File :mem.py.py
import os
import psutil
import datetime
import time
def get_sys_info():
"""
获取系统信息
"""
# 当前时间
now_time = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime(time.time()))
# print("当前时间:", now_time)
# 获取系统启动时间
system_start_info = "系统启动时间: %s" % datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")
# 获取系统用户
users_count = len(psutil.users())
users_list = ",".join([u.name for u in psutil.users()])
users_info = "当前有%s个用户,分别是 %s" % (users_count, users_list)
sys_info = {"now_time": now_time, "system_start_time": system_start_info, "users_info": users_info}
return sys_info
def get_cpu_info():
"""
获取cpu信息
"""
# 查看cpu物理个数的信息
# print(u"物理CPU个数: %s" % psutil.cpu_count(logical=False))
cpu_count = psutil.cpu_count(logical=False)
# cpu的使用率
cpu = (str(psutil.cpu_percent(1))) + '%'
cp = "cup使用率: %s" % cpu
cpu_info={"cpu_count":cpu_count,"cpu_usage":cpu}
return cpu_info
def bytes2human(n):
"""
内存单位转换
:param n:
:return:
"""
symbols = ('K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y')
prefix = {}
for i, s in enumerate(symbols):
prefix[s] = 1 << (i + 1) * 10
for s in reversed(symbols):
if n >= prefix[s]:
value = float(n) / prefix[s]
return '%.1f%s' % (value, s)
return '%sB' % n
def ge_mem_info():
"""
获取内存信息
"""
virtual_memory = psutil.virtual_memory()
virtual_memory_count = bytes2human(virtual_memory.total)
used_memory = bytes2human(virtual_memory.used)
free_memory = bytes2human(virtual_memory.free)
aval_memory = bytes2human(virtual_memory.available)
memory_percent = virtual_memory.percent
# memory_info = "总共内存:%s, 可用内存:%s, 内存使用:%s使用率%0.1f%%,剩余内存:%s" % (
# virtual_memory_count, aval_memory, used_memory, memory_percent, free_memory)
mem_info={
"total_memory": virtual_memory_count,
"aval_memory":aval_memory,
"memory_usage":used_memory,
"memory_percent":memory_percent,
"free_memory":free_memory
}
return mem_info
def get_disk_info():
"""
获取磁盘信息
"""
F_BSIZE = 0
F_BLOCKS = 2
F_BAVAIL = 4
# 循环磁盘分区
disks = []
for disk in psutil.disk_partitions():
# 读写方式 光盘 or 有效磁盘类型
if 'cdrom' in disk.opts or disk.fstype == '':
continue
disk_name_arr = disk.device.split(':')
disk_name = disk_name_arr[0]
disk_mount = disk.mountpoint
vfs = os.statvfs(disk_mount)
total_disk = vfs[F_BLOCKS] * vfs[F_BSIZE]
free_disk = vfs[F_BAVAIL] * vfs[F_BSIZE]
used_disk = total_disk - free_disk
used_per = round((float(used_disk) / total_disk) * 100, 4)
# 当前磁盘使用率和剩余空间G信息
# disk_info = "%s盘使用率%s%% 剩余空间:%iGB" % (disk_name, str(used_per), free_disk//1024//1024//1024)
disk_info ={"path":disk_name,"usage":str(used_per),"space":free_disk//1024//1024//1024//1024}
disks.append(disk_info)
return disks
def get_net_info():
"""
获取网络信息
"""
net = psutil.net_io_counters()
bytes_sent = '{0:.2f} Mb'.format(net.bytes_recv / 1024 / 1024)
bytes_rcvd = '{0:.2f} Mb'.format(net.bytes_sent / 1024 / 1024)
print("网卡接收数据 %s 网卡发送数据 %s" % (bytes_rcvd, bytes_sent))
if __name__ == '__main__':
now_time,users_info,system_start_info = get_sys_info()
print(now_time,users_info,system_start_info)
get_cpu_info()
ge_mem_info()
disk = get_disk_info()
print(disk)
get_net_info()