通过python脚本获取服务器硬件信息

时间:2021-01-20 08:07:39
#!/usr/bin/python
# coding:utf-8 """
采集机器自身信息
1 主机名
2 内存
3 ip与mac地址
4 cpu信息
5 硬盘分区信息
6 制造商信息
7 出厂日期
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文件中

#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()