#获取此区间段内平均值(例如:所有主机区间范围内平均值)
备注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)
django orm annotate(avg)
于 2023-03-17 14:27:18 首次发布