Przeglądaj źródła

实现Guest性能数据接收、写入功能

James Iter 9 lat temu
rodzic
commit
3027eb9ea1
3 zmienionych plików z 45 dodań i 13 usunięć
  1. 4 4
      models/__init__.py
  2. 41 8
      models/event_processor.py
  3. 0 1
      models/performance.py

+ 4 - 4
models/__init__.py

@@ -59,16 +59,16 @@ from log import (
     Log
     Log
 )
 )
 
 
-from event_processor import (
-    EventProcessor
-)
-
 from performance import (
 from performance import (
     CPUMemory,
     CPUMemory,
     Traffic,
     Traffic,
     DiskIO
     DiskIO
 )
 )
 
 
+from event_processor import (
+    EventProcessor
+)
+
 
 
 __author__ = 'James Iter'
 __author__ = 'James Iter'
 __date__ = '2017/3/21'
 __date__ = '2017/3/21'

+ 41 - 8
models/event_processor.py

@@ -7,7 +7,7 @@ import time
 from IPy import IP
 from IPy import IP
 import jimit as ji
 import jimit as ji
 
 
-from models import Database as db, Config
+from models import Database as db, Config, CPUMemory, Traffic, DiskIO
 from models import Guest
 from models import Guest
 from models import Disk
 from models import Disk
 from models import Log
 from models import Log
@@ -16,6 +16,7 @@ from models import EmitKind
 from models import ResponseState, GuestState, DiskState
 from models import ResponseState, GuestState, DiskState
 from models.guest import GuestMigrateInfo
 from models.guest import GuestMigrateInfo
 from models.initialize import app, logger
 from models.initialize import app, logger
+from models.status import CollectionPerformanceDataKind
 
 
 
 
 __author__ = 'James Iter'
 __author__ = 'James Iter'
@@ -31,6 +32,9 @@ class EventProcessor(object):
     guest_migrate_info = GuestMigrateInfo()
     guest_migrate_info = GuestMigrateInfo()
     disk = Disk()
     disk = Disk()
     config = Config()
     config = Config()
+    cpu_memory = CPUMemory()
+    traffic = Traffic()
+    disk_io = DiskIO()
 
 
     @classmethod
     @classmethod
     def log_processor(cls):
     def log_processor(cls):
@@ -205,15 +209,44 @@ class EventProcessor(object):
 
 
     @classmethod
     @classmethod
     def collection_performance_processor(cls):
     def collection_performance_processor(cls):
-        action = cls.message['message']['action']
-        uuid = cls.message['message']['uuid']
-        state = cls.message['type']
+        data_kind = cls.message['type']
+        timestamp = cls.message['timestamp']
         data = cls.message['message']['data']
         data = cls.message['message']['data']
 
 
-        if action == 'create_guest':
-            if state == ResponseState.success.value:
-                # 系统盘的 UUID 与其 Guest 的 UUID 相同
-                cls.disk.uuid = uuid
+        if data_kind == CollectionPerformanceDataKind.cpu_memory.value:
+            for item in data:
+                cls.cpu_memory.guest_uuid = item['guest_uuid']
+                cls.cpu_memory.cpu_load = item['cpu_load']
+                cls.cpu_memory.memory_available = item['memory_available']
+                cls.cpu_memory.memory_unused = item['memory_unused']
+                cls.cpu_memory.timestamp = timestamp
+                cls.cpu_memory.create()
+
+        if data_kind == CollectionPerformanceDataKind.traffic.value:
+            for item in data:
+                cls.traffic.guest_uuid = item['guest_uuid']
+                cls.traffic.name = item['name']
+                cls.traffic.rx_bytes = item['rx_bytes']
+                cls.traffic.rx_packets = item['rx_packets']
+                cls.traffic.rx_errs = item['rx_errs']
+                cls.traffic.rx_drop = item['rx_drop']
+                cls.traffic.tx_bytes = item['tx_bytes']
+                cls.traffic.tx_packets = item['tx_packets']
+                cls.traffic.tx_errs = item['tx_errs']
+                cls.traffic.tx_drop = item['tx_drop']
+                cls.traffic.timestamp = timestamp
+                cls.traffic.create()
+
+        if data_kind == CollectionPerformanceDataKind.disk_io.value:
+            for item in data:
+                cls.disk_io.disk_uuid = item['disk_uuid']
+                cls.disk_io.rd_req = item['rd_req']
+                cls.disk_io.rd_bytes = item['rd_bytes']
+                cls.disk_io.wr_req = item['wr_req']
+                cls.disk_io.wr_bytes = item['wr_bytes']
+                cls.disk_io.timestamp = timestamp
+                cls.disk_io.create()
+
         else:
         else:
             pass
             pass
 
 

+ 0 - 1
models/performance.py

@@ -96,7 +96,6 @@ class DiskIO(ORM):
         super(DiskIO, self).__init__()
         super(DiskIO, self).__init__()
         self.id = 0
         self.id = 0
         self.disk_uuid = None
         self.disk_uuid = None
-        self.dev = None
         self.rd_req = None
         self.rd_req = None
         self.rd_bytes = None
         self.rd_bytes = None
         self.wr_req = None
         self.wr_req = None