CMS 3D CMS Logo

Functions
popcon2dropbox Namespace Reference

Functions

def checkFile (dbName)
 
def copy (args, dbName)
 
def run (args)
 
def saveFileForImportErrors (datef, dbName, withMetadata=False)
 
def upload (args, dbName)
 

Function Documentation

def popcon2dropbox.checkFile (   dbName)

Definition at line 32 of file popcon2dropbox.py.

References str.

Referenced by run().

32 def checkFile( dbName ):
33  dbFileName = '%s.db' %dbName
34  # check if the expected input file is there...
35  # exit code < 0 => error
36  # exit code = 0 => skip
37  # exit code = 1 => import
38  if not os.path.exists( dbFileName ):
39  logger.error('The file expected as an input %s has not been found.'%dbFileName )
40  return -1
41 
42  empty = True
43  try:
44  dbcon = sqlite3.connect( dbFileName )
45  dbcur = dbcon.cursor()
46  dbcur.execute('SELECT * FROM IOV')
47  rows = dbcur.fetchall()
48  for r in rows:
49  empty = False
50  dbcon.close()
51  if empty:
52  logger.warning('The file expected as an input %s contains no data. The import will be skipped.'%dbFileName )
53  return 0
54  return 1
55  except Exception as e:
56  logger.error('Check on input data failed: %s' %str(e))
57  return -2
58 
def checkFile(dbName)
#define str(s)
def popcon2dropbox.copy (   args,
  dbName 
)

Definition at line 122 of file popcon2dropbox.py.

References edm.print(), saveFileForImportErrors(), and str.

Referenced by run().

