1.起初咱们些的代码是面条式的一堆的逻辑判断。linux
后来经过了不断的优化升级实现了一个3种方案都支持的CMDB系统,咱们用哪一种方案只须要在配置文件里修改一下设置就好了。git
同时咱们借鉴了django的中间件设置还实现了可插拔式的功能,这个可插拔式针对的是咱们要收集的某些硬件信息,只须要注释一下,就能够达到不用搜集了。github
2.流程: 1.settings: MODE----->肯定哪一种方案(【3个方案py文件】)redis
肯定哪一种脚本(【agent脚本,ssh(paramiko),saltstack】)本质功能调命令行数据库
可插拔配置---->(须要收集的硬件信息【每一个硬件1个py文件】)django
MODE='agent' #方案一 'agent', 方案二 'ssh',方案三 'salt' DEBUG=True #可插拔配置 PLUGINS_DICT={ 'basic':'src.data.basic.Basic', 'board':'src.data.board.Board', 'cpu':'src.data.cpu.Cpu', 'disk':'src.data.disk.Disk', 'memory':'src.data.memory.Memory', # 'nic':'src.data.nic.Nic', }
2.for循环硬件配置,传入方法:执行相应硬件的linux命令 拿到咱们须要收集的信息 服务器
{'basic': {'status': 10000, 'data': {'os_platform': 'linux', 'os_version': 'CentOS release 6.6 (Final)\nKernel \r on an \\m', 'hostname': 'c2.com'}}}
#注意:ssh(hostme 密钥或服务器用户名密码 ),salt方式只须要hostnameapp
#我写了一个类方法来for循环配置文件,一个方法拿到脚本方法 ,init定义了hostname,root,pwd等 ssh
token认证:ide
过滤2部分:1.无关的请求 2.用户请求
token格式 asadasdasd|1321151.21312
经过格式过滤
经过time时间设置token的有效时间
经过随机字符串认证token
经过了 存入redis(无限存?)只容许登录1次设置过时时间
AES数据加密
1.pip3 install pycrypto 2.pip3 install wheel 3.https://github.com/sfbahr/PyCrypto-Wheels 下载pycrypto-2.6.1-cp35-none-win32 4.cd 到下载目录 pip3 install pycrypto 安装
from Crypto.Cipher import AES def encrypt(message): key = b'dfdsdfsasdfdsdfs' cipher = AES.new(key, AES.MODE_CBC, key) ba_data = bytearray(message,encoding='utf-8') v1 = len(ba_data) v2 = v1 % 16 if v2 == 0: v3 = 16 else: v3 = 16 - v2 for i in range(v3): ba_data.append(v3) final_data = ba_data msg = cipher.encrypt(final_data) # 要加密的字符串,必须是16个字节或16个字节的倍数 return msg def decrypt(msg): key = b'dfdsdfsasdfdsdfs' cipher = AES.new (key, AES.MODE_CBC, key) result = cipher.decrypt ( msg) # result = b'\xe8\xa6\x81\xe5\x8a\xa0\xe5\xaf\x86\xe5\x8a\xa0\xe5\xaf\x86\xe5\x8a\xa0sdfsd\t\t\t\t\t\t\t\t\t' data = result[0:-result[-1]] return str (data, encoding='utf-8')
数据库表设计