一、目录结构

二、引子与代码

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

分布式监控系统开发【day37】:服务端生成配置数据(四)的更多相关文章

  1. Python之路,Day20 - 分布式监控系统开发

    Python之路,Day20 - 分布式监控系统开发   本节内容 为什么要做监控? 常用监控系统设计讨论 监控系统架构设计 监控表结构设计 为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个 ...

  2. 分布式监控系统开发【day37】:需求讨论(一)

    本节内容 为什么要做监控? 常用监控系统设计讨论 监控需求讨论 如何实现监控服务器的水平扩展? 监控系统架构设计 一.为什么要做监控? 熟悉IT监控系统的设计原理 开发一个简版的类Zabbix监控系统 ...

  3. 分布式监控系统开发【day37】:表结构设计(二)

    一.表结构关系图 二.表结构需求讨论 1.主机表(Host) 1.解决了什么问题? 1.如果我不想让它监控了,就有一个开关的东西给它禁掉2.主机存活状态检测间隔 2.代码 class Host(mod ...

  4. 分布式监控系统开发【day37】:监控客户端开发(五)

    一.目录结构 二.模块方法调用关系总图 三.入口文件main 1.解决了说明问题 1.客户端就干了一件事情,干什么事情 收集数据汇报给服务端? 但是我这个客户端是插件形式2.首先必须要传一个参数,st ...

  5. Python之分布式监控系统开发

    为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个简版的类Zabbix监控系统 –掌握自动化开发项目的程序设计思路及架构解藕原则 常用监控系统设计讨论 Zabbix Nagios 监控系统需求 ...

  6. day26 分布式监控系统开发

    本节内容 为什么要做监控? 常用监控系统设计讨论 监控系统架构设计 监控表结构设计 为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个简版的类Zabbix监控系统 –掌握自动化开发项目的程序设 ...

  7. 分布式监控系统开发【day38】:主机存活检测程序解析(七)

    一.目录结构 二.入口 1.文件MonitorServer.py import os import sys if __name__ == "__main__": os.enviro ...

  8. 分布式监控系统开发【day37】:填充表配置项目(三)

    一.注册站点初始化数据库 1.目录结构 2.初始化数据库 python3 manage.py makemigrations python3 manage.py migrate #django2.0之前 ...

  9. 分布式监控系统开发【day37】:监控数据如何优化(六)

    一.数据如何存储方案讨论 1.一个服务存所有主机 2.一台主机的所有服务 3.所有的服务一分钟存一次? 数据量大,浏览器会卡住, 4.最终方案如下 二.解决方案存在问题 1.只能存7天如何处理? 超过 ...

随机推荐

  1. VS2015 IIS Express Web服务器无法启动解决办法

    1.运行和调试vs2015项目 提示无法运行项目,打开vs2013项目发现可以正常运行,所以推测试vs2015项目配置有问题. 2.找到项目启动项中 .csproj文件,定位到<WebProje ...

  2. iOS开发者学习Flutter

    Flutter for iOS 开发者 本文档适用那些希望将现有 iOS 经验应用于 Flutter 的开发者.如果你拥有 iOS 开发基础,那么你可以使用这篇文档开始学习 Flutter 的开发. ...

  3. 【English】20190328

    Emotions情绪 [ɪ'moʊʃənz]  Run Your Life for Teens影响你的青少年生活[ti:nz] Don't Let Your Emotions Run Your Lif ...

  4. Building Lambda Architecture with Spark Streaming

    The versatility of Apache Spark’s API for both batch/ETL and streaming workloads brings the promise ...

  5. nginx报错:failed (13: Permission denied)

    vim nginx.conf 修改user nginx为当前系统用户,如:user root

  6. 二维数组中的查找[by Python]

    题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...

  7. Django-CRM项目学习(三)-stark的页面展示

    开始今日份整理,主要为stark组件的增删改以及model_form组件的使用以及form组件的回顾 1.list_display_link功能 功能:客制化字段进行跳转到指定的页面(编辑页面) 1. ...

  8. 《React Native 精解与实战》书籍连载「React Native 源码学习方法及其他资源」

    此系列文章将整合我的 React 视频教程与 React Native 书籍中的精华部分,给大家介绍 React Native 源码学习方法及其他资源. 最后的章节给大家介绍 React Native ...

  9. flask刷新token

    我们在做前后端分离的项目中,最常用的都是使用token认证. 登录后将用户信息,过期时间以及私钥一起加密生成token,但是比较头疼的就是token过期刷新的问题,因为用户在登录后,如果在使用过程中, ...

  10. 二分查找c++实现

    二分查找的算法原理较为简单,在此给出c++代码实现,以及代码中遇到的问题,以及解决方案: # include "iostream" using namespace std; //t ...