通过python脚本获取服务器硬件信息
要求:采集机器自身信息主机名内存ip与mac地址cpu信息硬盘分区信息制造商信息出厂日期-系统版本#!/usr/bin/python# coding:utf-8import socketimport psutilimport subprocessimport timeimport platformimport jsonimport requestsd...
·
要求:
- 采集机器自身信息
- 主机名
- 内存
- ip与mac地址
- cpu信息
- 硬盘分区信息
- 制造商信息
- 出厂日期
-系统版本
#!/usr/bin/python
# coding:utf-8
import socket
import psutil
import subprocess
import time
import platform
import json
import requests
device_white = ['eth1', 'eth2', 'eth3', 'bond0', 'bond1']
def get_hostname():
return socket.gethostname()
def get_meminfo():
with open("/proc/meminfo") as f:
tmp = int(f.readline().split()[1])
return tmp / 1024
def get_device_info():
ret = []
for device, device_info in psutil.net_if_addrs().iteritems():
if device in device_white:
tmp_device = {}
for sinc in device_info:
if sinc.family == 2:
tmp_device['ip'] = sinc.address
if sinc.family == 17:
tmp_device['mac'] = sinc.address
ret.append(tmp_device)
return ret
def get_cpu_info():
ret = {'cpu':'','num':0}
with open('/proc/cpuinfo') as f:
for line in f:
tmp = line.split(":")
key = tmp[0].strip()
if key == "processor":
ret['num'] += 1
if key == "model name":
ret['cpu'] = tmp[1].strip()
return ret
def get_disk_info():
cmd = """/sbin/fdisk -l|grep Disk|egrep -v 'identifier|mapper|Disk label'"""
disk_data = subprocess.Popen(cmd, shell=True, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
patition_size = []
for dev in disk_data.stdout.readlines():
# size = int(dev.strip().split()[4]) / 1024 / 1024/ 1024
size = int(dev.strip().split(',')[1].split()[0]) / 1024 / 1024/ 1024
patition_size.append(str(size))
return " + ".join(patition_size)
# 获取制造商信息
def get_manufacturer_info():
ret = {}
cmd = """/usr/sbin/dmidecode | grep -A6 'System Information'"""
manufacturer_data = subprocess.Popen(cmd, shell = True, stdout = subprocess.PIPE, stderr=subprocess.STDOUT)
for line in manufacturer_data.stdout.readlines():
if 'Manufacturer' in line:
ret['manufacturers'] = line.split(':')[1].strip()
elif 'Product Name' in line:
ret['server_type'] = line.split(':')[1].strip()
elif 'Serial Number' in line:
ret['st'] = line.split(':')[1].strip()
elif 'UUID' in line:
ret['uuid'] = line.split(':')[1].strip()
return ret
# 获取出厂日期
def get_real_date():
cmd = """/usr/sbin/dmidecode | grep -i release"""
date_data = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
real_date = date_data.stdout.readline().split(':')[1].strip()
return time.strftime('%Y-%m-%d', time.strptime(real_date, "%m/%d/%Y"))
def get_os_version():
return ' '.join(platform.linux_distribution())
def get_innerip(ipinfo):
inner_device = ['eth1', 'bond0']
ret = {}
for info in ipinfo:
if info.has_key('ip') and info.get('device', None) in inner_device:
ret['ip'] = info.get('ip')
ret['mac_address'] = info.get('mac')
return ret
return {}
def run():
data = {}
data['hostname'] = get_hostname()
device_info = get_device_info()
data.update(get_innerip(device_info))
data['ipinfo'] = json.dumps(device_info)
cpu_info = get_cpu_info()
data['server_cpu'] = "{cpu} {num}".format(**cpu_info)
data['server_disk'] = get_disk_info()
data['server_mem'] = get_meminfo()
data.update(get_manufacturer_info())
data['manufacture_date'] = get_real_date()
data['os'] = get_os_version()
if 'virtualbox' == data['server_type']:
data['vm_status'] = 0
else:
data['vm_status'] = 1
# return data
send(data)
def send(data):
url = "http://192.168.99.10:8000/resources/server/reporting/"
r = requests.post(url, data = data)
print r
print data
if __name__ == "__main__":
run()
使用函数式编程获取内存使用信息,写入html文件中
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
#coding:utf-8
# 使用函数式编程获取内存使用信息,写入html文件中
# 将内存占用的数字带上单位
def num_format(num):
num = int(num)
o = 'KB'
if num > 1024*1024:
num /= 1024*1024.0
o = 'GB'
return '%2f%s' % (num ,o)
elif num > 1024:
num /= 1024.0
o = 'MB'
return '%2f%s' % (num, o)
return '%2f%s' % (num, o)
# 获取内存的数字
def get_mem(arr):
tmp = arr.split()
tmp[1] = num_format(tmp[1])
# print 'tmp = %s' % tmp[:2]
return tmp[:2]
# 读取meminfo的信息
def operate(key):
with open('/proc/meminfo') as f:
mem_total = key(f.readline())
mem_free = key(f.readline())
mem_ava = key(f.readline())
mem_buff = key(f.readline())
mem_cached = key(f.readline())
return [mem_total,mem_free,mem_ava,mem_buff,mem_cached]
# 将信息写入html页面
def genarate_html(rst_list):
str_html = '<table border="1" cellpading=0 cellspacing=0>'
str_html += '<tr><th>项目</th><th>占用内存</th></tr>'
for mem in rst_list:
str_html += '<tr><td>%s</td><td>%s</td></tr>' % tuple(mem)
print mem
str_html += '</table>'
with open('mem.html', 'w') as f:
f.write(str_html)
def main():
rst_list = operate(get_mem)
genarate_html(rst_list)
if __name__ == "__main__":
main()
更多推荐
已为社区贡献35条内容
所有评论(0)