django orm annotate(avg)

该代码段用于获取指定时间区间内多个主机的CPU、内存和磁盘平均使用情况。首先,它计算所有主机的平均值,然后分别获取每个主机的平均资源使用情况。如果找不到某个主机的数据,则记录为None。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#获取此区间段内平均值(例如:所有主机区间范围内平均值)
备注uuid为列表
uuid = [instances_id['instance_id'] for instances_id in list(saf_obj.instances.values('instance_id'))]
vm = VmInspection.objects.filter(instance_id__in=uuid, monitor_date__gte=start_datetime,
                                 monitor_date__lte=end_datetime).aggregate(cpu=Avg("cpu_avg_day"),
                                                                           mem=Avg("mem_avg_day"),
                                                                           disk=Avg("disk_avg_day"))
dic["cpu_avg"] = round(vm.get("cpu"), 2)
dic["mem_avg"] = round(vm.get("mem"), 2)
dic["disk_avg"] = round(vm.get("disk"), 2)


#获取此区间每一个单独主机的平均值(例如:主机A区间范围内平均值)
display_name = [display_name['display_name'] for display_name in
                list(saf_obj.instances.values('display_name'))]
for display_name in display_name:
    vminspection_data = list(
        VmInspection.objects.filter(display_name=display_name, monitor_date__gte=start_datetime,
                                    monitor_date__lte=end_datetime).values(
'display_name').annotate(Avg("cpu_avg_day"), Avg("mem_avg_day"), Avg("disk_avg_day")))
    if vminspection_data:
        for vminspection_data in vminspection_data:
                vminspection_data['cpu_avg'] = round(vminspection_data.pop('cpu_avg_day__avg'), 2)
                vminspection_data['mem_avg'] = round(vminspection_data.pop('mem_avg_day__avg'), 2)
                vminspection_data['disk_avg'] = round(vminspection_data.pop('disk_avg_day__avg'), 2)
                vminspection_list.append(vminspection_data)
    else:
        vminspection_data = {'display_name': display_name, 'cpu_avg': None,
                             'mem_avg': None, 'disk_avg': None}
        vminspection_list.append(vminspection_data)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值