Provide openflow information at network show
[osm/openvim.git] / osm_openvim / openflow_thread.py
index 2f39fab..e41fb6b 100644 (file)
@@ -93,21 +93,31 @@ class openflow_thread(threading.Thread):
     """
     This thread interacts with a openflow controller to create dataplane connections
     """
-    def __init__(self, of_uuid, of_connector, db, db_lock, of_test, pmp_with_same_vlan=False, debug='ERROR'):
+    def __init__(self, of_uuid, of_connector, db, db_lock, of_test, pmp_with_same_vlan=False, logger_name=None,
+                 debug=None):
         threading.Thread.__init__(self)
         self.of_uuid = of_uuid
         self.db = db
         self.pmp_with_same_vlan = pmp_with_same_vlan
-        self.name = "openflow"
         self.test = of_test
         self.db_lock = db_lock
         self.OF_connector = of_connector
-        self.logger = logging.getLogger('vim.OF-' + of_uuid)
-        self.logger.setLevel(getattr(logging, debug))
-        self.logger.name = of_connector.name + " " + self.OF_connector.dpid
+        if logger_name:
+            self.logger_name = logger_name
+        else:
+            self.logger_name = "openvim.ofc." + of_uuid
+        self.logger = logging.getLogger(self.logger_name)
+        if debug:
+            self.logger.setLevel(getattr(logging, debug))
         self.queueLock = threading.Lock()
         self.taskQueue = Queue.Queue(2000)
-        
+
+    @staticmethod
+    def _format_error_msg(error_text, max_length=1024):
+        if error_text and len(error_text) >= max_length:
+            return error_text[:max_length//2-3] + " ... " + error_text[-max_length//2+3:]
+        return error_text
+
     def insert_task(self, task, *aditional):
         try:
             self.queueLock.acquire()
@@ -115,7 +125,7 @@ class openflow_thread(threading.Thread):
             self.queueLock.release()
             return 1, None
         except Queue.Full:
-            return -1, "timeout inserting a task over openflow thread " + self.name
+            return -1, "timeout inserting a task over openflow thread " + self.of_uuid
 
     def run(self):
         self.logger.debug("Start openflow thread")
@@ -135,10 +145,10 @@ class openflow_thread(threading.Thread):
                     continue
 
                 if task[0] == 'update-net':
-                    r,c = self.update_of_flows(task[1])
+                    r, c = self.update_of_flows(task[1])
                     # update database status
                     if r<0:
-                        UPDATE={'status':'ERROR', 'last_error': str(c)}
+                        UPDATE={'status':'ERROR', 'last_error': self._format_error_msg(str(c), 255)}
                         self.logger.error("processing task 'update-net' %s: %s", str(task[1]), c)
                         self.set_openflow_controller_status(OFC_STATUS_ERROR, "Error updating net {}".format(task[1]))
                     else:
@@ -584,7 +594,7 @@ class openflow_thread(threading.Thread):
 
         ofc = {}
         ofc['status'] = status
-        ofc['last_error'] = error_text
+        ofc['last_error'] = self._format_error_msg(error_text, 255)
         self.db_lock.acquire()
         result, content = self.db.update_rows('ofcs', ofc, WHERE={'uuid': self.of_uuid}, log=False)
         self.db_lock.release()