您好,登錄后才能下訂單哦!
整體的思路就是通過(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ù)到本地,否則還是保持不變。
免責(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)容。