# rpt_tmpl.html
<html>
<head><title>監(jiān)控信息</title>
<h2>{{host_name}}主機(jī)系統(tǒng)信息</h2>
<h3>采集時(shí)間:{{test_time}}</h3>
<body>
<table width=400 border="1">
<tr><td>CPU數(shù)量</td><td>{{cpu_count}}</td></tr>
<tr><td>cpu使用率</td><td>{{cpu_percent}}%</td></tr>
<tr><td>內(nèi)存總量</td><td>{{mem_total}}</td></tr>
<tr><td>已用內(nèi)存</td><td>{{mem_used}}</td></tr>
<tr><td>空閑內(nèi)存</td><td>{{mem_free}}</td></tr>
<tr><td>內(nèi)存使用率</td><td>{{mem_percent}}%</td></tr>
<tr><td>磁盤空間總量</td><td>{{disk_total}}</td></tr>
<tr><td>磁盤已用空間</td><td>{{disk_used}}</td></tr>
<tr><td>磁盤剩余空間</td><td>{{disk_free}}</td></tr>
<tr><td>磁盤空間使用率</td><td>{{disk_percent}}%</td></tr>
<tr><td>磁盤讀取數(shù)據(jù)</td><td>{{disk_read}}</td></tr>
<tr><td>磁盤寫入數(shù)據(jù)</td><td>{{disk_write}}</td></tr>
<tr><td>網(wǎng)卡發(fā)送數(shù)據(jù)</td><td>{{net_sent}}</td></tr>
<tr><td>網(wǎng)卡接收數(shù)據(jù)</td><td>{{net_recv}}</td></tr>
</table>
</body>
</html>
# sysinfo_tohtml.py
import os
import socket
import jinja2
from datetime import datetime
# 導(dǎo)入sysinfo_bypsutil模塊
from sysinfo_bypsutil import gather_monitor_data
''' 定義使用文件系統(tǒng)加載器的模板渲染函數(shù) '''
def render(tpl_path, **kwargs):
path, filename = os.path.split(tpl_path)
return jinja2.Environment(
loader=jinja2.FileSystemLoader(path or './')
).get_template(filename).render(**kwargs)
if __name__ == '__main__':
host_name = socket.gethostname() # 獲取主機(jī)名
test_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 獲取當(dāng)前時(shí)間
data = gather_monitor_data() # 獲取系統(tǒng)信息
data.update(dict(host_name=host_name))
data.update(dict(test_time=test_time))
html_content = render('rpt_tmpl.html', **data) # 渲染模板
file_name="sysinfo-"+test_time+".html" # HTML文件名
with open(file_name, 'w', encoding='utf-8') as f:
f.write(html_content)
# sysinfo_bypsutil.py
import psutil
import socket
'''通用的字節(jié)轉(zhuǎn)換函數(shù)'''
def bytes2human(n):
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
'''獲取CPU信息'''
def get_cpu_info():
cpu_count = psutil.cpu_count()
cpu_percent = psutil.cpu_percent(interval=2)
return dict(cpu_count=cpu_count, cpu_percent=cpu_percent)
'''獲取內(nèi)存信息'''
def get_memory_info():
virtual_mem = psutil.virtual_memory()
mem_total = bytes2human(virtual_mem.total)
mem_used = bytes2human(virtual_mem.total * virtual_mem.percent)
mem_free = bytes2human(virtual_mem.free + virtual_mem.buffers + virtual_mem.cached)
mem_percent = virtual_mem.percent
return dict(mem_total=mem_total, mem_used=mem_used,mem_free=mem_free,mem_percent=mem_percent)
'''獲取磁盤信息'''
def get_disk_info():
disk_usage = psutil.disk_usage('/')
disk_total = bytes2human(disk_usage.total)
disk_used = bytes2human(disk_usage.used)
disk_free = bytes2human(disk_usage.free)
disk_percent = disk_usage.percent
disk_io = psutil.disk_io_counters()
disk_read = bytes2human(disk_io.read_bytes)
disk_write = bytes2human(disk_io.write_bytes)
return dict(disk_total=disk_total,disk_used=disk_used,disk_free=disk_free, disk_percent=disk_percent,disk_read=disk_read,disk_write=disk_write)
'''獲取網(wǎng)絡(luò)信息'''
def get_net_info():
net_io = psutil.net_io_counters()
net_sent = bytes2human(net_io.bytes_sent)
net_recv = bytes2human(net_io.bytes_recv)
return dict(net_sent=net_sent,net_recv=net_recv)
'''匯集系統(tǒng)信息'''
def gather_monitor_data():
data = {}
data.update(get_cpu_info())
data.update(get_memory_info())
data.update(get_disk_info())
data.update(get_net_info())
return data
'''報(bào)告結(jié)果'''
def report():
# 獲取主機(jī)名
hostname = socket.gethostname()
data = gather_monitor_data()
data.update(dict(hostname=hostname))
# 輸出系統(tǒng)信息
print(f"{hostname}主機(jī)系統(tǒng)信息")
print("—————————————————————————")
print(f"CPU數(shù)量:{data['cpu_count']}")
print(f"CPU使用率:{data['cpu_percent']}%")
print("—————————————————————————")
print(f"內(nèi)存總量:{data['mem_total']}")
print(f"已用內(nèi)存:{data['mem_used']}")
print(f"空閑內(nèi)存:{data['mem_free']}")
print(f"內(nèi)存使用率:{data['mem_percent']}%")
print("—————————————————————————")
print(f"磁盤空間總量:{data['disk_total']}")
print(f"磁盤已用空間:{data['disk_used']}")
print(f"磁盤剩余空間:{data['disk_free']}")
print(f"磁盤空間使用率:{data['disk_percent']}%")
print(f"磁盤讀取數(shù)據(jù):{data['disk_read']}")
print(f"磁盤寫入數(shù)據(jù):{data['disk_write']}")
print("—————————————————————————")
print(f"網(wǎng)卡發(fā)送數(shù)據(jù):{data['net_sent']}")
print(f"網(wǎng)卡接收數(shù)據(jù):{data['net_recv']}")
if __name__ == '__main__':
report()
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者