Esempio n. 1
0
    def create(self, mode, argBag, hardCoded, legals, siteSpecificsObj):

        try:
            pnb = self.dict[mode](argBag, hardCoded, legals, siteSpecificsObj,
                                  self.logger)
        except KeyError:
            msg = '%s unknown key %s, could not instantiate PathNameBuilder: ' % (
                self.__class__.__name__, str(mode))
            self.logger.error(msg)
            raise RTTCodingError(msg)
        except Exception, e:
            msg = '%s Error constructing PathNameBuilder from key  %s.\nException: %s\nTraceback:\n%s ' % (
                self.__class__.__name__, str(mode), str(e), exc2string2())
            self.logger.error(msg)
            raise RTTCodingError(msg)
Esempio n. 2
0
    def pollLoopBody(self, jobMinders, launcher):

        if self.operatorCloseDownTest():
            self.logger.info('TestRun %s detected operator close down signal' %
                             self.name)
            [m.queueOperatorCloseDown() for m in jobMinders]

        launcher.launchNextUnlaunchedJob()

        try:
            [m.poll() for m in jobMinders]
        except:
            m = 'Error polling minder: %s ' % exc2string2()
            self.logger.error(m)
            self.logger.error(memstat())
            self.logger.error('Garbage:\n%s' % gc.garbage)
            self.logger.error('Collecting garbage...')
            gc.collect()
            self.logger.error('...Collected garbage')
            raise RTTCodingError(m)

        # the following print is done once when the minder goes to done
        # the following is debug
        # [m.printMethodTimes() for m in self.jobsActive]

        toRemove = [m for m in jobMinders if m.isDone()]
        self.mailer.collectStats(
            toRemove)  # info gathering for email sending purposes
        [m.printMethodTimes() for m in toRemove]
        [m.unlink() for m in toRemove]
        [jobMinders.remove(m) for m in toRemove]
        self.doneJobs += len(toRemove)
        self.successfulJobs += len([j for j in toRemove if j.isSuccess()])

        self.xmlConverter.pushData()
Esempio n. 3
0
def createKits(cvsPackages, jobGroupConfig, logger):
    try:
        userDefinedKits = kitFromConfFile(cvsPackages)
    except Exception, e:
        m = 'createKits: Exception %s\nTraceback:\n' % (str(e), exc2string2())
        logger.critical(m)
        raise RTTCodingError(m)
Esempio n. 4
0
class TestRunXMLConverterFactory(Factory):
  def __init__(self, logger):
    Factory.__init__(self, logger, self.__class__.__name__)

  def create(self,
             testRun,
             packageResultsDir,
             packageName,
             packageTag,
             containerPackage,
             callBackConverter,
             elementCreator,
             textNodeCreator,
             logger):

    trClassName = testRun.__class__.__name__
    # outputFile = os.path.join(packageResultsDir, packageName, 'rttpackageinfo.xml')
    outputFile = os.path.join(packageResultsDir, 'rttpackageinfo.xml')

    if trClassName == 'UnifiedConfigurationTestRun':
      try:
        converter = TestRunXMLConverter(outputFile, packageName, packageTag, containerPackage,
                                        elementCreator, textNodeCreator, callBackConverter, logger)
      except Exception, e:
        m = 'Error creating TestRun: key %s\nException:\n%s\nTraceback:\n%s' % (trClassName, str(e), exc2string2())
        raise RTTCodingError(m)
      
    elif trClassName == 'FailureTestRun':
      try:
        converter = FailureTestRunXMLConverter(outputFile, packageName, packageTag, containerPackage,
                                               elementCreator, textNodeCreator, callBackConverter, logger)
      except Exception, e:
        m = 'Error creating TestRun: key %s\nException:\n%s\nTraceback:\n%s' % (trClassName, str(e), exc2string2())
        raise RTTCodingError(m)
