From 2ab248827d8b95af00e1b882e5947591aa606830 Mon Sep 17 00:00:00 2001 From: erickson Date: Mon, 22 Feb 2010 03:10:26 +0000 Subject: [PATCH] Re-org the data handling. - 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 | 13 +++---------- constrictor/script.py | 6 ++---- constrictor/task.py | 11 +++++++++-- constrictor/utils.py | 12 +++++++----- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/constrictor.py b/constrictor.py index eaab16a61..1983bb226 100755 --- a/constrictor.py +++ b/constrictor.py @@ -16,11 +16,11 @@ 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() diff --git a/constrictor/script.py b/constrictor/script.py index 14eadaf10..0a23a94df 100644 --- a/constrictor/script.py +++ b/constrictor/script.py @@ -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) diff --git a/constrictor/task.py b/constrictor/task.py index 7c32818d1..712629904 100644 --- a/constrictor/task.py +++ b/constrictor/task.py @@ -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() + } diff --git a/constrictor/utils.py b/constrictor/utils.py index 557313846..07f860aa1 100755 --- a/constrictor/utils.py +++ b/constrictor/utils.py @@ -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(): -- 2.11.0