使用Jinjia2模板生成HTML文件

# rpt_tmpl.html
<html>
    <head><title>监控信息</title>
        <h2>{{host_name}}主机系统信息</h2>
        <h3>采集时间:{{test_time}}</h3>
    <body>
        <table width=400 border="1">
            <tr><td>CPU数量</td><td>{{cpu_count}}</td></tr>
            <tr><td>cpu使用率</td><td>{{cpu_percent}}%</td></tr>
            <tr><td>内存总量</td><td>{{mem_total}}</td></tr>
            <tr><td>已用内存</td><td>{{mem_used}}</td></tr>
            <tr><td>空闲内存</td><td>{{mem_free}}</td></tr>
            <tr><td>内存使用率</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>磁盘读取数据</td><td>{{disk_read}}</td></tr>
            <tr><td>磁盘写入数据</td><td>{{disk_write}}</td></tr>
            <tr><td>网卡发送数据</td><td>{{net_sent}}</td></tr>
            <tr><td>网卡接收数据</td><td>{{net_recv}}</td></tr>
        </table>
    </body>
</html>

# sysinfo_tohtml.py
import os
import socket
import jinja2
from datetime import datetime
# 导入sysinfo_bypsutil模块
from sysinfo_bypsutil import gather_monitor_data
''' 定义使用文件系统加载器的模板渲染函数 '''
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()                              # 获取主机名
    test_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 获取当前时间
    data = gather_monitor_data()                                   # 获取系统信息
    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

'''通用的字节转换函数'''
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)

'''获取内存信息'''
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)

'''获取网络信息'''
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)

'''汇集系统信息'''
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

'''报告结果'''
def report():
    # 获取主机名
    hostname = socket.gethostname()
    data = gather_monitor_data()
    data.update(dict(hostname=hostname))
    # 输出系统信息
    print(f"{hostname}主机系统信息")
    print("—————————————————————————")
    print(f"CPU数量:{data['cpu_count']}")
    print(f"CPU使用率:{data['cpu_percent']}%")
    print("—————————————————————————")
    print(f"内存总量:{data['mem_total']}")
    print(f"已用内存:{data['mem_used']}")
    print(f"空闲内存:{data['mem_free']}")
    print(f"内存使用率:{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"磁盘读取数据:{data['disk_read']}")
    print(f"磁盘写入数据:{data['disk_write']}")
    print("—————————————————————————")
    print(f"网卡发送数据:{data['net_sent']}")
    print(f"网卡接收数据:{data['net_recv']}")

if __name__ == '__main__':
    report()

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容