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、为什么服务器要有一个状态?
- 公司有100台服务器,在线只有90台,10台是关机状态
- 这10台因为没有开机,你采也采不到,所以离线的不在工作状态,不应该把它拿走
- 所以我给它要设置一个状态
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' ]) |
作者:罗阿红
出处:http://www.cnblogs.com/luoahong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· DeepSeek+PageAssist实现本地大模型联网
· 手把手教你更优雅的享受 DeepSeek
· 腾讯元宝接入 DeepSeek R1 模型,支持深度思考 + 联网搜索,好用不卡机!
· 从 14 秒到 1 秒:MySQL DDL 性能优化实战