码迷,mamicode.com
首页 > 数据库 > 详细

cmdb客户端代码完善2

时间:2019-10-06 13:24:25      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:admin   imp   验证   运维   加密   逻辑   服务   agent   div   

目录:

1.面试提问

2.完善采集端代码

3.唯一标识的问题

4.API的验证

 

 

 

 

1.面试会问到的问题:

#   1. 为啥要做CMDB?
# - 实现运维自动化, 而CMDB是实现运维自动化的基石
# - 之前公司统计资产的时候,使用Excel来统计, 为了年底资产审计方便,因此需要做CMDB
#
# 2. CMDB的架构以及你们公司采用的架构是啥?
# Agent
# ssh类
# saltstck
#
#
# 3. 你做这个项目的时候, 主要负责哪一块?
#
# - 数据的采集和发送
#
# a.数据的采集:
# - 高级的配置文件 (整合了自定制的配置文件和全局的配置文件)
# - 高内聚低耦合的思想, 实现了插件采集的可插拔式
#
# 参考了django的配置和django的中间件
#
# - 数据的二次清洗和加密
#
#
# - 数据的展示(图表部分)
#
# 4. 遇到了那些问题? 怎么解决的?
#
# - linux的命令不熟 -----> 找运维 或者 百度
# - 沟通问题, 和产品经理的沟通
# - 唯一标识的问题

 

2.完善采集端代码

已经完成了采集数据,现在是要发送数据,一开始想到的是在启动文件中直接写代码

from lib.config.config import settings
import json
import requests

from src.plugins import PluginsManger

if __name__ == __main__:
    if settings.MODE == agent:
        res = PluginsManger().execute()
        requests.post(http://127.0.0.1:8000, data=json.dumps(res))
    else:
        res = PluginsManger().execute()

而逻辑代码是不能写在启动文件中的,所以在src创一个文件client.py

from lib.config.config import settings
import json
import requests

from src.plugins import PluginsManger


 if settings.MODE == agent:
    res = PluginsManger().execute()
        requests.post(http://127.0.0.1:8000, data=json.dumps(res))
 else:
    res = PluginsManger().execute()

但是以上又是面向过程的思想,所以要面向对象的思想

 

服务端的IP地址写在custom_settings。py里

import os

BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))



MODE = agent


SSH_USERNAME = root

SSH_PASSWORD = 123

SHH_PORT = 22


### APIurl地址
API_URL = http://127.0.0.1:8000/getInfo/


DEBUG = True


PLUGINS_DICT = {
    basic:src.plugins.basic.Basic,
    board: src.plugins.board.Board,
    disk: src.plugins.disk.Disk,
    memory: src.plugins.memory.Memory,
    cpu:src.plugins.cpu.Cpu,
    nic:src.plugins.nic.Nic
}

client.py(先对agent采集模式进行测试)

from src.plugins import PluginsManger

import json

import requests

from lib.config.config import settings

class Agent(object):

    #收集数据并发送
    def collectAndPost(self):
        res = PluginsManger().execute()
        for k,v in res.items():
            print(k,v)
        requests.post(settings.API_URL, data=json.dumps(res))

start.py

from src.client import Agent

if __name__ == __main__:
    Agent().collectAndPost()

 

起一个django  (我的是2.0版本)  服务端,应用项目是api

from django.contrib import admin
from django.urls import path,re_path

from api import views

urlpatterns = [
    path(admin/, admin.site.urls),
    re_path(getInfo/, views.getInfo),
]

将settings中drf注掉

#      a.   request.body中永远都是有数据的
#
#
# 当 Content-Type: application/x-www-form-urlencoded, request.POST中才会有值
# 当 Content-Type‘:"application/json" 这是采集端发送数据的头形式

views.py

from django.shortcuts import render,HttpResponse

# Create your views here.


def getInfo(request):


    print(request.body)

    return  HttpResponse(ok)

 

cmdb客户端代码完善2

标签:admin   imp   验证   运维   加密   逻辑   服务   agent   div   

原文地址:https://www.cnblogs.com/huangxuanya/p/11626920.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!