Jelajahi Sumber

优化获取Guest top 10 性能数据接口

James Iter 9 tahun lalu
induk
melakukan
3487f36572
1 mengubah file dengan 59 tambahan dan 8 penghapusan
  1. 59 8
      api/performance.py

+ 59 - 8
api/performance.py

@@ -231,7 +231,11 @@ def r_current_top_10():
     rows, _ = CPUMemory.get_by_filter(limit=limit, filter_str=filter_str)
     rows, _ = CPUMemory.get_by_filter(limit=limit, filter_str=filter_str)
     rows.sort(key=lambda k: k['cpu_load'], reverse=True)
     rows.sort(key=lambda k: k['cpu_load'], reverse=True)
 
 
-    ret['data']['cpu_load'] = rows[0:10]
+    for i in range(10):
+        if rows[i]['cpu_load'] == 0:
+            break
+
+        ret['data']['cpu_load'].append(rows[i])
 
 
     rows, _ = DiskIO.get_by_filter(limit=limit, filter_str=filter_str)
     rows, _ = DiskIO.get_by_filter(limit=limit, filter_str=filter_str)
     for i in range(rows.__len__()):
     for i in range(rows.__len__()):
@@ -239,10 +243,20 @@ def r_current_top_10():
         rows[i]['rw_req'] = rows[i]['rd_req'] + rows[i]['wr_req']
         rows[i]['rw_req'] = rows[i]['rd_req'] + rows[i]['wr_req']
 
 
     rows.sort(key=lambda k: k['rw_bytes'], reverse=True)
     rows.sort(key=lambda k: k['rw_bytes'], reverse=True)
-    ret['data']['rw_bytes'] = rows[0:10]
+
+    for i in range(10):
+        if rows[i]['rw_req'] == 0:
+            break
+
+        ret['data']['rw_bytes'].append(rows[i])
 
 
     rows.sort(key=lambda k: k['rw_req'], reverse=True)
     rows.sort(key=lambda k: k['rw_req'], reverse=True)
-    ret['data']['rw_req'] = rows[0:10]
+
+    for i in range(10):
+        if rows[i]['rw_req'] == 0:
+            break
+
+        ret['data']['rw_req'].append(rows[i])
 
 
     rows, _ = Traffic.get_by_filter(limit=limit, filter_str=filter_str)
     rows, _ = Traffic.get_by_filter(limit=limit, filter_str=filter_str)
     for i in range(rows.__len__()):
     for i in range(rows.__len__()):
@@ -250,18 +264,27 @@ def r_current_top_10():
         rows[i]['rt_packets'] = rows[i]['rx_packets'] + rows[i]['tx_packets']
         rows[i]['rt_packets'] = rows[i]['rx_packets'] + rows[i]['tx_packets']
 
 
     rows.sort(key=lambda k: k['rt_bytes'], reverse=True)
     rows.sort(key=lambda k: k['rt_bytes'], reverse=True)
-    ret['data']['rt_bytes'] = rows[0:10]
+
+    for i in range(10):
+        if rows[i]['rt_packets'] == 0:
+            break
+
+        ret['data']['rt_bytes'].append(rows[i])
 
 
     rows.sort(key=lambda k: k['rt_packets'], reverse=True)
     rows.sort(key=lambda k: k['rt_packets'], reverse=True)
-    ret['data']['rt_packets'] = rows[0:10]
+
+    for i in range(10):
+        if rows[i]['rt_packets'] == 0:
+            break
+
+        ret['data']['rt_packets'].append(rows[i])
 
 
     return ret
     return ret
 
 
 
 
 @Utils.dumps2response
 @Utils.dumps2response
-def r_last_10_minutes_top_10():
+def r_last_the_range_minutes_top_10(_range):
 
 
-    _range = 10
     volume = 4000
     volume = 4000
     limit = volume * _range
     limit = volume * _range
     end_ts = ji.Common.ts() - 60
     end_ts = ji.Common.ts() - 60
@@ -292,7 +315,7 @@ def r_last_10_minutes_top_10():
             guests_uuid_mapping[row['guest_uuid']] = {'cpu_load': 0, 'count': 0}
             guests_uuid_mapping[row['guest_uuid']] = {'cpu_load': 0, 'count': 0}
 
 
         guests_uuid_mapping[row['guest_uuid']]['cpu_load'] += row['cpu_load']
         guests_uuid_mapping[row['guest_uuid']]['cpu_load'] += row['cpu_load']
-        guests_uuid_mapping[row['guest_uuid']]['count'] += 1
+        guests_uuid_mapping[row['guest_uuid']]['count'] += 1.0
 
 
     rows = list()
     rows = list()
     for k, v in guests_uuid_mapping.items():
     for k, v in guests_uuid_mapping.items():
@@ -319,6 +342,11 @@ def r_last_10_minutes_top_10():
 
 
     rows = list()
     rows = list()
     for k, v in guests_uuid_mapping.items():
     for k, v in guests_uuid_mapping.items():
+
+        # 过滤掉无操作的数据
+        if v['rw_req'] == 0:
+            continue
+
         rows.append({'disk_uuid': k, 'rw_bytes': v['rw_bytes'] * 60 * _range, 'rw_req': v['rw_req'] * 60 * _range})
         rows.append({'disk_uuid': k, 'rw_bytes': v['rw_bytes'] * 60 * _range, 'rw_req': v['rw_req'] * 60 * _range})
 
 
     rows.sort(key=lambda _k: _k['rw_bytes'], reverse=True)
     rows.sort(key=lambda _k: _k['rw_bytes'], reverse=True)
@@ -339,6 +367,11 @@ def r_last_10_minutes_top_10():
 
 
     rows = list()
     rows = list()
     for k, v in guests_uuid_mapping.items():
     for k, v in guests_uuid_mapping.items():
+
+        # 过滤掉无流量的数据
+        if v['rt_packets'] == 0:
+            continue
+
         rows.append({'guest_uuid': k, 'rt_bytes': v['rt_bytes'] * 60 * _range,
         rows.append({'guest_uuid': k, 'rt_bytes': v['rt_bytes'] * 60 * _range,
                      'rt_packets': v['rt_packets'] * 60 * _range})
                      'rt_packets': v['rt_packets'] * 60 * _range})
 
 
@@ -351,4 +384,22 @@ def r_last_10_minutes_top_10():
     return ret
     return ret
 
 
 
 
+@Utils.dumps2response
+def r_last_10_minutes_top_10():
+    return r_last_the_range_minutes_top_10(_range=10)
+
+
+@Utils.dumps2response
+def r_last_hour_top_10():
+    return r_last_the_range_minutes_top_10(_range=60)
+
+
+@Utils.dumps2response
+def r_last_six_hours_top_10():
+    return r_last_the_range_minutes_top_10(_range=60 * 6)
+
+
+@Utils.dumps2response
+def r_last_day_top_10():
+    return r_last_the_range_minutes_top_10(_range=60 * 24)