您好,登錄后才能下訂單哦!
整體的思路就是通過Django API獲取虛擬機信息,如果不存在就通過API去訪問獲取。
這個問題看起來比較奇怪,按照錯誤的思路,應該是在exception的異常捕獲部門來處理,這么做確實是可以的,但是如果要擴展邏輯,異常處理的邏輯就會越來越重,感覺怪怪的。
所以反復測試,也算是明白了,使用get的方式去獲取數據,如果獲取不到就會拋錯,個人感覺這個接口還是不太友好,可以換一種方式,比如filter來實現,因為從表結構能夠定位到這是一個主鍵或者唯一性索引。
所以代碼的部分根據count的方式來做了調整,然后在這個基礎上又做了改進,即如果在本地的數據庫中不存在,則訪問接口得到數據庫,把數據庫下沉到本地,整個過程對于我們使用是透明的,也算是一種比較友好的交互方式。
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
后續準備對這些信息做更進一步的改進,能夠實現元數據的增量刷新,即數據發生變化的時候我會調用接口刷新數據到本地,否則還是保持不變。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。