一、解決了什麼問題python
二、實現代碼數據庫
總urlsdjango
from django.conf.urls import url,include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^api/', include("monitor.api_urls")), ]
監控app urlsjson
from django.conf.urls import url,include from monitor import api_views urlpatterns = [ url(r'client/config/(\d+)/$',api_views.client_config), url(r'client/service/report/$',api_views.service_report), ]
一、解決了什麼問題api
我要給客戶端返回的是一個json大字典,這個大字典長什麼?
我在視圖裏倒入這個模塊,執行這個實例服務器
二、大字典長什麼樣?app
三、代碼實現函數
from django.shortcuts import render,HttpResponse import json from monitor.serializer import ClientHandler # Create your views here. def client_config(request,client_id): config_obj = ClientHandler(client_id) config = config_obj.fetch_configs() if config: return HttpResponse(json.dumps(config))
一、我要給客戶端返回的是一個json大字典,這個大字典長什麼?
二、這個類都幹了寫什麼事情?oop
一、拿到這條記錄
二、找到這臺機器關聯的全部模板,把關聯全部的模板列出來,
三、把它變成列表,爲何要變成列表?
由於主機組關聯的模板和主機關聯的模板有重合的部分
四、把這個主機關聯的全部主機組(由於一個主機關聯多個主機組)取出來
五、而後把主機組裏的模板,和我主機的模板拼接成一個大的列表
六、這些模板可能重複,我循環全部的模板,把全部的模板變成統一的服務列表
七、而後去重(每一個模板裏包含不少服務)測試
from monitor import models import json, time from django.core.exceptions import ObjectDoesNotExist class ClientHandler(object): def __init__(self, client_id): self.client_id = client_id self.client_configs = { "services": {} } def fetch_configs(self): try: host_obj = models.Host.objects.get(id=self.client_id) template_list = list(host_obj.templates.select_related()) for host_group in host_obj.host_groups.select_related(): template_list.extend(host_group.templates.select_related()) print(template_list) for template in template_list: # print(template.services.select_related()) for service in template.services.select_related(): # loop each service print(service) self.client_configs['services'][service.name] = [service.plugin_name, service.interval] except ObjectDoesNotExist: pass return self.client_configs
獲取主機2服務列表