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

1、目录结构

1、服务器端

2、客户端

2、具体代码如下

1、数据库增加两个字段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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请求获取未采集服务器列表

1
2
3
4
5
6
7
8
9
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、如何获取今天的日期?

 

1
2
3
4
5
>>> 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个如何处理

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

3、记得更新时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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()<br>          
        self.server_obj.save()
        if record_list:
            models.ServerRecord.objects.create(server_obj=self.server_obj, content=';'.join(record_list))

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

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

4、客户端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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 @   活的潇洒80  阅读(277)  评论(0编辑  收藏  举报
编辑推荐:
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
阅读排行:
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· DeepSeek+PageAssist实现本地大模型联网
· 手把手教你更优雅的享受 DeepSeek
· 腾讯元宝接入 DeepSeek R1 模型,支持深度思考 + 联网搜索,好用不卡机!
· 从 14 秒到 1 秒:MySQL DDL 性能优化实战
点击右上角即可分享
微信分享提示