Esempio n. 5
0
    def __init__(self, logDir, package, identifiedName, serialNumber,
                 elementCreator, textNodeCreator):
        MethodTimer.__init__(self)

        self.done = False
        self.logDir = logDir
        self.package = package
        self.identifiedName = identifiedName
        self.jobSerialNumber = serialNumber
        self.elementCreator = elementCreator
        self.textNodeCreator = textNodeCreator
        self.jobGroup = None
        self.rttPilotJob = False
        self.rttATNJob = False

        self.logger = None
        self.makeLog()
        self.logger.debug('MinderBase init')
        self.stateEngine = None
        try:
            self.stateEngine = MinderStateEngineFactory(
                self.logger).create(self)
        except Exception, e:
            msg = 'Error instantiating  state engine:\n%s, Traceback:\n%s' % (
                str(e), exc2string2())
            self.logger.error(msg)
            raise RTTCodingError(msg)
Esempio n. 6
0
def superParser(paths, descFactory, minderFactory, logger):
    """Returns a list of all minders (RTT, RTTpilot and ATN)"""

    jobListElement = paths.packageXMLfile['rtt/jobList[0]']
    try:
        atnElement = paths.packageXMLfile['atn[0]']
    except IndexError:
        atnElement = None

    factory = JobsXMLReaderFactory(logger)

    def makeMinders((mode, element), paths):
        xmlReader = factory.create(mode, element, paths, descFactory)

        try:
            jobMinders = JobMaker(xmlReader, paths, descFactory, minderFactory,
                                  logger).jobMinders
            return jobMinders
        except:
            msg = 'Exception while parsing package xml file '
            msg += 'mode: %s package %s \n' % (mode, paths.package)
            msg += 'Traceback:\n%s' % exc2string2()
            raise RTTCodingError(msg)

        return []
Esempio n. 7
0
def getJobGroupKit(jobGroup, jobGroupKits):
    
    jobGroupKit = None
    msg ='Could not obtain a kit with name '

    try:
        kit    = jobGroupKits.kit(jobGroup)
    except:
        msg = 'getJobGroupKit: Failed to  obtain a kit with name %s' % jobGroup
        print msg
    else:
        return kit
        
    if not jobGroupKit:
        msg = 'getJobGroupKit: Attempting to  obtain a kit with name %s' % jobGroup
        print msg
        jobGroup = 'Athena'+jobGroup
        try:
            kit = jobGroupKits.kit(jobGroup)
        except:
            msg = 'getJobGroupKit: Failed to obtain a kit with name %s\nTraceback:\n%s' % (jobGroup, exc2string2())
            logger.error(msg)
            raise RTTCodingError(msg)
        else:
            msg = 'getJobGroupKit: Succeeded in obtain a kit with name %s' % jobGroup
            logger.debug(msg)
            return kit
Esempio n. 8
0
    def poll(self):
        """
        polls the state engine. If the state engine
        changes state, report and re- poll
        """
        m = '%s Start (Base) %s::poll() for %s' % (
            nowSecs(), self.__class__.__name__, self.identifiedName)
        self.logger.debug(m)

        transition = self.stateEngine.poll()

        if transition:

            m = 'State transition detected (%s, %s): %s -> %s, calling back' % (
                self.__class__.__name__, self.identifiedName,
                self.stateEngine.pollEntryState,
                self.stateEngine.pollExitState)
            self.logger.info(m)

            try:
                self.xmlConverter.makeSummaryReport()
            except:
                m = 'Error on calling back to TestRun:\n%s' % exc2string2()
                raise RTTCodingError(m)

            # self.poll()
        m = '%s End (Base) %s::poll() for %s' % (
            nowSecs(), self.__class__.__name__, self.identifiedName)
        self.logger.debug(m)
Esempio n. 9
0
 def makeJobGroupDirs(self, jobGroupDirectoryMaker):
     try:
         jobGroupDirectoryMaker.makeJobGroupDirs(self.runPath, self.resPath)
     except:
         msg = 'Exception making directories by %s traceback:\n%s' % (
             self.identifiedName, exc2string2())
         self.logger.error(msg)
         raise RTTCodingError(msg)
Esempio n. 10
0
 def setupJobGroupDirs(self, jobGroupDirectoryMaker):
     try:
         jobGroupDirectoryMaker.setupRunDir(self)
     except:
         msg = 'Error  setting up run directory by %s: TraceBack:\n%s' % (
             self.identifiedName, exc2string2())
         self.logger.warning(msg)
         raise RTTCodingError(msg)
