def __submit( self, site, CE, vo ): """ set the job and submit. """ job = Job() job.setName( self.testType ) job.setJobGroup( 'CE-Test' ) job.setExecutable( self.executable ) job.setInputSandbox( '%s/%s' % ( self.__scriptPath, self.executable ) ) if site and not CE: job.setDestination( site ) if CE: job.setDestinationCE( CE ) LOCK.acquire() proxyPath = BESUtils.getProxyByVO( 'yant', vo ) if not proxyPath[ 'OK' ]: return proxyPath proxyPath = proxyPath[ 'Value' ] oldProxy = os.environ.get( 'X509_USER_PROXY' ) os.environ[ 'X509_USER_PROXY' ] = proxyPath result = self.dirac.submit( job ) if oldProxy is None: del os.environ[ 'X509_USER_PROXY' ] else: os.environ[ 'X509_USER_PROXY' ] = oldProxy LOCK.release() return result
def __getJobOutput( self, jobID, vo ): status = self.dirac.status( jobID ) if not status[ 'OK' ]: return status status = status[ 'Value' ][ jobID ][ 'Status' ] if status in ( 'Done', 'Failed' ): LOCK.acquire() proxyPath = BESUtils.getProxyByVO( 'yant', vo ) if not proxyPath[ 'OK' ]: return proxyPath proxyPath = proxyPath[ 'Value' ] oldProxy = os.environ.get( 'X509_USER_PROXY' ) os.environ[ 'X509_USER_PROXY' ] = proxyPath outputRes = self.dirac.getOutputSandbox( jobID, self.__logPath ) if oldProxy is None: del os.environ[ 'X509_USER_PROXY' ] else: os.environ[ 'X509_USER_PROXY' ] = oldProxy LOCK.release() if not outputRes[ 'OK' ]: ret = S_OK( { 'Download' : False, 'Log' : outputRes[ 'Message' ] } ) else: try: logfile = open( '%s/%d/Script1_CodeOutput.log' % ( self.__logPath, jobID ), 'r' ) log = logfile.read() logfile.close() except IOError, e: raise IOError os.system( 'rm -rf %s/%d' % ( self.__logPath, jobID ) ) ret = S_OK( { 'Download' : True, 'Log' : log } )
def doTest( self, elementDict ): """ Test upload and download for specified SE. """ elementName = elementDict[ 'ElementName' ] testFilePath = self.__localPath + self.__testFile if not os.path.exists( testFilePath ) or not os.path.isfile( testFilePath ): f = open( testFilePath, 'w' ) f.write( 'hello' ) f.close() status = 'OK' log = '' lfnPath = self.__lfnPath + elementName + '-' + self.__testFile submissionTime = datetime.utcnow().replace( microsecond = 0 ) LOCK.acquire() start = time.time() result = self.dm.putAndRegister( lfnPath, testFilePath, elementName ) uploadTime = time.time() - start if result[ 'OK' ]: log += 'Succeed to upload file to SE %s.\n' % elementName log += 'Upload Time : %ss\n' % uploadTime start = time.time() result = self.dm.getReplica( lfnPath, elementName, self.__localPath ) downloadTime = time.time() - start if result[ 'OK' ]: log += 'Succeed to download file from SE %s.\n' % elementName log += 'Download Time : %ss\n' % downloadTime else: status = 'Bad' log += 'Failed to download file from SE %s : %s\n' % ( elementName, result[ 'Message' ] ) result = self.dm.removeFile( lfnPath ) if result[ 'OK' ]: log += 'Succeed to delete file from SE %s.\n' % elementName else: log += 'Faile to delete file from SE %s : %s\n' % ( elementName, result[ 'Message' ] ) else: status = 'Bad' log += 'Failed to upload file to SE %s : %s\n' % ( elementName, result[ 'Message' ] ) LOCK.release() completionTime = datetime.utcnow().replace( microsecond = 0 ) applicationTime = ( completionTime - submissionTime ).total_seconds() result = { 'Result' : { 'Status' : status, 'Log' : log, 'SubmissionTime' : submissionTime, 'CompletionTime' : completionTime, 'ApplicationTime' : applicationTime }, 'Finish' : True } localFile = self.__localPath + elementName +'-' + self.__testFile if os.path.exists( localFile ) and os.path.isfile( localFile ): os.remove( localFile ) return S_OK( result )