• CMDB服务器管理系统【s5day90】:获取今日未采集主机列表


    1、目录结构

    1、服务器端

    2、客户端

    2、具体代码如下

    1、数据库增加两个字段

    class Server(models.Model):
    """
    服务器信息
    """
    # asset = models.OneToOneField('Asset')
    
    server_status_choices = (
    	(1, '上架'),
    	(2, '在线'),
    	(3, '离线'),
    	(4, '下架'),
    )
    
    server_status_id = models.IntegerField(choices=server_sta
    ...
    
    latest_date = models.DateTimeField(null=True,blank=True)  

    1、为什么服务器要有一个状态?

    1. 公司有100台服务器,在线只有90台,10台是关机状态
    2. 这10台因为没有开机,你采也采不到,所以离线的不在工作状态,不应该把它拿走
    3. 所以我给它要设置一个状态

    2、GET请求获取未采集服务器列表

    def server(request):
    	if request.method == "GET":
    		current_date = date.today()
    		# 获取今日未采集的主机列表
    		host_list = models.Server.objects.filter(
    			Q(Q(latest_date=None)|Q(latest_date__date__lt=current_date)) & Q(server_status_id=2)
    		).values('hostname')
    		host_list = list(host_list)
    		return HttpResponse(json.dumps(host_list))
    

    1、如何获取今天的日期?

    >>> from datetime import date
    >>> date.today
    <built-in method today of type object at 0x00000000539FEA10>
    >>> date.today()
    datetime.date(2018, 7, 20)

    2、我查找什么?

    latest_date、latest_date__date__lt、server_status_id
    3、如果时间等于null要不要取?

    获取

    4、今天凌晨一点采集一次8点要不要采集?
    latest_date__date只取年月日(数据库里去的是年月日时分秒)

    5、一次只采集200个如何处理

    Q(Q(latest_date=None)|Q(latest_date__date__lt=current_date)) & Q(server_status_id=2)
            ).values('hostname')[0:200]

    3、记得更新时间

    class Server(object):
    
    	def __init__(self,server_obj,basic_dict,board_dict):
    		self.server_obj = server_obj
    		self.basic_dict = basic_dict
    		self.board_dict = board_dict
    
    	def process(self,):
    		# 更新server表
    		tmp = {}
    		tmp.update(self.basic_dict['data'])
    		tmp.update(self.board_dict['data'])
    		。。。
    
    		self.server_obj.latest_date = datetime.datetime.now()
               self.server_obj.save() if record_list: models.ServerRecord.objects.create(server_obj=self.server_obj, content=';'.join(record_list))

    1、等于空的时候要不要采集?

    要采集,更新服务器信息的时候,处理完了把时间改一下

    4、客户端

    class SaltSshClient(BaseClient):
    
    	def task(self,host):
    		obj = PluginManager(host)
    		server_dict = obj.exec_plugin()
    		self.post_server_info(server_dict)
    
    	def get_host_list(self):
    		response = requests.get(self.api)
    		# print(response.text) # [{"hostname": "c1.
    		return json.loads(response.text)
    
    	def exec(self):
    		pool = ThreadPoolExecutor(10)
    
    		host_list = self.get_host_list()
    		for host in host_list:
    			pool.submit(self.task,host['hostname'])
    

      

     

  • 相关阅读:
    C++ int与string的相互转换(含源码实现)
    二维数组名和二级指针
    一道算法题-从1到n整数中1出现的次数
    一道算法题-求三个矩形的交集矩形。
    位域
    计划
    Bigtable:一个分布式的结构化数据存储系统
    The Google File System 中文版
    HIVE和HBASE区别
    区分 hdfs hbase hive hbase适用场景
  • 原文地址:https://www.cnblogs.com/luoahong/p/9341236.html
Copyright © 2020-2023  润新知