文档章节

Python获取本机资源使用信息

阿帆提
 阿帆提
发布于 2016/11/09 10:00
字数 585
阅读 43
收藏 4
__author__ = 'root'
# -*- encoding: utf-8 -*-
# machine_status.py  获取本机资源使用信息、进程状态和连接情况
# May 2014


import datetime
import json
import os
import psutil as ps                       # psutil库 需预先安装
#from pymongo import Connection
import time
import socket
import uuid


class MachineStatus(object):

    #   初始化
    def __init__(self):
        self.MAC = None
        self.IP = None
        self.cpu = {}
        self.mem = {}
        self.process = {}
        self.network = {}
        self.status = []                    #  [cpu使用率, 内存使用率, 进程数目, established连接数]
        self.get_init_info()
        self.get_status_info()

    #  宿主机存库状态
    def run(self):
        self.get_status_info()
        self.save_status_to_db()

    def save_status_to_db(self):
        print self.status

    #  数据收集
    def get_init_info(self):
        self.cpu = {'cores' : 0,            #  cpu逻辑核数
                    'percent' : 0,          #  cpu使用率
                    'system_time' : 0,      #  内核态系统时间
                    'user_time' : 0,        #  用户态时间
                    'idle_time' : 0,        #  空闲时间
                    'nice_time' : 0,        #  nice时间 (花费在调整进程优先级上的时间)
                    'softirq' : 0,          #  软件中断时间
                    'irq' : 0,              #  中断时间
                    'iowait' : 0}           #  IO等待时间
        self.mem = {'percent' : 0,
                    'total' : 0,
                    'vailable' : 0,
                    'used' : 0,
                    'free' : 0,
                    'active' : 0}
        self.process = {'count' : 0,        #  进程数目
                        'pids' : 0}         #  进程识别号
        self.network = {'count' : 0,        #  连接总数
                        'established' : 0}  #  established连接数
        self.status = [0, 0, 0, 0]          #  cpu使用率,内存使用率, 进程数, established连接数
        self.get_mac_address()
        self.get_ip_address()

    #  获取状态列表
    def get_status_info(self):
        self.get_cpu_info()
        self.get_mem_info()
        self.get_process_info()
        self.get_network_info()
        self.status[0] = self.cpu['percent']
        self.status[1] = self.mem['percent']
        self.status[2] = self.process['count']
        self.status[3] = self.network['established']

    #  获取mac
    def get_mac_address(self):
        mac = uuid.UUID(int=uuid.getnode()).hex[-12:]
        self.MAC = ":".join([mac[e : e+2] for e in range(0, 11, 2)])

    #  获取ip
    def get_ip_address(self):
        tempSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        tempSock.connect(('8.8.8.8', 80))
        addr = tempSock.getsockname()[0]
        tempSock.close()
        self.IP = addr

    #  获得cpu信息
    def get_cpu_info(self):
        self.cpu['cores'] = ps.cpu_count()
        self.cpu['percent'] = ps.cpu_percent(interval=2)
        cpu_times = ps.cpu_times()
        self.cpu['system_time'] = cpu_times.system
        self.cpu['user_time'] = cpu_times.user
        self.cpu['idle_time'] = cpu_times.idle
        self.cpu['nice_time'] = cpu_times.nice
        self.cpu['softirq'] = cpu_times.softirq
        self.cpu['irq'] = cpu_times.irq
        self.cpu['iowait'] = cpu_times.iowait

    #  获得memory信息
    def get_mem_info(self):
        mem_info = ps.virtual_memory()
        self.mem['percent'] = mem_info.percent
        self.mem['total'] = mem_info.total
        self.mem['vailable'] = mem_info.available
        self.mem['used'] = mem_info.used
        self.mem['free'] = mem_info.free
        self.mem['active'] = mem_info.active

    #  获取进程信息
    def get_process_info(self):
       pids = ps.pids()
       self.process['pids'] = pids
       self.process['count'] = len(pids)

    #  获取网络数据
    def get_network_info(self):
        conns = ps.net_connections()
        self.network['count'] = len(conns)
        count = 0
        for conn in conns:
           if conn.status is 'ESTABLISHED':
               count = count + 1
        self.network['established'] = count


class HostInfoManage(object):
    @staticmethod
    def get_host_cpu_info():
        MS = MachineStatus()
        cpu_info = MS.cpu
        return {"percent": cpu_info.get("percent", 0)}

    @staticmethod
    def get_host_memory_info():
        MS = MachineStatus()
        mem_info = MS.mem
        return {"percent": mem_info.get("percent", 0)}

    @staticmethod
    def get_host_ip_info():
        MS = MachineStatus()
        return {"ip": MS.IP}

    @staticmethod
    def get_host_mac_info():
        MS = MachineStatus()
        return {"ip": MS.MAC}

    @staticmethod
    def get_disk_used_info():
        return {"percent": HostInfoManage.disk_stat() * 100}

    @staticmethod
    def disk_stat():
        import os
        hd={}
        disk = os.statvfs("/")
        hd['available'] = disk.f_bsize * disk.f_bavail
        hd['capacity'] = disk.f_bsize * disk.f_blocks
        hd['used'] = disk.f_bsize * disk.f_bfree
        return float(hd['used']) / float(hd['capacity'])


if __name__ == '__main__':
    MS = MachineStatus()
    print MS.IP, '\n', MS.MAC, '\n', MS.cpu, '\n', MS.mem, '\n', MS.status


#获取硬盘使用情况

def disk_stat():
    import os
    hd={}
    disk = os.statvfs("/")
    hd['available'] = disk.f_bsize * disk.f_bavail
    hd['capacity'] = disk.f_bsize * disk.f_blocks
    hd['used'] = disk.f_bsize * disk.f_bfree
    print float(hd['used']) / float(hd['capacity'])
    return hd

 

© 著作权归作者所有

共有 人打赏支持
阿帆提
粉丝 8
博文 54
码字总数 188729
作品 0
朝阳
程序员
python MySQLdb安装和使用

MySQLdb是Python连接MySQL的模块,下面介绍一下源码方式安装MySQLdb: 首先要下载下载:请到官方网站http://sourceforge.net/projects/mysql-python/或者点击链接下载http://downloads.sour...

我的去哈哈
2014/03/28
0
2
Google在线深度学习神器Colab

Colab是google最近推出的一项Python在线编程的免费服务, 有了它,不学Python编程的理由又少了一个 Colab环境已经集成了流行的深度学习框架Tensorflow,并附赠了一个虚拟机(硬盘+ CPU+内存),如果...

zhaoolee
02/07
0
0
Review board整合ldap

Review board整合ldap Review board本身已经支持ldap登录,我们需要做的就是一些安装、配置工作。首先review board需要python-ldap,如果没有安装,我们在打开ldap配置页面,就会提醒LDAP au...

youthflies
2014/07/15
0
0
Sublime Text 3 配置python交互运行环境的快捷键

使用Sublime Text 3能以轻量级的环境写python脚本,运行python代码。为了更加方便地调用python脚本,通过在Sublime Text 3中绑定快捷键的方式,实现一键调用python交互运行环境,操作方式如下...

雪饼
06/07
0
0
【转载】如何制作python安装模块(setup.py)

Python 模块的安装方法: 单文件模块:直接把文件拷贝到 $PYTHON_DIR/lib 多文件模块,且带有 setup.py :只需执行 python setup.py install egg 文件:1) 下载 ezsetup.py ,运行 python e...

摩云飞
2013/01/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何通过 J2Cache 实现分布式 session 存储

做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在...

红薯
今天
3
0
C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
今天
3
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
今天
1
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
今天
3
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部