收集服务器信息的代码

1. 收集服务器信息的代码


代码出现的问题:
- 代码重复
a. 可以写一个公共的方法:
b. 可以写一个父类方法

- 代码 高内聚 低耦合

收集的信息:
- 主板信息 (hostname, sn号)
- cpu信息(型号, 几个cpu等)
- disk磁盘信息 (大小,几块)
- 内存memory信息
- 网卡信息

可插拔式的插件收集上述信息:

- 配置文件
PLUGINS_DICT = {
'basic': 'src.plugins.basic.Basic',
'cpu': 'src.plugins.cpu.Cpu',
'disk': 'src.plugins.disk.Disk',
'memory': 'src.plugins.memory.Memory',
'nic': 'src.plugins.nic.Nic',
}


- 插件的两种解决方案:
a. 写一个公共的类
让其他的所有的类取继承Base这个基类

b. 高度进行抽象封装

实现当初的梦想:

1. 可插拔式的插件
2. 插件的__init__文件进行升级


2. 唯一标识问题

问题是:
实体机的SN号和我们虚拟机的sn号,共用一个

解决:
如果公司不采集虚拟机的信息, 可以用SN做唯一标识,来进行更新
else
如果公司要采集虚拟机的信息, sn号此时不能使用


标准流程:
- 服务器放置的机房,机架,几层
- 设置每台服务器的主机名


db:
第一次采集数据:
hostname: c1.com disk: 128G

第N天提交数据:
hostname: c111.com disk: 256G

解决方案:
将第一次采集的主机名写入到文件中,此后永远以文件中的主机名为准



使用进程池和线程池解决并发的问题:
from concurrent.futures import ThreadPoolExecutor
p = ThreadPoolExecutor(10)
for hostname in hostnames:
p.submit(self.run, hostname)

posted @ 2019-01-09 17:07  不沉之月  阅读(206)  评论(0编辑  收藏  举报