9 from datetime
import datetime
12 dbFileName =
'%s.db' %dbName
13 dbFileForDropBox = dbFileName
14 dbLogFile =
'%s_log.db' %dbName
15 errorInImportFileFolder =
'import_errors' 16 dateformatForFolder =
"%y-%m-%d-%H-%M-%S" 17 dateformatForLabel =
"%y-%m-%d %H:%M:%S" 19 auth_path_key =
'COND_AUTH_PATH' 21 messageLevelEnvVar =
'POPCON_LOG_LEVEL' 22 fmt_str =
"[%(asctime)s] %(levelname)s: %(message)s" 23 logLevel = logging.INFO
24 if messageLevelEnvVar
in os.environ:
25 levStr = os.environ[messageLevelEnvVar]
27 logLevel = logging.DEBUG
28 logFormatter = logging.Formatter(fmt_str)
29 logger = logging.getLogger()
30 logger.setLevel(logLevel)
31 consoleHandler = logging.StreamHandler(sys.stdout)
32 consoleHandler.setFormatter(logFormatter)
33 logger.addHandler(consoleHandler)
40 if not os.path.exists( dbFileName ):
41 logger.error(
'The file expected as an input %s has not been found.'%dbFileName )
46 dbcon = sqlite3.connect( dbFileName )
47 dbcur = dbcon.cursor()
48 dbcur.execute(
'SELECT * FROM IOV')
49 rows = dbcur.fetchall()
54 logger.warning(
'The file expected as an input %s contains no data. The import will be skipped.'%dbFileName )
57 except Exception
as e:
58 logger.error(
'Check on input data failed: %s' %
str(e))
63 leafFolderName = datef.strftime(dateformatForFolder)
64 fileFolder = os.path.join( errorInImportFileFolder, leafFolderName)
65 if not os.path.exists(fileFolder):
66 os.makedirs(fileFolder)
68 dataDestFile = os.path.join( fileFolder, df)
69 if not os.path.exists(dataDestFile):
70 shutil.copy2(df, dataDestFile)
73 metadataDestFile = os.path.join( fileFolder, mf )
74 if not os.path.exists(metadataDestFile):
75 shutil.copy2(df, metadataDestFile)
76 logger.error(
"Upload failed. Data file and metadata saved in folder '%s'" %os.path.abspath(fileFolder))
80 destTag = args.destTag
81 comment = args.comment
83 datef = datetime.now()
86 if os.path.exists(
'%s.txt' %dbName ):
87 logger.debug(
'Removing already existing file %s' %dbName)
88 os.remove(
'%s.txt' %dbName )
92 uploadMd[
'destinationDatabase'] = destDb
95 tags[ destTag ] = tagInfo
96 uploadMd[
'destinationTags'] = tags
97 uploadMd[
'inputTag'] = destTag
98 uploadMd[
'since'] =
None 99 datelabel = datef.strftime(dateformatForLabel)
101 if not comment
is None:
103 uploadMd[
'userText'] =
'%s : %s' %(datelabel,commentStr)
104 with open(
'%s.txt' %dbName,
'wb')
as jf:
105 jf.write( json.dumps( uploadMd, sort_keys=
True, indent = 2 ) )
109 uploadCommand =
'uploadConditions.py %s' %dbName
112 pipe = subprocess.Popen( uploadCommand, shell=
True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
113 stdout = pipe.communicate()[0]
115 retCode = pipe.returncode
119 except Exception
as e:
126 destTag = args.destTag
127 comment = args.comment
129 datef = datetime.now()
130 destMap = {
"oracle://cms_orcoff_prep/cms_conditions":
"oradev",
"oracle://cms_orcon_prod/cms_conditions":
"onlineorapro" }
131 if destDb.lower()
in destMap.keys():
132 destDb = destMap[destDb.lower()]
134 logger.error(
'Destination connection %s is not supported.' %destDb )
137 note =
'"Importing data with O2O execution"' 138 commandOptions =
'--force --yes --db %s copy %s %s --destdb %s --synchronize --note %s' %(dbFileName,destTag,destTag,destDb,note)
139 copyCommand =
'conddb %s' %commandOptions
140 logger.info(
'Executing command: %s' %copyCommand )
142 pipe = subprocess.Popen( copyCommand, shell=
True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
143 stdout = pipe.communicate()[0]
145 retCode = pipe.returncode
149 except Exception
as e:
151 logger.error(
str(e) )
155 if args.auth
is not None and not args.auth==
'':
156 if auth_path_key
in os.environ:
157 logger.warning(
"Cannot set authentication path to %s in the environment, since it is already set." %args.auth)
159 logger.info(
"Setting the authentication path to %s in the environment." %args.auth)
160 os.environ[auth_path_key]=args.auth
161 if os.path.exists(
'%s.db' %dbName ):
162 logger.info(
"Removing files with name %s" %dbName )
163 os.remove(
'%s.db' %dbName )
164 if os.path.exists(
'%s.txt' %dbName ):
165 os.remove(
'%s.txt' %dbName )
166 command =
'cmsRun %s ' %args.job_file
167 command +=
' destinationDatabase=%s' %args.destDb
168 command +=
' destinationTag=%s' %args.destTag
170 pipe = subprocess.Popen( command, shell=
True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
171 stdout = pipe.communicate()[0]
172 retCode = pipe.returncode
174 logger.info(
'PopCon Analyzer return code is: %s' %retCode )
176 logger.error(
'O2O job failed. Skipping upload.' )
def saveFileForImportErrors(datef, withMetadata=False)