Esempio n. 11
0
  def create(self, descArgsForScripts, logger):
    'Returns a  ScriptWriter instance according to jobGroup'
    jobGroup = descArgsForScripts.jobGroup
    if jobGroup not in self.dict.keys():
      msg  = 'Error instantiating Script: unknown job jobGroup: %s ' % jobGroup
      self.logger.error(msg)
      print msg
      raise RTTCodingError(msg)

    argsForScripts = descArgsForScripts
    argsForScripts.__dict__.update(self.argsForScripts.__dict__)

    try:
      script = self.dict[jobGroup](argsForScripts, logger)
    except Exception, e:
      m = 'Error constricting a runscript:\nException:\n%s\nTraceback:\n%s' % (str(e), exc2string2())
      logger.error(m)
      raise RTTCodingError(m)
Esempio n. 12
0
    def createMinder(self, argBag, jDescriptor):
        self.logger.debug("Coming into createMinder: desc of type %s" %
                          jDescriptor.__class__.__name__)
        key = self.makeKey(jDescriptor)
        self.logger.debug("Made key, value is: %s" % key)
        if not key: key = argBag.mode
        self.logger.debug("Now have key, value is: %s" % key)
        if key not in self.dict.keys():
            m = 'MinderFactory: Unknown key for minder type. key: %s ' % key
            self.logger.error(m)
            raise RTTCodingError(m)

        minderClass = self.dict[key]
        msg = 'Instantiating a  %s from a %s with name %s for package %s' % (
            minderClass.__name__, jDescriptor.__class__.__name__,
            jDescriptor.identifiedName, argBag.package)
        self.logger.info(msg)
        labels = [
            'jobGroup', 'runPath', 'castorSvcClass', 'jobTransformCmd',
            'jobOptions'
        ]
        descArgsForScripts = makeArgBag(labels, jDescriptor)
        try:
            descArgsForScripts.athenaCommand = jDescriptor.athenaCommand()
        except:
            pass

        # add in things  jDescriptor _might_ have these will typically be collected
        # by minders low in the Minder hierarchy
        labels = ['outChainFiles', 'missingDatasets']
        tempArgBag = makeArgBag(labels, jDescriptor)
        argBag.__dict__.update(tempArgBag.__dict__)

        try:
            argBag.jobGroupKit = getJobGroupKit(jDescriptor.jobGroup,
                                                self.jobGroupKits)
        except Exception, e:
            m = 'MinderFactory: Error extracting job group kit descriptor '
            m += 'type: %s, job group: %s, error message: %s\nTraceback:%s' % (
                jDescriptor.__class__.__name__, jDescriptor.jobGroup, str(e),
                exc2string2())
            # Not sure if this is really a coding error: might be a configuration problem.
            # In any case, the exception is caught by the calling method
            raise RTTCodingError(m)
Esempio n. 13
0
def getReleaseDate(pathNameBuilder):
    """For a given release, get the stamp date from the directory on AFS,
    or, for nightlies, from the link date if it is today's release."""

    fileWithDate = str(pathNameBuilder.pathToFindReleaseDate())
    date = getFileOrDirDateStamp(fileWithDate)
    if not date.isValid():
        m = 'InValidNICOSDateError %s' % str(date)
        raise RTTCodingError(m)
    return date
Esempio n. 14
0
 def __init__(self, maxVersion, destDir=None):
     if not type(maxVersion) == IntType:
         msg = 'VersionedFileSaver contructor arg not an int: %s ' % str(
             maxVersion)
         raise RTTCodingError(msg)
     self.maxVersion = maxVersion
     if destDir:
         self.destDir = destDir
     else:
         self.destDir = os.getcwd()
Esempio n. 15
0
    def create(self):
        'Returns a Commander instance according to mode'

        if self.mode in self.dict.keys():
            return self.dict[self.mode]()
        else:
            msg = 'CommanderFactory: Unknown mode: %s, could not instantiate a Commander\nTraceback:\n%s' % (
                self.mode, exc2string2())
            self.logger.error(msg)
            raise RTTCodingError(msg)
Esempio n. 16
0
 def handleJobTransformJobs(self, jobs):
     jobList=[]
     for job in jobs:
         try:
             jobList.append(self.handleJobTransformJob(job))
         except:
             m = 'Error creating a JobTransform Descriptor. Traceback\n%s' % exc2string2()
             logger.error(m)
             raise RTTCodingError(m)
     return jobList
Esempio n. 17
0
def mkdirIfNew(directory, perm=02775):
    """Creates, with given permissions, the directory 'directory'
(only if it does not already exist)
This function originally used os.makedirs, but was rewritten
as makedirs was not setting the permission perm.
"""

    perm = fixSBit(directory, perm)
    if pathIsOwnedByMe(directory):
        os.chmod(directory, perm)
        return
    else:
        directory = os.path.normpath(directory)
        head = str(directory)
        start = head
        if not isabs(head):
            m = 'Cannot extend paths: start point must be absolute: %s' % head
            logger.critical(m)
            raise RTTCodingError(m)
        tails = []
        ncount = 0
        while head != '/':
            ncount += 1
            if not ncount % 100:
                logger.warning(
                    'Making directories for path %s, sub dir count huge %d' %
                    (start, ncount))
            (head, tail) = os.path.split(head)
            tails.append(tail)
        tails.reverse()
        for tail in tails:
            head = os.path.join(head, tail)
            if not os.path.exists(head):
                try:
                    os.mkdir(head, perm)
                    changePerm(head, perm)
                except Exception, e:
                    msg = 'Unable to make directory'
                    msg += '%s\n%s\nTraceBack:\n%s' % (str(head), str(e),
                                                       exc2string2())
                    logger.error(msg)
                    raise RTTCodingError(msg)
Esempio n. 18
0
    def poll(self):
        # m = '%s Start %s::poll() for %s' % (nowSecs(), self.__class__.__name__, self.identifiedName)
        # print m

        try:
            [m.poll() for m in self.minders]
        except Exception, e:
            msg = 'Minder %s: a contained minder threw an exception during poll\nTraceBack"\n%s' % (
                self.identifiedName, exc2string2())
            self.logger.error(msg)
            raise RTTCodingError(msg)
Esempio n. 19
0
    def create(self, minder):

        key = minder.__class__.__name__

        try:
            converter = self.dict[key](minder)
        except Exception, e:
            msg = 'MinderStateEngineFactory: Cannot create an XML converter for minder type %s Reason: %s\nTraceback\n%s ' % (
                key, str(e), exc2string2())
            print msg
            raise RTTCodingError(msg)
Esempio n. 20
0
    def poll(self):
        if self.currentMinder:
            try:
                self.currentMinder.poll()
            except Exception, e:
                msg = 'Minder: %s: Contained minder %s threw an exception during poll\nTraceBack\n%s' % (
                    self.identifiedName, self.currentMinder.identifiedName,
                    exc2string2())

                self.logger.error(msg)
                raise RTTCodingError(msg)
Esempio n. 21
0
 def create(self, type_):
     dict = {'afs': AFSIOUtils, 'castor': CastorIOUtils}
     try:
         return dict[type_](self.logger)
     except KeyError:
         m = 'Unknown IO utils type %s, should be one of %s\n' % (
             type_, dict.keys())
         m += 'This illegal type was likely input through your top level cfg file.'
         raise RTTInputError(m)
     except Exception, e:
         raise RTTCodingError(str(e))
Esempio n. 22
0
    def create(self, minder, state='queued'):

        key = minder.__class__.__name__

        try:
            engine = self.dict[key](minder, state)
        except:
            msg = 'MinderStateEngineFactory: Cannot create a State engine for minder type %s:\nTraceback:\n%s' % (
                key, exc2string2())
            print msg
            raise RTTCodingError(msg)

        return engine
Esempio n. 23
0
    def create(self, descSetUpRunDirFn, minderClassName):

        if minderClassName in self.dict.keys():
            return self.dict[minderClassName](descSetUpRunDirFn, self.logger)
        try:
            directoryMaker = self.dict[minderClassName](descSetUpRunDirFn,
                                                        self.logger)
        except KeyError:
            msg = 'JobGroupDirectoryMakerFactory: key not in dictionary: %s' % minderClassName
            raise RTTCodingError(msg)
        except Exception, e:
            'Error constructing DirectoryMaker from minder type %s \nException: %s\Traceback:\n%s' % (
                minderClassName, str(e), exc2string2())
Esempio n. 24
0
    def kit(self, kitName):
        kit = self.kitTree.getKit(kitName)
        
        if kit == None:
            if kitName == self.kitTree.topParentLabel:
                logger.debug('Asked for a TopParent kit, returning None')
            else:
                m = 'No kit available with name '+kitName
                logger.error(m)
                raise RTTCodingError(m)
        else:
                logger.debug('Found kit with name '+kitName)

        return kit
Esempio n. 25
0
    def fromPostProcessingRunning(self):
        queryOK, isRunning = self.jobIsRunning()

        if not queryOK:
            msg = 'Unsuccesful query of a job running interactively'
            raise RTTCodingError(msg)

        if isRunning: return 'postProcessingRunning'

        self.readTestResults()
        self.copyKeepFiles()
        self.cleanSpace()

        return 'done'
Esempio n. 26
0
    def poll(self):
        # m = '%s Start %s::poll() for %s' % (nowSecs(), self.__class__.__name__, self.identifiedName)
        # print m

        # minders instantiated on first poll
        if not self.minder:
            try:
                self.makeMinder()
            except:
                msg = '%s error making inner minder Traceback:\n%s' % (
                    self.__class__.__name__, exc2string2())
                raise RTTCodingError(msg)

            self.minder.setSummaryCallBack(self.xmlConverter)

        try:
            self.minder.poll()
        except Exception, e:
            msg = '%s %s: inner minder  %s threw an exception during poll\nTraceBack"\n%s' % (
                self.__class__.__name__, self.identifiedName,
                self.minder.identifiedName, exc2string2())
            self.logger.error(msg)
            raise RTTCodingError(msg)
Esempio n. 27
0
    def hasTop(self, nodes):

        tops = [n for n in nodes if n.myLabel() == self.topLabel]

        assert (len(tops) < 2)

        if len(tops) == 0:
            msg = 'No top node in Tree, raising exception\n'
            msg += 'top node label %s \n' % self.topLabel
            msg += formatCollection([n.myLabel() for n in nodes])
            logger.error(msg)
            raise RTTCodingError(msg)

        top = tops[0]
        top.parent = self.topParentLabel
Esempio n. 28
0
    def fromRunning(self):
        queryOK, isRunning = self.jobIsRunning()

        if not queryOK:
            msg = 'Unsuccesful query of a job running interactively'
            raise RTTCodingError(msg)

        if isRunning: return 'running'  # no state transition

        self.fromRunningActions()

        if self.doPostProcessing():
            return 'postProcessingQueued'

        return 'done'
Esempio n. 29
0
def isType(instance, name):
    """name is a string. Determnes if class with name name is
    in the class heirarchy of an instance"""

    if not (type(name) is types.StringType):
        m = 'isType: argument passed is of type %s, should be of type StringType' % name.__class__.__name__
        raise RTTCodingError(m)

    name = name.strip()

    if instance.__class__.__name__ == name: return True

    bases = [b.__name__ for b in instance.__class__.__bases__]
    if name in bases: return True
    return False
Esempio n. 30
0
    def checkConditions(self):
        """
        check we have made the project build cmt requirements files
        for now I am going to hardwire a lot of the code. This is less than
        ideal as we are assuming what is done in other parts of the code
        (UserStuffRetriever)
        Need to make an USR in order to refind the cmt requirements
        files...
        """
        hExists = os.path.exists(self.cmtHomeDir)
        msg = ''

        if not hExists:
            msg += 'cmtLinesProject no file:  self.cmtHomeDir  = %s\n' % self.cmtHomeDir
            self.logger.error(msg)
            raise RTTCodingError(msg)