python获取系统内存、CPU、磁盘、平均负载信息并保存到数据库中

来源:互联网 发布:被淘宝卖家投诉怎么办 编辑:程序博客网 时间:2024/06/05 05:56

本主题主要考察的是python os模块调用linux命令、模块、函数调用以及通过python操纵数据库。

假设已经可以正常连接mysql数据库了,保存系统信息的数据库名称为hostinfo,相关的四个数据表分别名为cpuinfo、meminfo、diskinfo、loadinfo(数据库和表都是程序运行过程中自动创建的)

1.在开发目录下新建一个python的包,然后包含四个python文件:mem.py、load.py、disk.py、cpu.py以及一个程序运行的主文件main.py,结构如下:

这里写图片描述

2. 编写mem.py 文件

import osdef mem_usage():    f = os.popen("free -m |grep Mem |awk '{print $2,$3,$4}'")    return f.read()if __name__ == "__main__":    print  mem_usage()

3. 编写load.py文件

import osdef load_avg():    f = os.popen("uptime | sed 's/,//g' | awk '{print $8,$9,$10}'")    return f.read().strip()if __name__ == "__main__":    print load_avg()

4. 编写disk.py文件

import osdef disk_usage():    f = os.popen("df -h | head -2 | tail -1 | awk '{print $2,$3,$4,$5}'")    return f.read().strip()if __name__ == "__main__":    print disk_usage()

5. 编写cpu.py文件

import osdef cpu_usage():    f = os.popen("top -bi -n 1| awk '{print $2,$4}'").read().split('\n')[2]    return fif __name__ == "__main__":    print cpu_usage()

6. 编写main.py文件

#!/usr/bin/env python#coding:utf-8'''file:main.pydate:9/8/17 10:21 AMauthor:lockeyemail:lockey@123.comdesc:'''from __future__ import divisionimport MySQLdb as mysqlimport timeimport cpu,disk,load,memusername = 'root'password  = 'redhat'host = 'localhost'deleteall = Falseconn = mysql.connect(host,username,password)cur = conn.cursor()sqldisk = 'insert into diskinfo values(%s,%s,%s,%s,%s)'sqlmem = 'insert into meminfo values(%s,%s,%s,%s)'sqlcpu = 'insert into cpuinfo values(%s,%s,%s,%s)'sqlload = 'insert into loadinfo values(%s,%s,%s,%s)'try:    cur.execute('CREATE DATABASE hostinfo')except:    passfinally:    conn.select_db('hostinfo')    try:        cur.execute('CREATE TABLE diskinfo (total varchar(10), used varchar(10), avail varchar(10), usedPercent varchar(10), getTime varchar(30))')        cur.execute('CREATE TABLE meminfo (total varchar (20), used varchar(10), free varchar(10),getTime varchar(30))')        cur.execute('CREATE TABLE loadinfo (time1 varchar(10), time5 varchar(10), time10 varchar(10), getTime varchar(30))')        cur.execute('CREATE TABLE cpuinfo (usrused varchar(10), sysused varchar(10), usedPercent varchar(10), getTime varchar(30))')    except:        pass    finally:            diskuseinfo = disk.disk_usage().split(' ')            disksize = diskuseinfo[0]            diskuse = diskuseinfo[1]            diskfree = diskuseinfo[2]            diskused = diskuseinfo[3]            memuseinfos = map(int,mem.mem_usage().split(' '))            memtotal = memuseinfos[0]            memused = memuseinfos[1]            memfree = memuseinfos[2]            memusedp = str(round(memused/memtotal,5))+'%'            memfreep = str(round(memfree/memtotal,5))+'%'            load = load.load_avg().split(' ')            load1s = load[0]+'%'            load5s = load[1]+'%'            load15s = load[2]+'%'            cpuinfo = cpu.cpu_usage()            cpuinfo2 = cpuinfo.split(' ')            cpuusr = cpuinfo2[0]+'%'            cpusys = cpuinfo2[1]+'%'            cpuusage = str(float(cpuinfo2[0]) + float(cpuinfo2[1]))+'%'            timestr = time.time()            cur.execute(sqldisk,(disksize,diskuse,diskfree,diskused,timestr))            cur.execute(sqlmem, (memtotal, memusedp, memfreep, timestr ))            cur.execute(sqlload, (load1s, load5s, load15s, timestr))            cur.execute(sqlcpu, (cpuusr, cpusys, cpuusage, timestr))            if deleteall == True:                cur.execute('drop table cpuinfo')                cur.execute('drop table meminfo')                cur.execute('drop table diskinfo')                cur.execute('drop table loadinfo')                print 'All tables have been deleted!'            else:                cur.execute('select * from cpuinfo')                cpus = cur.fetchall()                print cpus                cur.execute('select * from meminfo')                mems = cur.fetchall()                print mems                cur.execute('select * from diskinfo')                disks = cur.fetchall()                print disks                cur.execute('select * from loadinfo')                loads = cur.fetchall()                print loads            conn.commit()    cur.close()    conn.close()    print 'Database closed!'

运行结果截图:

当main.py文件中deleteall = False时的运行结果:

这里写图片描述

当main.py文件中deleteall = True时的运行结果:

这里写图片描述

阅读全文
1 0