CMDB可插拔式專案(二)

2021-09-24 18:54:59 字數 2826 閱讀 5447

完善採集功能

post的資料獲取:

request.body才會將資料封裝給request.post方法

requests 模組 post 資料的方式:

a.requests.post(settings.api_url, data=json.dumps(res))

b.requests.post(settings.api_url, json=res)

併發提高採集的效率:

python2:

程序池 : 有

執行緒池 : 無

python3:

程序池: 有

執行緒池: 有

核心**:

hostnamelist = self.get_hostnames()

from concurrent.futures import threadpoolexecutor

p = threadpoolexecutor(10)

for hostname in hostnamelist:

p.submit(self.task, hostname)

第一天: 

新的資料: '}, "cpu": }, "disk": , "1": , "2": , "3": , "4": , "5": }}, "memory": , "dimm #1": , "dimm #2": , "dimm #3": , "dimm #4": , "dimm #5": , "dimm #6": , "dimm #7": }}, "nic": }}}'

資料清洗

資料入庫:

server:

id hostname sn os_platform os_version

1 c1.com dsbahdsa linux 7.0

第二天:

新的資料: '}, "cpu": }, "disk": , "1": , "2": , "3": , "4": , "5": }}, "memory": , "dimm #1": , "dimm #2": , "dimm #3": , "dimm #4": , "dimm #5": , "dimm #6": , "dimm #7": }}, "nic": }}}'

資料入庫:

老的資料:

server:

id hostname sn os_platform os_version

1 c1.com dsbahdsa linux 7.0

2 3

現在做法:

取sn作為唯一標識, 來獲取老的資料

改進的做法:

1. 業務邏輯解決 : 如果公司不採集虛擬機器的資訊, 直接用sn

2. 用hostname作為唯一標識

agent需要遵守的步驟:

a. 裝機完成之後, 需要給每一台伺服器分配乙個唯一的主機名

b. 將分配好的主機名錄入到web管理系統中

因此, 在沒有收集資產的情況下, 資料庫中 已經錄好了主機的主機名

c. 將採集的客戶端**放到伺服器的某乙個目錄下面, 然後開始定時執行**指令碼

d. 開始第一次採集

將主機名(c1.com)記錄到乙個檔案中

e. 將伺服器分配給開發用

f. 12點開始收集資產資訊, 11:59,班長修改了主機名, c1.com---> c2000.com,

匯報資料的時候, 永遠以第一次採集的檔案中的主機名為標準

g: '}'

非對稱加密:

生成一對公鑰私鑰

對稱加密:

第一種方式:

服務端:

return httpresponse('非法使用者')

客戶端:

import requests

client_token = "bdsjabfjsldabjfdsnbajfndjakfnjdsanfjd"

res = requests.get('', headers = )

第二種方式:

加密和加鹽

if server_time - client_time > 5:

return httpresponse('[第一關] 小夥子 超時了....')

tmp = "%s|%s" % (server_token, client_time)

m = hashlib.md5()

m.update(bytes(tmp, encoding='utf-8'))

server_md5 = m.hexdigest()

if client_md5 != server_md5:

return httpresponse('[第二關 資料被修改了]')

第三種方式:

設定過期時間(將訪問過的token存入到redis中, 設定過期時間, 保證列表的長度在一定的範圍之內)

if client_md5_token in key_record3

return httpresponse('[第三關] 已經被訪問過了')

else:

key_record[client_md5_token] = client_time + 10

return httpresponse('非常重要的資料')

CMDB可插拔式專案架構(一)

bin start.py conf setting.py 使用者自定義部分 files board.text disk.text 一些死資料,debug模式下使用 lib 用於存放類庫檔案,常見內外部工具包 config global settings.py 預設全域性配置 settings.py ...

可插拔式 元件設計,領略元件開發的奧秘

從乙個confirm元件開始,一步步寫乙個可插拔式的元件。處理乙個正常的支付流程 比如支付寶購買 點選購買按鈕 如果風險等級不匹配則 彈確認框 confirm 使用者確認風險後 彈出支付方式選擇彈窗 dialog 選擇好支付方式後 彈窗呼叫指紋驗證 dialog 如果關閉指紋驗證 提示是否輸入密碼 ...

3 SOA模組可插拔設計 模組化即分布式化

1 分布式部署各個子系統,基礎元件支援平台作為jar或者war方式整合至各個子系統 2 各個分布式子系統之間,通過http ip 請求方式完成各個系統之間靈活切換 3 各個分布式子系統,依託後台管理系統 sso實現全平台子系統安全認證識別 4 各個分布式子系統,依託各自內部基礎元件支援平台jar中核...