一、目录结构

二、引子与代码

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. centos下Django+uwsgi+nginx

    本篇章主要讲解uwsgi和nginx的作用,并利用两者对django项目进行部署 一.概述 在开发过程中,我们一般是在该项目的虚拟环境中启用django自带的web服务:python manage.p ...

  2. VS根据数据库生成实体类

    一.在类库项目上添加新项 二. 三.依次填入数据库连接 选择数据库 就可以生成数据库实体

  3. Jenkins系统监测(转)

    Jenkins系统监测   Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上.同时 Jenkins 能实施监控集成中存在 ...

  4. 【PAT】A1034Head of a Gang

    昨天准备学完图相关的知识,但是学起来挺懵的,理解起来不难,但自己一回想,又什么都想不起来. 翻来覆去看图的遍历,还是觉得有点没到位. 所以做题来检测一下,果然学和自己做是两码事. 先看的书,又看的柳婼 ...

  5. LeetCode算法题-Max Consecutive Ones(Java实现)

    这是悦乐书的第242次更新,第255篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第109题(顺位题号是485).给定二进制数组,找到此数组中连续1的最大数量.例如: 输 ...

  6. “软到不行”的WWDC2018

    转载请标明来源:https://www.cnblogs.com/zhanggui/p/9154542.html 简介 一年一度的WWDC于北京时间6月5号凌晨1点在加利福利亚州圣何塞的麦克恩利会议中心 ...

  7. 英语口语练习系列-C02-抱怨

    连接到英语口语系列总分类 连接到上一章棒棒的 竹石 郑燮 zhèng xiè 竹石 作者:郑燮 咬定青山不放松,立根原在破岩中. 千磨万击还坚劲,任尔东西南北风. Our team sucks. 我们 ...

  8. vue 对象提供的属性功能、通过axio请求数据(2)

    1 Vue对象提供的属性功能 1.1 过滤器 过滤器,就是vue允许开发者自定义的文本格式化函数,可以使用在两个地方:输出内容和操作数据中. 1.1.1 使用Vue.filter()进行全局定义(全局 ...

  9. LInkedHashMap实现最近被使用(LRU)缓存

    在最近的面试中,我曾被多次问到,怎么实现一个最近最少使用(LRU)的缓存.缓存可以通过哈希表来实现,然而为这个缓存增加大小限制会变成另一个有意思的问题.现在我们看一下怎么实现. 最近最少使用缓存的回收 ...

  10. matlab读取cvs文件的几种方法

    matlab读取CVS文件的几种方法: 1,实用csvread()函数   csvread()函数有三种使用方法: 1.M = csvread('filename')2.M = csvread('fi ...