#encoding=utf-8
import winreg
import logging
import socket
logging.basicConfig(level=logging.INFO,format='%(asctime)s %(name)s %(levelname)s %(message)s')
log = logging.getLogger(__name__)
'''
監控CPU資訊
'''
import psutil
class CpuInfo():
def __init__(self,cpu_time,cpu_time_each,physisc_count,logic_count,cpu_score,cpu_score_each):
self.physisc_count = physisc_count
self.logic_count = logic_count
self.cpu_score = cpu_score
self.cpu_score_each = cpu_score_each
self.cpu_time = cpu_time
self.cpu_time_each = cpu_time_each
class MemInfo():
def __init(self,total,available,percent,used,free):
self.total = total
self.available = available
self.percent = percent
self.used = used
self.free = free
class NetInfo():
def __init__(self,net_name,family,address,netmask,broadcast,ptp):
self.net_name = net_name
self.family = family
self.address = address
self.netmask = netmask
self.broadcast = broadcast
self.ptp = ptp
class ProcInfo():
def __init__(self,pid,name,username,cpu,memory,threads,memory_percent):
self.pid = pid
self.name = name
self.username = username
self.cpu = cpu
self.memory = memory
self.threads = threads
self.memory_percent = memory_percent
def getCpuInfo():
cpu_time = psutil.cpu_times()
cpu_time_each = psutil.cpu_times(percpu=True)
logic_count = psutil.cpu_count()
physisc_count= psutil.cpu_count(logical=False)
cpu_score = psutil.cpu_percent()
cpu_score_each = psutil.cpu_percent(percpu=True)
cpuInfo = CpuInfo(cpu_time,cpu_time_each,physisc_count,logic_count,cpu_score,cpu_score_each)
return cpuInfo
def testCpu():
info = getCpuInfo()
log.info('CPU實體數量:{}'.format(info.logic_count))
log.info('CPU(邏輯CPU的平均) 占用時間的詳細資訊:{}'.format(info.cpu_time))
log.info('擷取每個CPU占用時間的詳細資訊:{}'.format(info.cpu_time_each))
log.info('CPU邏輯數量:{}'.format(info.physisc_count))
log.info('每個CPU的占比:{}'.format(info.cpu_score_each))
log.info('CPU占比:{}'.format(info.cpu_score))
def getNetInfo():
result = psutil.net_if_addrs()
net_list = []
for k,v in result.items():
net_name = k
for snicaddr in v:
address = snicaddr.address
netmask = snicaddr.netmask
family = snicaddr.family
log.info('網絡名稱:{},MAC位址:{},netmask:{},family:{}'.format(net_name,address,netmask,family))
#netInfo = NetInfo()
'''
監控記憶體資訊
'''
def getMem():
mem = psutil.virtual_memory()
memInfo = MemInfo()
total = int(mem.total/(1024*1024))
available = int(mem.available/(1024*1024))
used = int(mem.used/(1024*1024))
free = int(mem.free/(1024*1024))
log.info('記憶體總共:{}MB'.format(total))
log.info('可使用記憶體:{}MB'.format(available))
log.info('已使用記憶體:{}MB'.format(used))
log.info('剩餘記憶體:{}MB'.format(free))
'''
監控磁盤資訊
'''
def getDisk():
disks = psutil.disk_partitions()
log.info('磁盤資訊:{}'.format(disks))
usage = psutil.disk_usage('/')
log.info('磁盤使用情況:{}'.format(usage))
'''
監控網絡資訊
'''
def getNetInfo2():
#擷取網絡讀寫位元組/包的個數
count = psutil.net_io_counters()
print (count)
addrs = psutil.net_if_addrs()
print (addrs,type(addrs))
'''
擷取程序資訊
'''
def getPids():
pids = psutil.pids()
#log.info('程序集合:{}'.format(pids))
proc_list = []
for proc in psutil.process_iter(attrs=['pid','name','username']):
pc = proc.info
name = pc['name']
pid = pc['pid']
process = psutil.Process(pid)
pi = ProcInfo(pc['pid'],pid,pc['username'],process.cpu_times(),process.memory_info(),process.num_threads(),process.memory_percent())
proc_list.append(pi)
for k in proc_list:
log.info('PID:{},程序名稱:{},username:{},cpu占用:{},記憶體占用:{},線程數:{},記憶體占比:{}'.format(k.pid,k.name,k.username,k.cpu,k.memory,k.threads,k.memory_percent))
if __name__=='__main__':
#testCpu()
#getMem()
#getDisk()
#getNetInfo()
#getNetInfo()
getPids()