Explorar el Código

加入专门的Host事件上报处理器

James Iter hace 9 años
padre
commit
02f80ecb09
Se han modificado 9 ficheros con 80 adiciones y 45 borrados
  1. 1 0
      config.json
  2. 2 2
      main.py
  3. 10 3
      models/__init__.py
  4. 57 0
      models/event_processor.py
  5. 2 2
      models/guest.py
  6. 0 34
      models/log.py
  7. 7 2
      models/status.py
  8. 1 1
      tests/test_guest.py
  9. 0 1
      views/log.py

+ 1 - 0
config.json

@@ -29,6 +29,7 @@
   "PERMANENT_SESSION_LIFETIME": 604800,
   "vm_create_queue": "Q:VMCreate",
   "host_event_report_queue": "Q:HostEvent",
+  "instruction_channel": "C:Instruction",
   "ip_available_set": "S:IP:Available",
   "ip_used_set": "S:IP:Used",
   "vnc_port_available_set": "S:VNCPort:Available",

+ 2 - 2
main.py

@@ -10,10 +10,10 @@ import signal
 import time
 
 from models import Utils
+from models.event_processor import EventProcessor
 from models.initialize import app, logger
 import route_table
 from models import Database as db
-from models import Log
 from views.os_init import blueprint as os_init_blueprint
 from views.os_init import blueprints as os_init_blueprints
 from views.os_init_write import blueprint as os_init_write_blueprint
@@ -57,7 +57,7 @@ if __name__ == '__main__':
         signal.signal(signal.SIGTERM, Utils.signal_handle)
         signal.signal(signal.SIGINT, Utils.signal_handle)
 
-        thread.start_new_thread(Log.launch, ())
+        thread.start_new_thread(EventProcessor.launch, ())
         Utils.thread_counter += 1
 
         app.run(host=app.config['jimv_listen'], port=app.config['jimv_port'], use_reloader=False, threaded=True)

+ 10 - 3
models/__init__.py

@@ -48,13 +48,19 @@ from os_template import (
 )
 
 from status import (
-    GuestStatus
+    EmitKind,
+    GuestEvent,
+    LogLevel
 )
 
 from log import (
     Log
 )
 
+from event_processor import (
+    EventProcessor
+)
+
 
 __author__ = 'James Iter'
 __date__ = '2017/3/21'
@@ -63,7 +69,8 @@ __copyright__ = '(c) 2017 by James Iter.'
 
 
 __all__ = [
-    'Rules', 'Utils', 'Init', 'Database', 'FilterFieldType', 'Filter', 'GuestStatus', 'ORM', 'Config',
-    'Guest', 'GuestDisk', 'OSInit', 'OSInitWrite', 'OSTemplate', 'GuestXML', 'Log'
+    'Rules', 'Utils', 'Init', 'Database', 'FilterFieldType', 'Filter', 'EmitKind', 'GuestEvent', 'LogLevel', 'ORM',
+    'Config', 'Guest', 'GuestDisk', 'OSInit', 'OSInitWrite', 'OSTemplate', 'GuestXML', 'Log', 'EventProcessor'
 ]
 
+

+ 57 - 0
models/event_processor.py

@@ -0,0 +1,57 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+
+import json
+import time
+
+from models import Database as db
+from models import Log
+from models import Utils
+from models import EmitKind
+from models.initialize import app, logger
+
+
+__author__ = 'James Iter'
+__date__ = '2017/4/15'
+__contact__ = 'james.iter.cn@gmail.com'
+__copyright__ = '(c) 2017 by James Iter.'
+
+
+class EventProcessor(object):
+    message = None
+    log = Log()
+
+    @classmethod
+    def log_processor(cls):
+        cls.log.set(type=cls.message['type'], timestamp=cls.message['timestamp'], host=cls.message['host'],
+                    message=cls.message['message'])
+
+        cls.log.create()
+
+    @classmethod
+    def launch(cls):
+        while True:
+            if Utils.exit_flag:
+                Utils.thread_counter -= 1
+                print 'Thread EventProcessor say bye-bye'
+                return
+
+            try:
+                host_log = db.r.lpop(app.config['host_event_report_queue'])
+
+                if host_log is None:
+                    time.sleep(1)
+                    continue
+
+                cls.message = json.loads(host_log)
+
+                if cls.message['kind'] == EmitKind.log.value:
+                    cls.log_processor()
+
+                if cls.message['kind'] == EmitKind.event.value:
+                    pass
+
+            except Exception as e:
+                logger.error(e.message)
+

+ 2 - 2
models/guest.py

@@ -6,7 +6,7 @@ import jimit as ji
 
 from filter import FilterFieldType
 from orm import ORM
-from status import GuestStatus
+from status import GuestEvent
 
 
 __author__ = 'James Iter'
@@ -29,7 +29,7 @@ class Guest(ORM):
         self.remark = ''
         self.os_template_id = None
         self.create_time = ji.Common.tus()
-        self.status = GuestStatus.shutdown.value
+        self.status = GuestEvent.shutdown.value
         self.cpu = None
         self.memory = None
         self.ip = None

+ 0 - 34
models/log.py

@@ -2,15 +2,8 @@
 # -*- coding: utf-8 -*-
 
 
-import json
-import jimit as ji
-import time
-
-from models import Database as db
 from models import FilterFieldType
 from models import ORM
-from models import Utils
-from models.initialize import app, logger
 
 
 __author__ = 'James Iter'
@@ -54,30 +47,3 @@ class Log(ORM):
     def get_allow_content_search_keywords():
         return ['host']
 
-    @classmethod
-    def launch(cls):
-
-        log = Log()
-
-        while True:
-            if Utils.exit_flag:
-                Utils.thread_counter -= 1
-                print 'Thread say bye-bye'
-                return
-
-            try:
-                host_log = db.r.lpop(app.config['host_event_report_queue'])
-
-                if host_log is None:
-                    time.sleep(1)
-                    continue
-
-                host_log = json.loads(host_log)
-                log.set(type=host_log['type'], timestamp=host_log['timestamp'], host=host_log['host'],
-                        message=host_log['message'])
-
-                log.create()
-
-            except Exception as e:
-                logger.error(e.message)
-

+ 7 - 2
models/status.py

@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 
 
-from enum import Enum, IntEnum
+from enum import IntEnum
 
 
 __author__ = 'James Iter'
@@ -11,7 +11,12 @@ __contact__ = 'james.iter.cn@gmail.com'
 __copyright__ = '(c) 2017 by James Iter.'
 
 
-class GuestStatus(IntEnum):
+class EmitKind(IntEnum):
+    log = 0
+    event = 1
+
+
+class GuestEvent(IntEnum):
     shutdown = 0
     booting = 1
     running = 2

+ 1 - 1
tests/test_guest.py

@@ -30,7 +30,7 @@ class TestGuest(unittest.TestCase):
             "cpu": 4,
             "memory": 4,
             "os_template_id": 5,
-            "disks": [{"size": 200}],
+            "disks": [],
             "quantity": 2,
             "name": "",
             "password": "pswd.com",

+ 0 - 1
views/log.py

@@ -109,7 +109,6 @@ def r_get_by_filter():
 
 
 @Utils.dumps2response
-@Utils.superuser
 def r_content_search():
     page = str(request.args.get('page', 1))
     page_size = str(request.args.get('page_size', 50))