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、为什么服务器要有一个状态?
- 公司有100台服务器,在线只有90台,10台是关机状态
- 这10台因为没有开机,你采也采不到,所以离线的不在工作状态,不应该把它拿走
- 所以我给它要设置一个状态
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'])
作者:罗阿红
出处:http://www.cnblogs.com/luoahong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

浙公网安备 33010602011771号