|
- import json
- from operator import itemgetter
-
- import numpy as np
-
- NUM_OF_HOSTS = 12000
- NUM_OF_INSTANCES = 150000
-
-
- def cal_percentage(input_fil, output_fil):
- ## 初始化
- ins_cpu = list() # [[,,,],...,[,,,]]
- host_cpu = list() # [,...,]
- ins_memory = list()
- host_memory = list()
- ins_disk = list()
- host_disk = list()
- used_cpu_0 = list()
- used_cpu_1 = list()
- used_cpu_2 = list()
- used_cpu_3 = list()
- used_memory_0 = list()
- used_memory_1 = list()
- used_memory_2 = list()
- used_memory_3 = list()
- used_disk_0 = list()
- used_disk_1 = list()
- used_disk_2 = list()
- used_disk_3 = list()
- p_used = list() # 物理机使用情况百分比
-
- # 初始化每台物理机每时刻的CPU消耗
- for i in range(NUM_OF_HOSTS):
- used_cpu_0.append(0)
- used_cpu_1.append(0)
- used_cpu_2.append(0)
- used_cpu_3.append(0)
- used_memory_0.append(0)
- used_memory_1.append(0)
- used_memory_2.append(0)
- used_memory_3.append(0)
- used_disk_0.append(0)
- used_disk_1.append(0)
- used_disk_2.append(0)
- used_disk_3.append(0)
- host_cpu.append(0)
- host_memory.append(0)
- host_disk.append(0)
- p_used.append(0)
-
- # 初始化每个实例每时刻需要的CPU 和 每台物理机的CPU
- for i in range(NUM_OF_INSTANCES):
- ins_cpu.append([0,0,0,0])
- ins_memory.append([0, 0, 0, 0])
- ins_disk.append([0, 0, 0, 0])
- for line in open(input_fil, 'r', encoding='utf-8').readlines():
- dict = json.loads(line)
- if dict['type'] == 'host':
- host_cpu[dict['host_id']-1] = dict['host_cpu']
- host_memory[dict['host_id']-1] = dict['host_memory']
- host_disk[dict['host_id']-1] = dict['host_disk']
-
- elif dict['type'] == 'instance':
- ins_cpu[dict['instance_id']-1]=[dict['instance_cpu_0'],dict['instance_cpu_1'],dict['instance_cpu_2'],dict['instance_cpu_3']]
- ins_memory[dict['instance_id']-1]=[dict['instance_memory_0'],dict['instance_memory_1'],dict['instance_memory_2'],dict['instance_memory_3']]
- ins_disk[dict['instance_id']-1]=[dict['instance_disk_0'],dict['instance_disk_1'],dict['instance_disk_2'],dict['instance_disk_3']]
-
- ## 统计
-
- for line in open(output_fil, 'r', encoding='utf-8').readlines():
- dict = json.loads(line)
- hid = dict['host_id']
- iid = dict['instance_id']
- # 统计每台物理机每时刻的CPU消耗
- used_cpu_0[hid-1] = used_cpu_0[hid-1] + ins_cpu[iid-1][0]
- used_cpu_1[hid-1] = used_cpu_1[hid-1] + ins_cpu[iid-1][1]
- used_cpu_2[hid-1] = used_cpu_2[hid-1] + ins_cpu[iid-1][2]
- used_cpu_3[hid-1] = used_cpu_3[hid-1] + ins_cpu[iid-1][3]
- # 统计每台物理机每时刻的Memory消耗
- used_memory_0[hid-1] = used_memory_0[hid-1] + ins_memory[iid-1][0]
- used_memory_1[hid-1] = used_memory_1[hid-1] + ins_memory[iid-1][1]
- used_memory_2[hid-1] = used_memory_2[hid-1] + ins_memory[iid-1][2]
- used_memory_3[hid-1] = used_memory_3[hid-1] + ins_memory[iid-1][3]
- # 统计每台物理机每时刻的Disk消耗
- used_disk_0[hid - 1] = used_disk_0[hid - 1] + ins_disk[iid - 1][0]
- used_disk_1[hid - 1] = used_disk_1[hid - 1] + ins_disk[iid - 1][1]
- used_disk_2[hid - 1] = used_disk_2[hid - 1] + ins_disk[iid - 1][2]
- used_disk_3[hid - 1] = used_disk_3[hid - 1] + ins_disk[iid - 1][3]
- # 统计每台物理机使用情况百分比
- for i in range(NUM_OF_HOSTS):
- p_used[i] = {
- 'cpu0': used_cpu_0[i] / host_cpu[i] * 100, 'cpu1': used_cpu_1[i] / host_cpu[i] * 100,
- 'cpu2': used_cpu_2[i] / host_cpu[i] * 100, 'cpu3': used_cpu_3[i] / host_cpu[i] * 100,
- 'memory0': used_memory_0[i] / host_memory[i] * 100, 'memory1': used_memory_1[i] / host_memory[i] * 100,
- 'memory2': used_memory_2[i] / host_memory[i] * 100, 'memory3': used_memory_3[i] / host_memory[i] * 100,
- 'disk0': used_disk_0[i] / host_disk[i] * 100, 'disk1': used_disk_1[i] / host_disk[i] * 100,
- 'disk2': used_disk_2[i] / host_disk[i] * 100, 'disk3': used_disk_3[i] / host_disk[i] * 100,
- }
- data_sorted = sorted(p_used, key=itemgetter('cpu0'))
- return data_sorted
-
- def write_data2jsonl(data, file_path):
- with open(file_path, 'w') as outfile:
- for entry in data:
- json.dump(entry, outfile, ensure_ascii=False)
- outfile.write('\n')
-
-
- # data = cal_percentage('input.jsonl', 'demo_results.jsonl')
- # write_data2jsonl(data, 'o.jsonl')
|