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文件模式测试采集硬件数据————————
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文件模式测试采集硬件数据————————
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文件模式测试采集硬件数据————————
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系统采集硬件数据的命令04Django项目:CMDB(服务器硬件资产自动采集系统)--10--06CMDB测试Linux系统采集硬件数据的命令05
Django项目:CMDB(服务器硬件资产自动采集系统)--01--01CMDB获取服务器基本信息
Django项目:CMDB(服务器硬件资产自动采集系统)--03--03CMDB信息安全API接口交互认证