Django项目:CMDB(服务器硬件资产自动采集系统)--11--07CMDB文件模式测试采集硬件数据

Posted 颜言

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django项目:CMDB(服务器硬件资产自动采集系统)--11--07CMDB文件模式测试采集硬件数据相关的知识,希望对你有一定的参考价值。

 

 1 #settings.py
 2 # ————————01CMDB获取服务器基本信息————————
 3 import os
 4 
 5 BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))##当前路径
 6 
 7 # 采集资产的方式,选项有:agent(默认), salt, ssh
 8 MODE = \'agent\'
 9 
10 # ————————01CMDB获取服务器基本信息————————
11 
12 # ————————02CMDB将服务器基本信息提交到API接口————————
13 # 资产信息API
14 # ————————06CMDB测试Linux系统采集硬件数据的命令————————
15 # ASSET_API = "http://127.0.0.1:8000/api/asset"
16 ASSET_API = "http://192.168.80.53:8000/api/asset"
17 # ————————06CMDB测试Linux系统采集硬件数据的命令————————
18 
19 # ————————02CMDB将服务器基本信息提交到API接口————————
20 
21 # ————————03CMDB信息安全API接口交互认证————————
22 # 用于API认证的KEY
23 KEY = \'299095cc-1330-11e5-b06a-a45e60bec08b\' #认证的密码
24 # 用于API认证的请求头
25 AUTH_KEY_NAME = \'auth-key\'
26 # ————————03CMDB信息安全API接口交互认证————————
27 
28 
29 # ————————04CMDB本地(Agent)模式客户端唯一标识(ID)————————
30 # Agent模式保存服务器唯一ID的文件
31 CERT_FILE_PATH = os.path.join(BASEDIR, \'config\', \'cert\') #文件路径
32 # ————————04CMDB本地(Agent)模式客户端唯一标识(ID)————————
33 
34 # ————————05CMDB采集硬件数据的插件————————
35 # 采集硬件数据的插件
36 PLUGINS_DICT = {
37     \'cpu\': \'src.plugins.cpu.CpuPlugin\',
38     \'disk\': \'src.plugins.disk.DiskPlugin\',
39     \'main_board\': \'src.plugins.main_board.MainBoardPlugin\',
40     \'memory\': \'src.plugins.memory.MemoryPlugin\',
41     \'nic\': \'src.plugins.nic.NicPlugin\',
42 }
43 # ————————05CMDB采集硬件数据的插件————————
44 
45 # ————————07CMDB文件模式测试采集硬件数据————————
46 # 是否测试模式,测试模时候数据从files目录下读取信息  选项有:#True  False
47 TEST_MODE = True
48 # ————————07CMDB文件模式测试采集硬件数据————————
#settings.py

 

 

 1 #base.py
 2 # ————————01CMDB获取服务器基本信息————————
 3 from config import settings  #配置文件
 4 
 5 class BasePlugin(object):
 6     def __init__(self, hostname=\'\'):
 7 
 8         # ————————07CMDB文件模式测试采集硬件数据————————
 9         self.test_mode = settings.TEST_MODE#是否测试模式
10         # ————————07CMDB文件模式测试采集硬件数据————————
11 
12         if hasattr(settings, \'MODE\'):
13             self.mode = settings.MODE #采集资产的方式
14         else:
15             self.mode = \'agent\'#默认,采集资产的方式
16     def execute(self):
17 
18         # ————————06CMDB测试Linux系统采集硬件数据的命令————————
19         # return self.windows()
20         try:#判断系统平台类型
21 
22             # ————————07CMDB文件模式测试采集硬件数据————————
23             if self.test_mode:  # 是否测试模式
24                 return self.test()  # 测试模式
25             # ————————07CMDB文件模式测试采集硬件数据————————
26 
27             import platform  # 获取操作系统信息 的模块
28             if platform.system() == \'Linux\':
29                 return self.linux() #执行 #def linux(self):
30             elif platform.system() == \'Windows\':
31                 return self.windows() #  执行 #def windows(self):
32         except Exception as e:
33             return \'未知的系统平台类型!\'
34         # ————————06CMDB测试Linux系统采集硬件数据的命令————————
35 
36     def windows(self):
37         raise Exception(\'您必须实现windows的方法\')
38 # ————————01CMDB获取服务器基本信息————————
39 
40     # ————————06CMDB测试Linux系统采集硬件数据的命令————————
41     def linux(self):
42         raise Exception(\'您必须实现linux的方法\')
43     # ————————06CMDB测试Linux系统采集硬件数据的命令————————
44 
45     # ————————07CMDB文件模式测试采集硬件数据————————
46     def test(self):#测试模式
47         raise Exception(\'您必须实现test的方法\')
48     # ————————07CMDB文件模式测试采集硬件数据————————
#base.py

 

 

 

 

  1 # basic.py
  2 # ————————01CMDB获取服务器基本信息————————
  3 from .base import BasePlugin #采集资产的方式
  4 from lib.response import BaseResponse   #提交数据的类型
  5 import platform  #platform模块给我们提供了很多方法去获取操作系统的信息
  6 
  7 # ————————06CMDB测试Linux系统采集硬件数据的命令————————
  8 # import wmi#Windows操作系统上管理数据和操作的基础设施   #linux写无法导入这个模块
  9 # ————————06CMDB测试Linux系统采集硬件数据的命令————————
 10 """
 11 本模块基于windows操作系统,依赖wmi和win32com库,需要提前使用pip进行安装,
 12 我们依然可以通过pip install pypiwin32来安装win32com模块
 13 或者下载安装包手动安装。
 14 """
 15 
 16 class BasicPlugin(BasePlugin):
 17     def os_platform(self):#获取系统平台
 18         # ————————07CMDB文件模式测试采集硬件数据————————
 19         # output=platform.system() #windows和Linux 都可以执行
 20         # return output.strip()#strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
 21 
 22         try:
 23             if self.test_mode:  # 是否测试模式
 24                 output = \'Linux\'  # 选择要测试的系统(windows和Linux或者苹果等未知的系统)
 25                 return output.strip()  # strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
 26             output = platform.system() #windows和Linux 都可以执行
 27             return output.strip()  # strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
 28         except Exception as e:
 29             return \'未知的系统平台!\'
 30         # ————————07CMDB文件模式测试采集硬件数据————————
 31 
 32     def os_version(self):#获取系统版本
 33         # output = wmi.WMI().Win32_OperatingSystem()[0].Caption
 34         # return output.strip()#strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
 35 
 36         # ————————06CMDB测试Linux系统采集硬件数据的命令————————
 37         try:
 38 
 39             # ————————07CMDB文件模式测试采集硬件数据————————
 40             if self.test_mode:  # 是否测试模式
 41                 output = """CentOS release 6.6 (Final)\\nKernel \\r on an \\m"""
 42                 result = output.strip().split(\'\\n\')[0]  # strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。#split() 通过指定分隔符对字符串进行切片
 43                 return result
 44             # ————————07CMDB文件模式测试采集硬件数据————————
 45 
 46             if platform.system() == \'Linux\':
 47                 import subprocess  # 启动一个新的进程并且与之通信
 48                 output = subprocess.getoutput(\'cat /etc/issue\')  # Linux系统下的命令
 49                 result = output.strip().split(\'\\n\')[0]  # split() 通过指定分隔符对字符串进行切片
 50                 # strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
 51                 return result
 52             if platform.system() == \'Windows\':
 53                 import wmi  # Windows操作系统上管理数据和操作的基础设施   #linux写无法导入这个模块
 54                 output = wmi.WMI().Win32_OperatingSystem()[0].Caption  # Windows系统下的命令
 55                 result = output.strip()
 56                 # strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
 57                 return result
 58         except Exception as e:
 59             return \'未知的系统版本!\'
 60         # ————————06CMDB测试Linux系统采集硬件数据的命令————————
 61 
 62     def os_hostname(self):#获取主机名
 63         # output = wmi.WMI().Win32_OperatingSystem()[0].CSName
 64         # return output.strip()#strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
 65 
 66         # ————————06CMDB测试Linux系统采集硬件数据的命令————————
 67         try:
 68 
 69             # ————————07CMDB文件模式测试采集硬件数据————————
 70             if self.test_mode:  # 是否测试模式
 71                 output = \'test.com\'
 72                 return output.strip()  # strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
 73             # ————————07CMDB文件模式测试采集硬件数据————————
 74 
 75             if platform.system() == \'Linux\':
 76                 import subprocess  # 启动一个新的进程并且与之通信
 77                 output = subprocess.getoutput(\'hostname\')  # Linux系统下的命令
 78                 return output.strip()  # strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
 79             elif platform.system() == \'Windows\':
 80                 import wmi # Windows操作系统上管理数据和操作的基础设施   #linux写无法导入这个模块
 81                 output = wmi.WMI().Win32_OperatingSystem()[0].CSName  # Windows系统下的命令
 82                 return output.strip()  # strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
 83         except Exception as e:
 84             return \'未知的主机名!\'
 85         # ————————06CMDB测试Linux系统采集硬件数据的命令————————
 86 
 87     def windows(self):
 88         response = BaseResponse()#提交数据的类型
 89         try:
 90             ret = {
 91                 \'os_platform\': self.os_platform(),#系统平台
 92                 \'os_version\': self.os_version(),#系统版本
 93                 \'hostname\': self.os_hostname(),#主机名
 94             }
 95             response.data = ret #字典形式
 96             print(\'windows服务器基本信息:\',response.data)
 97         except Exception as e:
 98             response.status = False#获取信息时出现错误
 99         return response
100     """
101     class BaseResponse(object): #提交数据的类型
102     def __init__(self):
103         self.status = True      #状态
104         self.message = None     #消息
105         self.data = None        #数据内容
106         self.error = None       #错误信息
107 
108     """
109 # ————————01CMDB获取服务器基本信息————————
110 
111     # ————————06CMDB测试Linux系统采集硬件数据的命令————————
112     def linux(self):
113         response = self.windows() #因为执行同样的方法,所以,就不重复写。
114         print(\'linux服务器基本信息:\', response.data)
115         return response
116     # ————————06CMDB测试Linux系统采集硬件数据的命令————————
117 
118     # ————————07CMDB文件模式测试采集硬件数据————————
119     def test(self):
120         response = self.windows() #因为执行同样的方法,所以,就不重复写。
121         print(\'test服务器基本信息:\', response.data)
122         return response
123     # ————————07CMDB文件模式测试采集硬件数据————————
# basic.py

 

 

 

 1 # cpu.py
 2 # ————————05CMDB采集硬件数据的插件————————
 3 from .base import BasePlugin  #采集资产的方式  和  系统平台
 4 from lib.response import BaseResponse #提交数据的类型(字典)
 5 
 6 # ————————06CMDB测试Linux系统采集硬件数据的命令————————
 7 # import wmi#Windows操作系统上管理数据和操作的基础设施   #linux写无法导入这个模块
 8 # ————————06CMDB测试Linux系统采集硬件数据的命令————————
 9 
10 class CpuPlugin(BasePlugin):
11     def windows(self):
12         response = BaseResponse() #提交数据的类型(字典)
13         try:
14             # ————————06CMDB测试Linux系统采集硬件数据的命令————————
15             import wmi#Windows操作系统上管理数据和操作的基础设施   #linux写无法导入这个模块
16             # ————————06CMDB测试Linux系统采集硬件数据的命令————————
17             output =wmi.WMI().Win32_Processor() #获取CPU相关信息
18             response.data = self.windows_parse(output)  #解析相关信息 返回结果 #存到字典
19         except Exception as e:
20             response.status = False
21         return response
22 
23     @staticmethod#返回函数的静态方法
24     def windows_parse(content):
25         response = {}
26         cpu_physical_set = set()#set()函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
27         for item in content:
28             response[\'cpu_model\'] = item.Manufacturer  # cpu型号
29             response[\'cpu_count\'] = item.NumberOfCores  # cpu核心个量
30             cpu_physical_set.add(item.DeviceID) #CPU物理个量
31         response[\'cpu_physical_count\'] = len(cpu_physical_set)#CPU物理个量
32         return response #返回结果
33 
34 # ————————05CMDB采集硬件数据的插件————————
35 
36     # ————————07CMDB文件模式测试采集硬件数据————————
37     def test(self):
38         response = BaseResponse() #提交数据的类型(字典)
39         import os  # 操作系统层面执行
40         from config.settings import BASEDIR  # 获取路径
41         try:
42             output = open(os.path.join(BASEDIR, \'files/linux_out/cpu.out\'), \'r\').read() #打开文件获取内容
43             response.data = self.linux_parse(output)#解析shell命令返回结果
44         except Exception as e:
45             response.status = False
46         return response
47     # ————————07CMDB文件模式测试采集硬件数据————————
48 
49 # ————————06CMDB测试Linux系统采集硬件数据的命令————————
50     def linux(self):
51         response = BaseResponse()  # 提交数据的类型(字典)
52         try:
53             import subprocess  # 启动一个新的进程并且与之通信
54             shell_command = "cat /proc/cpuinfo"  # 定义命令 lscpu
55             output = subprocess.getoutput(shell_command)  # linux系统上执行的命令
56             response.data = self.linux_parse(output)  # 解析shell命令返回结果
57         except Exception as e:
58             response.status = False
59         return response
60 
61     @staticmethod  # 返回函数的静态方法
62     def linux_parse(content):  # 解析shell命令返回结果
63         response = {\'cpu_count\': 0, \'cpu_physical_count\': 0, \'cpu_model\': \'\'}
64         cpu_physical_set = set()  # set()函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
65         content = content.strip()  # strip()方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列
66         for item in content.split(\'\\n\\n\'):  # split()通过指定分隔符对字符串进行切片
67             for row_line in item.split(\'\\n\'):
68                 key, value = row_line.split(\':\')
69                 key =Django项目:CMDB(服务器硬件资产自动采集系统)--09--06CMDB测试Linux系统采集硬件数据的命令04

Django项目:CMDB(服务器硬件资产自动采集系统)--10--06CMDB测试Linux系统采集硬件数据的命令05

Django项目:CMDB(服务器硬件资产自动采集系统)--01--01CMDB获取服务器基本信息

Django项目:CMDB(服务器硬件资产自动采集系统)--03--03CMDB信息安全API接口交互认证

Django项目:CMDB(服务器硬件资产自动采集系统)--02--02CMDB将服务器基本信息提交到API接口

硬件资产管理系统总结