1、代码实现目的
注:代码可以直接粘贴使用
为了实现对主机的整体有明确的了解,实现了下面的代码功能
代码主要功能是:
提取到主机的内存、硬盘、CPU、型号等信息
插入到mysql的数据库中
回到顶部
2、代码具体实现步骤
2.1首先要先在mysql中新建数据库和数据表
新建数据库:
create database host;
新建数据表:
CREATE TABLE `host_data` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`product` varchar(255) DEFAULT NULL,
`cpu_num` varchar(255) DEFAULT NULL,
`hostname` varchar(255) DEFAULT NULL,
`ip_out` varchar(255) NOT NULL DEFAULT '',
`cpu_model` varchar(255) DEFAULT NULL,
`ip_in` varchar(255) DEFAULT NULL,
`osver` varchar(255) DEFAULT NULL,
`sn` varchar(255) DEFAULT NULL,
`Memory` varchar(255) DEFAULT NULL,
`vender` varchar(255) DEFAULT NULL,
`Disk` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`,`ip_out`),
UNIQUE KEY `ip_out` (`ip_out`)
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8;
2.2 下面就是具体获取硬件信息的代码:
#!/usr/bin/env python
# encoding: utf-8
'''
收集主机的信息:
主机名称、IP、系统版本、服务器厂商、型号、序列号、CPU信息、内存信息
'''
from subprocess import Popen, PIPE
import os, sys
import socket, fcntl, struct
from collections import namedtuple
import pymysql
import re
'''获取所以磁盘信息'''
disk_ntuple = namedtuple('partition', 'device mountpoint fstype')
usage_ntuple = namedtuple('usage', 'total used free percent')
''' 获取 ifconfig 命令的输出 '''
def getIfconfig():
p = Popen(['ifconfig'], stdout=PIPE)
data = p.stdout.read()
return data
''' 获取 dmidecode 命令的输出 '''
def getDmi():
p = Popen(['dmidecode'], stdout=PIPE)
data = p.stdout.read()
return data
'''获取磁盘总大小 格式sda[300GB]+sdb[300GB]'''
def humanize_bytes(bytesize, precision=0):
abbrevs = (
(10**15, 'PB'),
(10**12, 'TB'),
(10**9, 'GB'),
(10**6, 'MB'),
(10**3, 'kB'),
(1, 'bytes')
)
if bytesize == 1:
return '1 byte'
for factor, suffix in abbrevs:
if bytesize >= factor:
break
return '%.*f%s' % (precision, round(float(bytesize) / factor), suffix)
def dev_phy_size():
with open('/proc/partitions','r') as dp:
res = ''
for disk in dp.readlines():
if re.search(r'[s,h,v]d[a-z]\n',disk):
blknum = disk.strip().split(' ')[-2]
dev = disk.strip().split(' ')[-1]
size = int(blknum)*1024
consist = dev+'['+humanize_bytes(size).strip()+']'
res += consist + '+'
return {'Disk':res[:-1]}
# '''获取分区路径和挂载、格式信息'''
# def disk_partitions(all=False):
# """Return all mountd partitions as a nameduple.
# If all == False return phyisical partitions only.
# """
# phydevs = []
# f = open("/proc/filesystems", "r")
# for line in f:
# if not line.startswith("nodev"):
# phydevs.append(line.strip())
#
#