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'])

  

 

posted @ 2018-07-29 12:41  活的潇洒80  阅读(273)  评论(0编辑  收藏  举报