122 def copy( args, dbName ):
123  dbFileName = '%s.db' %dbName
124  destDb = args.destDb
125  destTag = args.destTag
126  comment = args.comment
127 
128  datef = datetime.now()
129  destMap = { "oracle://cms_orcoff_prep/cms_conditions": "oradev", "oracle://cms_orcon_prod/cms_conditions": "onlineorapro" }
130  if destDb.lower() in destMap.keys():
131  destDb = destMap[destDb.lower()]
132  else:
133  if destDb.startswith('sqlite'):
134  destDb = destDb.split(':')[1]
135  else:
136  logger.error( 'Destination connection %s is not supported.' %destDb )
137  return
138  # run the copy
139  note = '"Importing data with O2O execution"'
140  commandOptions = '--force --yes --db %s copy %s %s --destdb %s --synchronize --note %s' %(dbFileName,destTag,destTag,destDb,note)
141  copyCommand = 'conddb %s' %commandOptions
142  logger.info( 'Executing command: %s' %copyCommand )
143  try:
144  pipe = subprocess.Popen( copyCommand, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
145  stdout = pipe.communicate()[0]
146  print(stdout)
147  retCode = pipe.returncode
148  if retCode != 0:
149  saveFileForImportErrors( datef, dbName )
150  ret = retCode
151  except Exception as e:
152  ret = 1
153  logger.error( str(e) )
154  return ret
155 
def saveFileForImportErrors(datef, dbName, withMetadata=False)
def copy(args, dbName)
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:66
#define str(s)
def popcon2dropbox.run (   args)

Definition at line 156 of file popcon2dropbox.py.

References checkFile(), copy(), edm.print(), and upload().

156 def run( args ):
157 
158  dbName = datetime.utcnow().strftime('%Y-%m-%d_%H-%M-%S-%f')
159  dbFileName = '%s.db' %dbName
160 
161  if args.auth is not None and not args.auth=='':
162  if auth_path_key in os.environ:
163  logger.warning("Cannot set authentication path to %s in the environment, since it is already set." %args.auth)
164  else:
165  logger.info("Setting the authentication path to %s in the environment." %args.auth)
166  os.environ[auth_path_key]=args.auth
167  if os.path.exists( '%s.db' %dbName ):
168  logger.info("Removing files with name %s" %dbName )
169  os.remove( '%s.db' %dbName )
170  if os.path.exists( '%s.txt' %dbName ):
171  os.remove( '%s.txt' %dbName )
172  command = 'cmsRun %s ' %args.job_file
173  command += ' targetFile=%s' %dbFileName
174  command += ' destinationDatabase=%s' %args.destDb
175  command += ' destinationTag=%s' %args.destTag
176  command += ' 2>&1'
177  pipe = subprocess.Popen( command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
178  stdout = pipe.communicate()[0]
179  retCode = pipe.returncode
180  print(stdout)
181  logger.info('PopCon Analyzer return code is: %s' %retCode )
182  if retCode!=0:
183  logger.error( 'O2O job failed. Skipping upload.' )
184  return retCode
185 
186  ret = checkFile( dbName )
187  if ret > 0:
188  if args.copy:
189  ret = copy( args, dbName )
190  else:
191  ret = upload( args, dbName )
192  os.remove( '%s.db' %dbName )
193  return ret
194 
def copy(args, dbName)
def upload(args, dbName)
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:66
def checkFile(dbName)
def popcon2dropbox.saveFileForImportErrors (   datef,
  dbName,
  withMetadata = False 
)

Definition at line 59 of file popcon2dropbox.py.

Referenced by copy(), and upload().

59 def saveFileForImportErrors( datef, dbName, withMetadata=False ):
60  # save a copy of the files in case of upload failure...
61  leafFolderName = datef.strftime(dateformatForFolder)
62  fileFolder = os.path.join( errorInImportFileFolder, leafFolderName)
63  if not os.path.exists(fileFolder):
64  os.makedirs(fileFolder)
65  df= '%s.db' %dbName
66  dataDestFile = os.path.join( fileFolder, df)
67  if not os.path.exists(dataDestFile):
68  shutil.copy2(df, dataDestFile)
69  if withMetadata:
70  mf= '%s.txt' %dbName
71  metadataDestFile = os.path.join( fileFolder, mf )
72  if not os.path.exists(metadataDestFile):
73  shutil.copy2(df, metadataDestFile)
74  logger.error("Upload failed. Data file and metadata saved in folder '%s'" %os.path.abspath(fileFolder))
75 
def saveFileForImportErrors(datef, dbName, withMetadata=False)
def popcon2dropbox.upload (   args,
  dbName 
)

Definition at line 76 of file popcon2dropbox.py.

References edm.print(), saveFileForImportErrors(), and str.

Referenced by run().

76 def upload( args, dbName ):
77  destDb = args.destDb
78  destTag = args.destTag
79  comment = args.comment
80 
81  datef = datetime.now()
82 
83  # first remove any existing metadata file...
84  if os.path.exists( '%s.txt' %dbName ):
85  logger.debug('Removing already existing file %s' %dbName)
86  os.remove( '%s.txt' %dbName )
87 
88  # dump Metadata for the Upload
89  uploadMd = {}
90  uploadMd['destinationDatabase'] = destDb
91  tags = {}
92  tagInfo = {}
93  tags[ destTag ] = tagInfo
94  uploadMd['destinationTags'] = tags
95  uploadMd['inputTag'] = destTag
96  uploadMd['since'] = None
97  datelabel = datef.strftime(dateformatForLabel)
98  commentStr = ''
99  if not comment is None:
100  commentStr = comment
101  uploadMd['userText'] = '%s : %s' %(datelabel,commentStr)
102  with open( '%s.txt' %dbName, 'wb') as jf:
103  jf.write( json.dumps( uploadMd, sort_keys=True, indent = 2 ) )
104  jf.write('\n')
105 
106  # run the upload
107  uploadCommand = 'uploadConditions.py %s' %dbName
108  ret = 0
109  try:
110  pipe = subprocess.Popen( uploadCommand, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
111  stdout = pipe.communicate()[0]
112  print(stdout)
113  retCode = pipe.returncode
114  if retCode != 0:
115  saveFileForImportErrors( datef, dbName, True )
116  ret |= retCode
117  except Exception as e:
118  ret |= 1
119  logger.error(str(e))
120  return ret
121 
def saveFileForImportErrors(datef, dbName, withMetadata=False)
def upload(args, dbName)
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:66
#define str(s)