美文网首页Tornado开发硬件监测
Tornado开发硬件监测 - 获取硬件信息

Tornado开发硬件监测 - 获取硬件信息

作者: zz77zz | 来源:发表于2019-02-20 13:30 被阅读0次

努力坚持做到日更

获取系统信息

工具 : psutil

1.CPU平均使用率
2.每个CPU的使用率(CPU逻辑的核心数量)

在tools包里创建 monitor文件

# -*- coding: utf-8 -*-
import psutil
import time
import datetime
from pprint import pprint  # 格式化打印(美化输出工具)


# 定义一个专门用于获取系统信息的类

class Monitor(object):
    # 专门用于单位转化的方法
    def bytes_to_gb(self, data, key=""):
        if key == "percent":
            return data
        else:
            return round(data / (1024 ** 3), 2)

    # 专门获取CPU信息
    def cpu(self):
        # percpu:True获取每个CPU的使用率,False获取平均使用率
        # 1.平均、2.单独、3.物理CPU核心数、4.逻辑CPU核心数
        data = dict(
            percent_avg=psutil.cpu_percent(interval=0, percpu=False),
            percent_per=psutil.cpu_percent(interval=0, percpu=True),
            num_p=psutil.cpu_count(logical=False),
            num_l=psutil.cpu_count(logical=True)
        )
        return data

    # 专门获取内存信息
    def mem(self):
        # 内存信息
        info = psutil.virtual_memory()
        data = dict(
            total=self.bytes_to_gb(info.total),
            used=self.bytes_to_gb(info.used),
            free=self.bytes_to_gb(info.free),
            percent=info.percent
        )
        return data

    # 专门获取交换分区/文件信息
    def swap(self):
        # 交换文件/分区信息
        info = psutil.swap_memory()
        data = dict(
            total=self.bytes_to_gb(info.total),
            free=self.bytes_to_gb(info.free),
            used=self.bytes_to_gb(info.used),
            percent=info.percent
        )
        return data

    # 专门获取磁盘信息
    def disk(self):
        # 专门获取磁盘分区信息
        info = psutil.disk_partitions()
        # 列表推导式
        data = [
            dict(
                device=v.device,
                mountpoint=v.mountpoint,
                fstype=v.fstype,
                opts=v.opts,
                used={
                    k: self.bytes_to_gb(v, k)
                    for k, v in psutil.disk_usage(v.mountpoint)._asdict().items()
                }
            )
            for v in info
        ]
        return data

    # 专门获取网络信息
    def net(self):
        # 获取地址信息
        addrs = psutil.net_if_addrs()
        # val.family.name取出协议地址族名称,AF_INET
        addrs_info = {
            k: [
                dict(
                    family=val.family.name,
                    address=val.address,
                    netmask=val.netmask,
                    broadcast=val.broadcast
                )
                for val in v if val.family.name == "AF_INET"
            ][0]
            for k, v in addrs.items()
        }
        # 获取输入输出信息(收发包数,收发字节数)
        io = psutil.net_io_counters(pernic=True)
        data = [
            dict(
                name=k,
                bytes_sent=v.bytes_sent,
                bytes_recv=v.bytes_recv,
                packets_sent=v.packets_sent,
                packets_recv=v.packets_recv,
                **addrs_info[k]
            )
            for k, v in io.items()
        ]
        return data

    # 时间戳转化为时间字符方法
    def td(self, tm):
        dt = datetime.datetime.fromtimestamp(tm)
        return dt.strftime("%Y-%m-%d %H:%M:%S")

    # 获取日期时间
    def dt(self):
        return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

    # 专门获取最近开机时间
    def lastest_start_time(self):
        # 时间戳
        return self.td(psutil.boot_time())

    # 专门获取系统登录用户
    def logined_users(self):
        users = psutil.users()
        data = [
            dict(
                name=v.name,
                terminal=v.terminal,
                host=v.host,
                started=self.td(v.started),
                pid=v.pid
            )
            for v in users
        ]
        return data


if __name__ == "__main__":
    m = Monitor()
    """
    for v in range(1, 11):
        pprint(m.cpu())
        time.sleep(1)  # 每隔一秒打印一次
    """
    # print(m.mem())
    # print(m.swap())
    # print(m.disk())
    pprint(m.logined_users())

相关文章

网友评论

    本文标题:Tornado开发硬件监测 - 获取硬件信息

    本文链接:https://www.haomeiwen.com/subject/xpvcyqtx.html