溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

運(yùn)維開發(fā)里的數(shù)據(jù)動(dòng)態(tài)獲取和自動(dòng)補(bǔ)錄

發(fā)布時(shí)間:2020-08-11 14:03:35 來(lái)源:ITPUB博客 閱讀:162 作者:jeanron100 欄目:數(shù)據(jù)庫(kù)
vm_info_dict = virtual_machine_info.objects.get(ip=vm_ip_addr) print(vm_info_dict) if vm_info_dict != None: physical_server_ip = vm_info_dict.hostip device_info_dict = physical_server_info.objects.get(ip=physical_server_ip) phy_contain_vms = virtual_machine_info.objects.filter(hostip=physical_server_ip) else: token = gettoken('xxxxx', 'xxxxx') vm_info_dict=getresponse('https://xxxxx/API/v1/GetServerInfo/'+vm_ip_addr, token) physical_server_ip = vm_info_dict.get("hostip") print(physical_server_ip) device_info_dict=getresponse('https://xxxxxx/API/v1/GetDeviceInfo/'+physical_server_ip, token)

整體的思路就是通過(guò)Django API獲取虛擬機(jī)信息,如果不存在就通過(guò)API去訪問(wèn)獲取。

這個(gè)問(wèn)題看起來(lái)比較奇怪,按照錯(cuò)誤的思路,應(yīng)該是在exception的異常捕獲部門來(lái)處理,這么做確實(shí)是可以的,但是如果要擴(kuò)展邏輯,異常處理的邏輯就會(huì)越來(lái)越重,感覺怪怪的。

所以反復(fù)測(cè)試,也算是明白了,使用get的方式去獲取數(shù)據(jù),如果獲取不到就會(huì)拋錯(cuò),個(gè)人感覺這個(gè)接口還是不太友好,可以換一種方式,比如filter來(lái)實(shí)現(xiàn),因?yàn)閺谋斫Y(jié)構(gòu)能夠定位到這是一個(gè)主鍵或者唯一性索引。

所以代碼的部分根據(jù)count的方式來(lái)做了調(diào)整,然后在這個(gè)基礎(chǔ)上又做了改進(jìn),即如果在本地的數(shù)據(jù)庫(kù)中不存在,則訪問(wèn)接口得到數(shù)據(jù)庫(kù),把數(shù)據(jù)庫(kù)下沉到本地,整個(gè)過(guò)程對(duì)于我們使用是透明的,也算是一種比較友好的交互方式。

vm_info_dict_exists = virtual_machine_info.objects.filter(ip=vm_ip_addr).count() if vm_info_dict_exists >= 1:
vm_info_dict = virtual_machine_info.objects.get(ip=vm_ip_addr) print(vm_info_dict) physical_server_ip = vm_info_dict.hostip device_info_dict = physical_server_info.objects.get(ip=physical_server_ip)
phy_contain_vms = virtual_machine_info.objects.filter(hostip=physical_server_ip)
return_dict["device_info_dict"] = device_info_dict
return_dict["vm_info_dict"] = vm_info_dict
return_dict["phy_contain_vms"] = phy_contain_vms else:
token = gettoken('xxxx', 'xxxxxx')
vm_info_dict = getresponse('https://xxxxxx/API/v1/GetServerInfo/' + vm_ip_addr, token)
physical_server_ip = vm_info_dict.get("hostip") print(physical_server_ip) device_info_dict = getresponse('https://xxxxxxxAPI/v1/GetDeviceInfo/' + physical_server_ip, token)
return_dict["device_info_dict"] = device_info_dict
return_dict["vm_info_dict"] = vm_info_dict
vm_info = virtual_machine_info()
......
vm_info.memo = vm_info_dict.get("memo")
vm_info.save()
phy_exists = physical_server_info.objects.filter(ip=vm_info.hostip).count() if phy_exists == 0:
phy_info = physical_server_info()
phy_exists = physical_server_info.objects.filter(ip=vm_info.hostip).count() if phy_exists == 0:
phy_info = physical_server_info()
phy_info.update_date = device_info_dict.get("update_date")
......
phy_info.memo = device_info_dict.get("memo")
phy_info.save()
phy_contain_vms = virtual_machine_info.objects.filter(hostip=vm_info.hostip)
return_dict["phy_contain_vms"] = phy_contain_vms

后續(xù)準(zhǔn)備對(duì)這些信息做更進(jìn)一步的改進(jìn),能夠?qū)崿F(xiàn)元數(shù)據(jù)的增量刷新,即數(shù)據(jù)發(fā)生變化的時(shí)候我會(huì)調(diào)用接口刷新數(shù)據(jù)到本地,否則還是保持不變。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI