IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jun 19, 2012, 5:24:19 PM (14 years ago)
Author:
mhuber
Message:

merging latest r34040 trunk changes to branch

Location:
branches/meh_branches/ppstack_test
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/meh_branches/ppstack_test

  • branches/meh_branches/ppstack_test/ippToPsps/jython/ipptopsps.py

    r33415 r34041  
    1111from pslogger import PSLogger
    1212from ipptopspsdb import IppToPspsDb
    13 from dxlayer import DXLayer
    14 from datastore import Datastore
    15 from dvo import Dvo
    16 from odm import Odm
    17 
    1813
    1914'''
    2015Abstract base class for all ippToPsps programs
    21 handle command-line args, setting up of Config and logger objects, clean exiting etc
     16Handles command-line args, setting up of Config and logger objects, clean exiting etc
    2217'''
    2318class IppToPsps(object):
     
    2621    Constructor
    2722    '''
    28     def __init__(self, argv):
     23    def __init__(self, argv, logToStdout=1, logToFile=0):
    2924
    3025        # are the arsg ok? all programs require a config name
     
    3530        # some class constants
    3631        self.PROGNAME = sys.argv[0]
    37         self.CONFIGNAME = sys.argv[1]
     32        CONFIGNAME = sys.argv[1]
    3833        self.HOST = socket.gethostname()
    3934        self.PID = os.getpid()
     
    4338        self.SECONDS = None
    4439
     40        self.createNewConfig = False
     41        self.rotateConfigs = False
     42        # a new config?
     43        if CONFIGNAME == "edit": self.createNewConfig = True
     44        # should we rotate configs for this program?
     45        elif CONFIGNAME == "all": self.rotateConfigs = True
     46
    4547        # set up config object
    46         self.config = Config(self.PROGNAME, self.CONFIGNAME)
    47         self.logger = self.config.getLogger(self.HOST, self.PID, 1, 1)
     48        self.config = Config(self.PROGNAME, CONFIGNAME)
     49        self.logger = self.config.getLogger(self.HOST, self.PID, logToStdout, logToFile)
    4850
    4951        # create connection to databases database
    50         self.ippToPspsDb = IppToPspsDb(self.logger, self.config)
     52        try:
     53            self.ippToPspsDb = IppToPspsDb(self.logger, self.config)
     54        except:
     55            self.exitProgram("Could not connect to ipptopsps Db")
     56            raise
    5157
    5258        self.checkClientStatus()
     
    5864        self.logger.infoSeparator()
    5965        self.logger.infoTitle("ippToPsps '" + self.PROGNAME + "' started")
     66        self.logger.infoPair("Host", self.HOST)
     67        self.logger.infoPair("PID", "%d" % self.PID)
     68        self.logger.infoPair("Config", self.config.name)
    6069
    6170    '''
     
    7079        except:
    7180            pass
    72 
    7381
    7482    '''
     
    93101    Prints usage to stdout
    94102    '''
    95     def printUsage(self):
    96         # using sys.stdout to avoid newline in case sub-classes need to add further args
    97         sys.stdout.write("** Usage: " + sys.argv[0] + " <configPath>")
     103    def printUsage(self, extra=""):
    98104
     105        # write message to log or stdout if no logger set up
     106        msg = sys.argv[0] + " <configName|all|edit> " + extra
     107        try:
     108            self.logger.errorPair("Usage:", msg)
     109        except:
     110            print "*** Usage: " + msg
    99111
    100112    '''
     
    102114    '''
    103115    def refreshConfig(self):
     116
     117        # new config?
     118        if self.createNewConfig:
     119            self.ippToPspsDb.editConfig()
     120            self.ippToPspsDb.setConfigForThisClient(self.config.name, self.HOST, self.PID)
     121            self.createNewConfig = False
     122
     123        # if we are rotating configs, then look for next active one in list
     124        if self.rotateConfigs:
     125            self.ippToPspsDb.getConfigForThisClient(self.HOST, self.PID)
     126            configs = self.ippToPspsDb.getActiveConfigList()
     127             
     128            i = 1
     129            for config in configs:
     130               if config == self.config.name: break
     131               i += 1
     132
     133            if i >= len(configs): newConfig = configs[0]
     134            else: newConfig = configs[i]
     135
     136            self.ippToPspsDb.setConfigForThisClient(newConfig, self.HOST, self.PID)
     137
    104138        return self.ippToPspsDb.readConfig(self.HOST, self.PID)
    105139
     
    109143    def checkClientStatus(self):
    110144
    111         self.ippToPspsDb.updateClient(self.PROGNAME, self.HOST, self.PID, self.config.name)
     145        self.ippToPspsDb.updateClient(self.PROGNAME, self.HOST, self.PID)
    112146
    113147        if self.ippToPspsDb.isKilled(self.HOST, self.PID):
     
    115149       
    116150        # this loop pauses the process if we have no config or we have set it to pause
     151        firstTimeIn = True
    117152        while not self.refreshConfig() or self.ippToPspsDb.isPaused(self.HOST, self.PID):
    118153
    119             self.ippToPspsDb.updateClient(self.PROGNAME, self.HOST, self.PID,  self.config.name)
    120             if self.ippToPspsDb.isKilled(self.HOST, self.PID): self.exitProgram("killed while paused")
    121             self.logger.infoPair("Paused. Will check again in", "%d secs" % self.PAUSEPERIOD)
     154            self.ippToPspsDb.updateClient(self.PROGNAME, self.HOST, self.PID)
     155            if self.ippToPspsDb.isKilled(self.HOST, self.PID):
     156                self.exitProgram("killed while paused")
     157            if firstTimeIn: self.logger.infoPair("Paused. Will check again every", "%d secs" % self.PAUSEPERIOD)
     158            firstTimeIn = False
    122159            time.sleep(self.PAUSEPERIOD)
    123160
     
    134171    Exits the program cleanly, removes info from ipptopsps database
    135172    '''
    136     def exitProgram(self, exitReason):
     173    def exitProgram(self, exitReason="quit"):
    137174
    138175        # write message to log or stdout if no logger set up
    139176        try:
    140             self.logger.infoPair("Program exited", exitReason)
     177            self.logger.infoPair(self.PROGNAME + " exited", exitReason)
    141178        except:
    142             print "** program exited: " + exitReason
     179            print "*** Program exited: " + exitReason
    143180
    144181        # remove from database if possible
Note: See TracChangeset for help on using the changeset viewer.