Re-org the data handling.
authorerickson <erickson@6d9bc8c9-1ec2-4278-b937-99fde70a366f>
Mon, 22 Feb 2010 03:10:26 +0000 (03:10 +0000)
committererickson <erickson@6d9bc8c9-1ec2-4278-b937-99fde70a366f>
Mon, 22 Feb 2010 03:10:26 +0000 (03:10 +0000)
- data is only written to the DB after all scripts are done.  This speeds up the client overall inside the critial code path and removes the requirements for DB semaphores to protect against multi-threaded writes.
- Moved to sqlalchemy instead of the bare mysql layer
- TODO add UI-layer methods back in for generating task summaries, etc.

git-svn-id: svn://svn.open-ils.org/ILS-Contrib/constrictor/trunk@789 6d9bc8c9-1ec2-4278-b937-99fde70a366f

constrictor.py
constrictor/script.py
constrictor/task.py
constrictor/utils.py

index eaab16a..1983bb2 100755 (executable)
 
 import sys, getopt, os, errno
 from constrictor.properties import Properties
-from constrictor.db import DBConnection
 from constrictor.controller import DroneController
 from constrictor.script import ScriptThread, ScriptManager
 from constrictor.log import *
 from constrictor.utils import loadProps, saveProps, initDirs, initDB, openScript, PROPS_FILENAME
+import constrictor.data
 
 props = None
 props_filename = PROPS_FILENAME
@@ -46,13 +46,6 @@ python %s [options]
     sys.exit(0)
 
 
-
-def onThreadsComplete(scriptManager):
-    global droneController
-    summary = ScriptThread.currentScriptThread().dbConnection.createTaskSummary()
-    droneController.sendResult(type='task_summary', **summary)
-
-
 def read_args_and_props():
     global props
     global props_filename
@@ -86,8 +79,8 @@ def read_args_and_props():
 
 def onThreadsComplete(scriptManager):
     global droneController
-    summary = ScriptThread.currentScriptThread().dbConnection.createTaskSummary()
-    droneController.sendResult(type='task_summary', **summary)
+    #summary = ScriptThread.currentScriptThread().dbConnection.createTaskSummary()
+    #droneController.sendResult(type='task_summary', **summary)
 
 read_args_and_props()
 initDirs()
index 14eadaf..0a23a94 100644 (file)
@@ -17,7 +17,7 @@
 import time, sys, threading
 from threading import Thread, local
 from properties import Properties
-from db import DBConnection
+import constrictor.data
 import threading, traceback
 from log import *
 
@@ -47,7 +47,6 @@ class ScriptThread(Thread):
         self.script = script # our script object
         self.numItr = numItr # number of times to run our script
         self.setName(ScriptThread.threadSeed) # use the Thread name as our threadID
-        self.dbConnection = None # create this after the thread has launched
         self.onComplete = onComplete
         ScriptThread.threadSeed += 1
         self.userData = None
@@ -82,7 +81,6 @@ class ScriptThread(Thread):
         data.scriptThread = self
 
         props = Properties.getProperties()
-        self.dbConnection = DBConnection(props.getProperty('constrictor.dbFile'))
 
 
     def getThreadID():
@@ -142,7 +140,7 @@ class ScriptManager(object):
             self.numComplete += 1
             if self.numComplete == self.numThreads:
                 # all threads have completed
-                scriptThread.dbConnection.finishTaskSet()
+                constrictor.data.Data.get_instance().store_data()
                 logInfo('all threads done.. finishing task set')
                 if ScriptManager.onThreadsComplete:
                     ScriptManager.onThreadsComplete(ScriptManager)
index 7c32818..7126299 100644 (file)
@@ -20,6 +20,7 @@ from script import ScriptThread
 from threading import local
 import threading
 from log import *
+import constrictor.data
 
 
 class Task(object):
@@ -61,10 +62,16 @@ class Task(object):
             self.name, ScriptThread.getThreadID(), self.duration))
 
         sys.stdout.flush()
-        dbConn = ScriptThread.currentScriptThread().dbConnection
-        dbConn.insertTask(self)
+        constrictor.data.Data.get_instance().add_task(self)
         return ret
 
+    def to_dict(self):
+        return {
+            'name' : self.name,
+            'duration' : self.duration,
+            'success' : self.success,
+            'thread_id' : ScriptThread.getThreadID()
+        }
 
 
 
index 5573138..07f860a 100755 (executable)
@@ -16,8 +16,8 @@
 
 import sys, getopt, os, errno
 from constrictor.properties import Properties
-from constrictor.db import DBConnection
 from constrictor.log import *
+import constrictor.data
 
 DEFAULT_PORT = 21800
 CONFIG_FILENAME = 'config.xml'
@@ -50,10 +50,12 @@ def saveProps():
 
 def initDB():
     ''' connect to the db and make sure the tables exist '''
-    dbConnection = DBConnection(props.getProperty('constrictor.dbFile'))
-    dbConnection.createTables()
-    dbConnection.createTaskSet()
-    dbConnection.disconnect()
+    data = constrictor.data.Data(
+        os.path.join(os.getcwd(), props.getProperty('constrictor.dbFile'))
+    )
+    data.create_schema()
+    data.create_task_set()
+    data.disconnect()
 
 
 def initDirs():