一、目录结构

二、引子与代码

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. iOS transform属性的使用

    1.transform属性 在iOS开发中,通过transform属性可以修改UIView对象的平移.缩放比例和旋转角度,常用的创建transform结构体方法分两大类 (1) 创建“基于控件初始位置 ...

  2. AnyDesk远程连接及异常处理

    远程协助工具,用得最普遍的非QQ莫属,毕竟用户量在这里摆着的.不过,用户体验效果还不太理想,你懂得.接下来分享两个工具,一个是TeamViewer,另一个是AnyDesk.你更倾向于哪一款呢? 一.T ...

  3. Spring boot admin 节点状态一直为DOWN的排查

    项目中需要监控各个微服务节点的健康状态,找到了spring boot admin这个全家桶监控工具,它其实是Vue.js美化过的Spring Boot Actuator,官方的解释是: codecen ...

  4. Django REST framework基础:分页

    DRF分页组件 为什么要使用分页 我们数据表中可能会有成千上万条数据,当我们访问某张表的所有数据时,我们不太可能需要一次把所有的数据都展示出来,因为数据量很大,对服务端的内存压力比较大还有就是网络传输 ...

  5. 【Teradata】变更viewpoint web登录地址

    1.使用root用户登录原viewpoint地址 ssh root@192.168.253.133 2.查看使用网卡(示例中为eth0) route Kernel IP routing table D ...

  6. Windows将自己的代码发布到Github上

    1.在GitHub上创建一个repository 2.在自己的电脑上选择工作的文件夹使用Git Bash clone刚刚创建的repository 3.此时本地git应该已经连接了GitHub,如果没 ...

  7. C++笔记--std::相关

    std::packaged_task https://www.cnblogs.com/haippy/p/3279565.html https://en.cppreference.com/w/cpp/t ...

  8. 点击button自动刷新页面的奇葩错误

    以前在写练习的时候遇到过这样一个问题,自己在html中写了一个button <button>test1</button> 在没有给其附上onclick事件时是点击是不会有任何反 ...

  9. 自学提高:JVM点滴

    写在前面 这年头就是得不断地学习. 学什么东西就看需要了. 不学习很难进步. 同时别人也会超过你. 东西都是网上有的.图片也好,文字也好.基本都可以在网上找到. JAVA运行原理 JVM包括字节码解释 ...

  10. OI用语一览表

    术语 含义 A/AC 通过 AAA树 Top-tree ABC AtCoder Beginner Contest AFO 退役 AG 银牌 AGC AtCoder Grand Contest AK 通 ...