CMDB服務器管理系統【s5day90】:獲取今日未採集主機列表

一、目錄結構

一、服務器端python

二、客戶端數據庫

二、具體代碼以下

一、數據庫增長兩個字段

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)  

一、爲何服務器要有一個狀態?json

  1. 公司有100臺服務器,在線只有90臺,10臺是關機狀態
  2. 這10臺由於沒有開機,你採也採不到,因此離線的不在工做狀態,不該該把它拿走
  3. 因此我給它要設置一個狀態

二、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))

一、如何獲取今天的日期?api

 

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

二、我查找什麼?服務器

latest_date、latest_date__date__lt、server_status_id
三、若是時間等於null要不要取?post

獲取ui

四、今天凌晨一點採集一次8點要不要採集?
latest_date__date只取年月日(數據庫裏去的是年月日時分秒)spa

五、一次只採集200個如何處理server

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

三、記得更新時間

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

一、等於空的時候要不要採集?blog

要採集,更新服務器信息的時候,處理完了把時間改一下

四、客戶端

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'])
相關文章
相關標籤/搜索