zoukankan      html  css  js  c++  java
  • 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'])
    

      

     

  • 相关阅读:
    IE8下网页中的视频会遮挡住顶层DIV的解决办法
    Synchronized 偏向锁、轻量级锁、自旋锁、锁消除
    Lock的使用
    Synchronized与ReentrantLock区别总结(简单粗暴,一目了然)
    Java线程池 面试题(精简)
    Java 线程池的认识和使用
    bat等大公司常考java多线程面试题
    Java面试题必备知识之ThreadLocal
    阿里面试题
    Spring中Bean的生命周期
  • 原文地址:https://www.cnblogs.com/luoahong/p/9341236.html
Copyright © 2011-2022 走看看