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

二、引子与代码
1、客户端获取服务列表接口
1、解决了什么问题
- 客户端要给我获取服务列表的的时候,他肯定要告诉他是谁?他怎么告诉我,客户端必须有一个id号
- Saltsack你装一个客户端,客户端配置一个server的ip地址,这样服务器端就知道它是谁了
- 服务器端生成一个唯一值,告诉你这就是你,你记住以后就告诉我你的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、解决了什么问题
- 传一个ID过来,在这里面干的事情是什么呀?
- 拿到ID根据ID到数据库拿到主机关联的模板,所关联的主机组
- 模板关联的服务,服务都有哪些指标
我要给客户端返回的是一个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】:服务端生成配置数据(四)的更多相关文章
- Python之路,Day20 - 分布式监控系统开发
Python之路,Day20 - 分布式监控系统开发 本节内容 为什么要做监控? 常用监控系统设计讨论 监控系统架构设计 监控表结构设计 为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个 ...
- 分布式监控系统开发【day37】:需求讨论(一)
本节内容 为什么要做监控? 常用监控系统设计讨论 监控需求讨论 如何实现监控服务器的水平扩展? 监控系统架构设计 一.为什么要做监控? 熟悉IT监控系统的设计原理 开发一个简版的类Zabbix监控系统 ...
- 分布式监控系统开发【day37】:表结构设计(二)
一.表结构关系图 二.表结构需求讨论 1.主机表(Host) 1.解决了什么问题? 1.如果我不想让它监控了,就有一个开关的东西给它禁掉2.主机存活状态检测间隔 2.代码 class Host(mod ...
- 分布式监控系统开发【day37】:监控客户端开发(五)
一.目录结构 二.模块方法调用关系总图 三.入口文件main 1.解决了说明问题 1.客户端就干了一件事情,干什么事情 收集数据汇报给服务端? 但是我这个客户端是插件形式2.首先必须要传一个参数,st ...
- Python之分布式监控系统开发
为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个简版的类Zabbix监控系统 –掌握自动化开发项目的程序设计思路及架构解藕原则 常用监控系统设计讨论 Zabbix Nagios 监控系统需求 ...
- day26 分布式监控系统开发
本节内容 为什么要做监控? 常用监控系统设计讨论 监控系统架构设计 监控表结构设计 为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个简版的类Zabbix监控系统 –掌握自动化开发项目的程序设 ...
- 分布式监控系统开发【day38】:主机存活检测程序解析(七)
一.目录结构 二.入口 1.文件MonitorServer.py import os import sys if __name__ == "__main__": os.enviro ...
- 分布式监控系统开发【day37】:填充表配置项目(三)
一.注册站点初始化数据库 1.目录结构 2.初始化数据库 python3 manage.py makemigrations python3 manage.py migrate #django2.0之前 ...
- 分布式监控系统开发【day37】:监控数据如何优化(六)
一.数据如何存储方案讨论 1.一个服务存所有主机 2.一台主机的所有服务 3.所有的服务一分钟存一次? 数据量大,浏览器会卡住, 4.最终方案如下 二.解决方案存在问题 1.只能存7天如何处理? 超过 ...
随机推荐
- SQLServer之创建Transact-SQL DDL触发器
DDL触发器原理 DDL 触发器用于响应各种数据定义语言 (DDL) 事件. 这些事件主要与以关键字 CREATE.ALTER.DROP.GRANT.DENY.REVOKE 或 UPDATE STAT ...
- [原创]GDB调试指南-断点设置
前言 上篇<GDB调试指南-启动调试>我们讲到了GDB启动调试的多种方式,分别应用于多种场景.今天我们来介绍一下断点设置的多种方式. 为何要设置断点 在介绍之前,我们首先需要了解,为什么需 ...
- 戏说春秋_i春秋 writeup
<戏说春秋>第一关 图穷匕见 题目: 解:用winhex打开,拉到最后可发现一段编码 放到解密网站上解码. <戏说春秋>第二关 纸上谈兵 解:文中没有明确指出问题,也没有给出线 ...
- 怎样保证socket.recv接收完数据
最近在使用python进行网络编程开发一个通用的tcpclient测试小工具.在使用socket进行网络编程中,如何判定对端发送一条报文是否接收完成,是进行socket网络开发必须要考虑的一个问题.这 ...
- Windows 版 SourceTree 免登录跳过初始设置的方法
首先去官网下载最新的sourcetree安装包,点击打开下载地址. 下载完成后安装,等到他自启动开始提示你登录的时候,打开“我的电脑(此电脑)”,在最上边的输入栏输入%LocalAppData%\At ...
- html5 contenteditable 实现table可编辑(网页版EXCEL)
一直想找一个免费的网页版的EXCEL插件,以便于多人共同在线编辑,始终没发现合适的. 其实自己实现类似功能也不难.参考:https://blog.csdn.net/chadcao/article/de ...
- day18-网络编程基础(一)
勿骄勿燥,还是要定下心学习,还有有些没定下心 1.基础知识 2.tcp与udp协议 3.网络套接字 4.基于c/s结构的服务器客户端的实验 开始今日份总结 1.基础知识 现有的软件,绝大多数是基于C/ ...
- 两台主机,ssh端口不同,如何拷贝文件
A主机ip:172.26.225.199 ssh端口12995 B主机ip:172.26.225.200 ssh端口12991 将B主机的文件拷贝到A主机 [root@test2019030517 s ...
- 装饰器模式以及Laravel框架下的中间件应用
Laravel框架的中间件使用:从请求进来到响应返回,经过中间件的层层包装,这种场景很适合用到一种设计模式---装饰器模式. 装饰器模式的作用,多种外界因素改变对象的行为.使用继承的方式改变行为不太被 ...
- 路由信息对象Route之属性query和params的区别
query的使用 第一步:在<router-link/>标签中配置如下 <router-link :to="{name:'beijing',query:{id:1,user ...