Index: trunk/ippToPsps/jython/pollOdm.py
===================================================================
--- trunk/ippToPsps/jython/pollOdm.py	(revision 33267)
+++ trunk/ippToPsps/jython/pollOdm.py	(revision 33351)
@@ -8,109 +8,131 @@
 import time
 
-import logging.config
-
+from ipptopsps import IppToPsps
 from config import Config
-from pslogger import PSLogger
-from ipptopspsdb import IppToPspsDb
 from odm import Odm
 from batch import Batch
 
+
 '''
-Method to actually poll ODM
+PollOdm class
 '''
-def poll(batchType, stage):
-  
-    if stage == "unloaded":
-        ids = ippToPspsDb.getUnloadedBatchIDs(config.epoch, config.dvoLabel, batchType)
-    elif stage == "unmergeworthy":
-        ids = ippToPspsDb.getUnmergeWorthyBatchIDs(config.epoch, config.dvoLabel, batchType)
-    elif stage == "unmerged":
-        ids = ippToPspsDb.getUnmergedBatchIDs(config.epoch, config.dvoLabel, batchType)
+class PollOdm(IppToPsps):
 
-    logger.infoTitle("Checking %d %s %s batches" % (len(ids), stage, batchType))
+    '''
+    Constructor
+    '''
+    def __init__(self, argv):
+        super(PollOdm, self).__init__(argv)
 
-    results = {}
-    newLoaded = 0
-    newMergeWorthy = 0
-    newMerged = 0
+        # get batch and stage args
+        if len(sys.argv) > 3: 
+            self.BATCHTYPE = sys.argv[2]
+            self.STAGE = sys.argv[3]
+        else:
+            self.printUsage()
+            self.exitProgram("incorrect args")
 
-    logger.info("+-----------+----------------+----------------+----------------+----------------+----------------+----------------+")
-    logger.info("|   Batch   | Loaded to ODM  |  Merge worthy  |     Merged     |   New loaded   |New merge worthy|   New merged   |")
-    logger.info("+-----------+----------------+----------------+----------------+----------------+----------------+----------------+")
-    for id in ids:
+        # get poll time arg
+        if len(sys.argv) > 4: self.parsePollTimeArg(sys.argv[4]) 
 
-        if odm.checkBatch(id, results):
-           ippToPspsDb.updateOdmStatus(id, results)
+        if self.STAGE == "all": self.stages = ['unloaded', 'unmergeworthy', 'unmerged']
+        else: self.stages = [self.STAGE]
 
-           if stage == "unloaded":
-               if results['LOADEDTOODM'] == 1: newLoaded = newLoaded + 1
-               if results['MERGEWORTHY'] == 1: newMergeWorthy = newMergeWorthy + 1
-               if results['MERGED'] == 1: newMerged = newMerged + 1
+        if self.BATCHTYPE == "all": self.batchTypes = ['P2', 'ST']
+        else: self.batchTypes = [self.BATCHTYPE]
 
-           elif stage == "unmergeworthy":
-               if results['MERGEWORTHY'] == 1: newMergeWorthy = newMergeWorthy + 1
-               if results['MERGED'] == 1: newMerged = newMerged + 1
+        for stage in self.stages: self.logger.infoPair("Checking stage", stage)
+        for batchType in self.batchTypes: self.logger.infoPair("Checking batch type", batchType)
 
-           elif stage == "unmerged":
-               if results['MERGED'] == 1: newMerged = newMerged + 1
+    '''
+    Overrides base-class version
+    '''
+    def refreshConfig(self):
+        ret = super(PollOdm, self).refreshConfig()
+        self.odm = Odm(self.logger, self.config)
+        return ret
 
