def initInThread(self): """ Default intialization of the harness including setting some diagnostic messages. This method is called when we call 'prepareToStart' """ try: self.messages = {} compName = self.config.Agent.componentName compSect = getattr(self.config, compName, None) if not hasattr(compSect, "logFile"): if not getattr(compSect, 'componentDir', None): errorMessage = "No componentDir for log entries found!\n" errorMessage += "Harness cannot run without componentDir.\n" logging.error(errorMessage) raise HarnessException(errorMessage) compSect.logFile = os.path.join(compSect.componentDir, "ComponentLog") print('Log file is: ' + compSect.logFile) logHandler = RotatingFileHandler(compSect.logFile, "a", 1000000000, 3) logMsgFormat = getattr( compSect, "logMsgFormat", "%(asctime)s:%(thread)d:%(levelname)s:%(module)s:%(message)s") logFormatter = \ logging.Formatter(logMsgFormat) logHandler.setFormatter(logFormatter) logLevelName = getattr(compSect, 'logLevel', 'INFO') logLevel = getattr(logging, logLevelName) logging.getLogger().addHandler(logHandler) logging.getLogger().setLevel(logLevel) self.logMsg = { 'DEBUG': logging.DEBUG, 'ERROR': logging.ERROR, 'NOTSET': logging.NOTSET, 'CRITICAL': logging.CRITICAL, 'WARNING': logging.WARNING, 'INFO': logging.INFO, 'SQLDEBUG': logging.SQLDEBUG } if hasattr(compSect, "logLevel") and compSect.logLevel in self.logMsg: logging.getLogger().setLevel(self.logMsg[compSect.logLevel]) WMLogging.sqldebug("wmcore level debug:") # If not previously set, force wmcore cache to current path if not os.environ.get('WMCORE_CACHE_DIR'): os.environ['WMCORE_CACHE_DIR'] = os.path.join( compSect.componentDir, '.wmcore_cache') logging.info(">>>Starting: " + compName + '<<<') # check which backend to use: MySQL, Oracle, etc... for core # services. # we recognize there can be more than one database. # be we offer a default database that is used for core services. logging.info(">>>Initializing default database") logging.info(">>>Check if connection is through socket") myThread = threading.currentThread() myThread.logger = logging.getLogger() logging.info(">>>Setting config for thread: ") myThread.config = self.config logging.info(">>>Building database connection string") # check if there is a premade string if not build it yourself. dbConfig = ConfigDBMap(self.config) dbStr = dbConfig.getDBUrl() options = dbConfig.getOption() # we only want one DBFactory per database so we will need to # to pass this on in case we are using threads. myThread.dbFactory = DBFactory(myThread.logger, dbStr, options) myThread.sql_transaction = True if myThread.dbFactory.engine: myThread.dbi = myThread.dbFactory.connect() myThread.transaction = Transaction(myThread.dbi) else: myThread.dbi = myThread.config.CoreDatabase.connectUrl myThread.sql_transaction = False # Attach a worker manager object to the main thread if not hasattr(myThread, 'workerThreadManager'): myThread.workerThreadManager = WorkerThreadManager(self) else: myThread.workerThreadManager.terminateSlaves.clear() myThread.workerThreadManager.pauseWorkers() logging.info(">>>Initialize transaction dictionary") (connectDialect, dummy) = dbStr.split(":", 1) if connectDialect.lower() == 'mysql': myThread.dialect = 'MySQL' elif connectDialect.lower() == 'oracle': myThread.dialect = 'Oracle' logging.info("Harness part constructor finished") except Exception as ex: logging.critical("Problem instantiating " + str(ex)) logging.error("Traceback: %s", str(traceback.format_exc())) raise
def initInThread(self): """ Default intialization of the harness including setting some diagnostic messages. This method is called when we call 'prepareToStart' """ try: self.messages = {} compName = self.config.Agent.componentName compSect = getattr(self.config, compName, None) if not hasattr(compSect, "logFile"): if not getattr(compSect, "componentDir", None): errorMessage = "No componentDir for log entries found!\n" errorMessage += "Harness cannot run without componentDir.\n" logging.error(errorMessage) raise HarnessException(errorMessage) compSect.logFile = os.path.join(compSect.componentDir, "ComponentLog") print("Log file is: " + compSect.logFile) logHandler = RotatingFileHandler(compSect.logFile, "a", 1000000000, 3) logMsgFormat = getattr( compSect, "logMsgFormat", "%(asctime)s:%(thread)d:%(levelname)s:%(module)s:%(message)s" ) logFormatter = logging.Formatter(logMsgFormat) logHandler.setFormatter(logFormatter) logLevelName = getattr(compSect, "logLevel", "INFO") logLevel = getattr(logging, logLevelName) logging.getLogger().addHandler(logHandler) logging.getLogger().setLevel(logLevel) self.logMsg = { "DEBUG": logging.DEBUG, "ERROR": logging.ERROR, "NOTSET": logging.NOTSET, "CRITICAL": logging.CRITICAL, "WARNING": logging.WARNING, "INFO": logging.INFO, "SQLDEBUG": logging.SQLDEBUG, } if hasattr(compSect, "logLevel") and compSect.logLevel in self.logMsg.keys(): logging.getLogger().setLevel(self.logMsg[compSect.logLevel]) WMLogging.sqldebug("wmcore level debug:") # If not previously set, force wmcore cache to current path if not os.environ.get("WMCORE_CACHE_DIR"): os.environ["WMCORE_CACHE_DIR"] = os.path.join(compSect.componentDir, ".wmcore_cache") logging.info(">>>Starting: " + compName + "<<<") # check which backend to use: MySQL, Oracle, etc... for core # services. # we recognize there can be more than one database. # be we offer a default database that is used for core services. logging.info(">>>Initializing default database") logging.info(">>>Check if connection is through socket") myThread = threading.currentThread() myThread.logger = logging.getLogger() logging.info(">>>Setting config for thread: ") myThread.config = self.config logging.info(">>>Building database connection string") # check if there is a premade string if not build it yourself. dbConfig = ConfigDBMap(self.config) dbStr = dbConfig.getDBUrl() options = dbConfig.getOption() # we only want one DBFactory per database so we will need to # to pass this on in case we are using threads. myThread.dbFactory = DBFactory(myThread.logger, dbStr, options) myThread.sql_transaction = True if myThread.dbFactory.engine: myThread.dbi = myThread.dbFactory.connect() myThread.transaction = Transaction(myThread.dbi) else: myThread.dbi = myThread.config.CoreDatabase.connectUrl myThread.sql_transaction = False # Attach a worker manager object to the main thread if not hasattr(myThread, "workerThreadManager"): myThread.workerThreadManager = WorkerThreadManager(self) else: myThread.workerThreadManager.terminateSlaves.clear() myThread.workerThreadManager.pauseWorkers() logging.info(">>>Initialize transaction dictionary") (connectDialect, junk) = dbStr.split(":", 1) if connectDialect.lower() == "mysql": myThread.dialect = "MySQL" elif connectDialect.lower() == "oracle": myThread.dialect = "Oracle" elif connectDialect.lower() == "sqlite": myThread.dialect = "SQLite" logging.info("Harness part constructor finished") except Exception as ex: logging.critical("Problem instantiating " + str(ex)) logging.error("Traceback: %s" % str(traceback.format_exc())) raise