一、目录结构

二、引子与代码

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. 做移动端电子签名发现canvas的 一些坑

    做移动端收集电子签名项目的时候发现了一些坑: 1. 移动端的手指按下.移动.抬起事件跟PC端的鼠标按下.移动.弹起事件是不一样的 2. canvas它的属性宽高和样式宽高是不一样的,通过CSS来设置c ...

  2. EntityFramework Code-First 简易教程(六)-------领域类配置之DataAnnotations

    EF Code-First提供了一个可以用在领域类或其属性上的DataAnnotation特性集合,DataAnnotation特性会覆盖默认的EF约定. DataAnnotation存在于两个命名空 ...

  3. 进程命令(taskkill)

    taskkill 命令: // 描述: 结束一个或多个任务或流程. // 语法: taskkill [/s <computer> [/u [<Domain>\]<User ...

  4. MySQL之表相关操作

    一 存储引擎介绍 存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制 详见:http://www.cnblogs.com/linhaifeng/articles/7213670.html ...

  5. Docker 安装 MySQL

    1. docker search mysql 2.docker pull mysql/mysql-serer 3.mkdir -p ~/mysql/data ~/mysql/logs ~/mysql/ ...

  6. 路由信息对象Route之属性query和params的区别

    query的使用 第一步:在<router-link/>标签中配置如下 <router-link :to="{name:'beijing',query:{id:1,user ...

  7. Winform开发框架中工作流模块的动态处理

    在工作流处理表中,首先我们区分流程模板和流程实例两个部分,这个其实就是类似模板和具体文档的概念,我们一份模板可以创建很多个类似的文档,文档样式结构类似的.同理,流程模板实例为流程实例后,就是具体的一个 ...

  8. 基于 HTML5 的 WebGL 3D 档案馆可视化管理系统

    前言 档案管理系统是通过建立统一的标准以规范整个文件管理,包括规范各业务系统的文件管理的完整的档案资源信息共享服务平台,主要实现档案流水化采集功能.为企事业单位的档案现代化管理,提供完整的解决方案,档 ...

  9. C#中字节数组(byte[])和字符串相互转换

    转换过程主要使用到System.Text.Encoding命名空间下的类 1. 字符串转换成字节数组byte[]: string str = "This is test string&quo ...

  10. Python-序列号和模块复习-64

    # 序列化模块 # 数据类型转化成字符串的过程就是序列化 # 为了方便存储和网络传输 # json # dumps # loads # dump 和文件有关 # load load不能load多次 i ...