分布式监控系统开发【day37】:服务端生成配置数据(四)

1、目录结构

2、引子与代码

一、客户端获取服务列表接口

一、解决了什么问题python

  1. 客户端要给我获取服务列表的的时候,他确定要告诉他是谁?他怎么告诉我,客户端必须有一个id号
  2. Saltsack你装一个客户端,客户端配置一个server的ip地址,这样服务器端就知道它是谁了
  3. 服务器端生成一个惟一值,告诉你这就是你,你记住之后就告诉我你的ID

二、实现代码数据库

总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

  1. 传一个ID过来,在这里面干的事情是什么呀?
  2. 拿到ID根据ID到数据库拿到主机关联的模板,所关联的主机组
  3. 模板关联的服务,服务都有哪些指标
  4. 我要给客户端返回的是一个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

3、测试截图

获取主机2服务列表

相关文章
相关标签/搜索