-           logger.info("| %9s | %14d | %14d | %14d | %14d | %14d | %14d |" %
-                   (Batch.getNameFromID(id),
-                    results['LOADEDTOODM'],
+    '''
+    Run...
+    '''
+    def run(self):
+
+        while True:
+
+            for stage in self.stages: 
+                for batchType in self.batchTypes:
+                    self.poll(batchType, stage)
+
+            self.checkClientStatus()
+            if not self.waitForPollTime(): break
+
+    '''
+    Method to actually poll ODM
+    '''
+    def poll(self, batchType, stage):
+      
+        if stage == "unloaded":
+            ids = self.ippToPspsDb.getUnloadedBatchIDs(self.config.epoch, self.config.dvoLabel, batchType)
+        elif stage == "unmergeworthy":
+            ids = self.ippToPspsDb.getUnmergeWorthyBatchIDs(self.config.epoch, self.config.dvoLabel, batchType)
+        elif stage == "unmerged":
+            ids = self.ippToPspsDb.getUnmergedBatchIDs(self.config.epoch, self.config.dvoLabel, batchType)
+    
+        self.logger.infoTitle("Checking %d %s %s batches" % (len(ids), stage, batchType))
+    
+        results = {}
+        newLoaded = 0
+        newMergeWorthy = 0
+        newMerged = 0
+    
+        self.logger.info("+-----------+----------------+----------------+----------------+----------------+----------------+----------------+")
+        self.logger.info("|   Batch   | Loaded to ODM  |  Merge worthy  |     Merged     |   New loaded   |New merge worthy|   New merged   |")
+        self.logger.info("+-----------+----------------+----------------+----------------+----------------+----------------+----------------+")
+        for id in ids:
+    
+            if self.odm.checkBatch(id, results):
+               self.ippToPspsDb.updateOdmStatus(id, results)
+    
+               if stage == "unloaded":
+                   if results['LOADEDTOODM'] == 1: newLoaded = newLoaded + 1
+                   if results['MERGEWORTHY'] == 1: newMergeWorthy = newMergeWorthy + 1
+                   if results['MERGED'] == 1: newMerged = newMerged + 1
+    
+               elif stage == "unmergeworthy":
+                   if results['MERGEWORTHY'] == 1: newMergeWorthy = newMergeWorthy + 1
+                   if results['MERGED'] == 1: newMerged = newMerged + 1
+
+               elif stage == "unmerged":
+                   if results['MERGED'] == 1: newMerged = newMerged + 1
+    
+               self.logger.info("| %9s | %14d | %14d | %14d | %14d | %14d | %14d |" %
+                       (Batch.getNameFromID(id),
+                            results['LOADEDTOODM'],
                     results['MERGEWORTHY'],
-                    results['MERGED'],
-                    newLoaded,
-                    newMergeWorthy,
-                    newMerged))
+                        results['MERGED'],
+                        newLoaded,
+                        newMergeWorthy,
+                        newMerged))
+    
+    
+            else:
+                    self.logger.info("| %9s | failed to poll ODM                                                                                                   |" % Batch.getNameFromID(id))
+    
+        self.logger.info("+-----------+----------------+----------------+----------------+----------------+----------------+----------------+")
+    
 
-
-        else:
-            logger.info("| %9s | failed to poll ODM                                                                                                   |" % Batch.getNameFromID(id))
-
-    logger.info("+-----------+----------------+----------------+----------------+----------------+----------------+----------------+")
-
-
+    '''
+    Overrides base-class version
+    '''
+    def printUsage(self):
+        super(PollOdm, self).printUsage()
+        print " <P2|ST|all> <unloaded|unmergeworthy|unmerged|all> [hours]"
+    
+    
+    
 '''
 Program starts here
 '''
-if len(sys.argv) > 3: 
-    CONFIGPATH  = sys.argv[1]
-    BATCHTYPE = sys.argv[2]
-    STAGE = sys.argv[3]
-else:
-    print "\n** Usage: " + sys.argv[0] + " <configPath> <P2|ST|all> <unloaded|unmergeworthy|unmerged|all> [hours]\n"
-    sys.exit(1)
-
-if len(sys.argv) > 4:  
-    HOURS = float(sys.argv[4]) 
-    SECONDS = HOURS * 60.0 * 60.0
-else: 
-    SECONDS = None
-
-# create objects
-config = Config(CONFIGPATH)
-logger = config.getLogger(sys.argv[0])
-ippToPspsDb = IppToPspsDb(logger, config)
-odm = Odm(logger, config)
-
-if STAGE == "all": stages = ['unloaded', 'unmergeworthy', 'unmerged']
-else: stages = [STAGE]
-
-if BATCHTYPE == "all": batchTypes = ['P2', 'ST']
-else: batchTypes = [BATCHTYPE]
-
-for stage in stages: logger.infoPair("Checking stage", stage)
-for batchType in batchTypes: logger.infoPair("Checking batch type", batchType)
-
-while True:
-
-    for stage in stages: 
-        for batchType in batchTypes:
-            poll(batchType, stage)
-
-    if SECONDS: 
-        logger.infoPair("Waiting for", "%f hours" % HOURS)
-        time.sleep(SECONDS)
-    else: break
-
-
+pollodm = PollOdm(sys.argv)
+pollodm.run()
+pollodm.exitProgram("finished")
