zoukankan      html  css  js  c++  java
  • 分布式监控系统开发【day37】:服务端生成配置数据(四)

    一、目录结构

    二、引子与代码

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

    1、解决了什么问题

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

    2、实现代码

    总urls

    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 urls

    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),
    ]
    

    2、试图函数

    1、解决了什么问题

    1. 传一个ID过来,在这里面干的事情是什么呀?
    2. 拿到ID根据ID到数据库拿到主机关联的模板,所关联的主机组
    3. 模板关联的服务,服务都有哪些指标
    4. 我要给客户端返回的是一个json大字典,这个大字典长什么?
      我在视图里倒入这个模块,执行这个实例

    2、大字典长什么样?

    3、代码实现

    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))
    

    3、序列化函数

    1、解决了什么问题

    1、我要给客户端返回的是一个json大字典,这个大字典长什么?
    2、这个类都干了写什么事情?

    1、拿到这条记录
    2、找到这台机器关联的所有模板,把关联所有的模板列出来,
    3、把它变成列表,为什么要变成列表?
      因为主机组关联的模板和主机关联的模板有重合的部分
    4、把这个主机关联的所有主机组(因为一个主机关联多个主机组)取出来
    5、然后把主机组里的模板,和我主机的模板拼接成一个大的列表
    6、这些模板可能重复,我循环所有的模板,把所有的模板变成统一的服务列表
    7、然后去重(每个模板里包含很多服务)

    2、代码实现

    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服务列表

  • 相关阅读:
    FLV视频转换的利器 ffmpeg.exe
    ffmpeg参数设定解说
    SQL里加减日期
    SQL Server 获得影响行数
    CheckBoxList RadioButtonList 不生成table 表示
    SQL语句 从一个表读取数据,写入到另一个表的相同字段中
    ffmpeg和Mencoder使用实例小全
    执行存储过程出现:"不是有效的标识符。"
    SQL 格式化超长的字段
    js遍历选中的dom元素
  • 原文地址:https://www.cnblogs.com/luoahong/p/9533042.html
Copyright © 2011-2022 走看看