def main(): # pdb.set_trace() #***************** Setup Logging ************** logger = logging.getLogger('FinalJobber') logger.setLevel(logging.INFO) #logFileHandle = logging.FileHandler('/usgs/cdev/PDS/logs/Service.log') logFileHandle = logging.FileHandler(pds_log + 'Service.log') formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s, %(message)s') logFileHandle.setFormatter(formatter) logger.addHandler(logFileHandle) #***************Look at Final queue for work************ RQ_final = RedisQueue('FinalQueue') if int(RQ_final.QueueSize()) == 0: # logger.info('NO Keys Found in FinalQueue') print 'Nothing Found in Final Queue' else: FKey = RQ_final.QueueGet() logger.info('Found %s in Final Queue', FKey) # ** *************** HPC job stuff *********************** logger.info('HPC Cluster job Submission Starting') jobOBJ = HPCjob() jobOBJ.setJobName(FKey + '_Final') #jobOBJ.setStdOut('/usgs/cdev/PDS/output/' + FKey + '_%A_%a.out') #jobOBJ.setStdError('/usgs/cdev/PDS/output/' + FKey + '_%A_%a.err') jobOBJ.setStdOut(slurm_log + FKey + '_%A_%a.out') jobOBJ.setStdError(slurm_log + FKey + '_%A_%a.err') jobOBJ.setWallClock('24:00:00') jobOBJ.setMemory('8192') jobOBJ.setPartition('pds') cmd = cmd_dir + 'ServiceFinal.py ' + FKey jobOBJ.setCommand(cmd) logger.info('HPC Command: %s', cmd) #SBfile = '/scratch/pds_services/' + FKey + '/' + FKey + '_final.sbatch' SBfile = scratch + FKey + '/' + FKey + '_final.sbatch' jobOBJ.MakeJobFile(SBfile) try: sb = open(SBfile) sb.close logger.info('SBATCH File Creation: Success') except IOError as e: logger.error('SBATCH File %s Not Found', SBfile) try: jobOBJ.Run() logger.info('Job Submission to HPC: Success') except IOError as e: logger.error('Jobs NOT Submitted to HPC')
def main(): # pdb.set_trace() archiveID = { 16: '/pds_san/PDS_Archive/Mars_Reconnaissance_Orbiter/CTX/', 74: '/pds_san/PDS_Archive/Lunar_Reconnaissance_Orbiter/LROC/EDR/', 124: '/pds_san/PDS_Archive/Mars_Reconnaissance_Orbiter/HiRISE/', 101: '/pds_san/PDS_Archive/Apollo/Rock_Sample_Images/' } # ********* Set up logging ************* logger = logging.getLogger('DI_Process') logger.setLevel(logging.INFO) logFileHandle = logging.FileHandler('/usgs/cdev/PDS/logs/DI.log') formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s, %(message)s') logFileHandle.setFormatter(formatter) logger.addHandler(logFileHandle) logger.info('Starting DI Process') try: # Throws away engine information session, _ = db_connect(pds_db) logger.info('DataBase Connecton: Success') except: logger.error('DataBase Connection: Error') return 1 RQ = RedisQueue('ChecksumUpdate_Queue') index = 0 count = 0 while int(RQ.QueueSize()) > 0: inputfile = RQ.QueueGet() Qelement = session.query(Files).filter( Files.filename == inputfile).one() cpfile = archiveID[Qelement.archiveid] + Qelement.filename if os.path.isfile(cpfile): """ CScmd = 'md5sum ' + cpfile process = subprocess.Popen( CScmd, stdout=subprocess.PIPE, shell=True) (stdout, stderr) = process.communicate() temp_checksum = stdout.split()[0] # temp_checksum = hashlib.md5(open(tempfile, 'rb').read()).hexdigest() # os.remove(tempfile) """ # Calculate checksum in chunks of 4096 f_hash = hashlib.md5() with open(cpfile, "rb") as f: for chunk in iter(lambda: f.read(4096), b""): f_hash.update(chunk) checksum = f_hash.hexdigest() if checksum != Qelement.checksum: Qelement.checksum = checksum Qelement.di_pass = '******' Qelement.di_date = datetime.datetime.now( pytz.utc).strftime("%Y-%m-%d %H:%M:%S") session.flush() index = index + 1 count = count + 1 logger.info('Update Checksum %s: Success', inputfile) if count > 25: session.commit() logger.info('Session Commit for 25 Records: Success') count = 0 else: logger.error('File %s Not Found', cpfile) try: session.commit() except: session.rollback() logger.error('Error durint commit') logger.info("End Commit DI process to Database: Success") logger.info('Checksum for %s Files Updated', str(index))
def main(): # pdb.set_trace() # ***************** Set up logging ***************** logger = logging.getLogger('ProjectionBrowse_Process') logger.setLevel(logging.INFO) logFileHandle = logging.FileHandler('/usgs/cdev/PDS/logs/Process.log') formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s, %(message)s') logFileHandle.setFormatter(formatter) logger.addHandler(logFileHandle) RQ_main = RedisQueue('PilotB_ReadyQueue') while int(RQ_main.QueueSize()) > 0: inputfile = RQ_main.QueueGet() if os.path.isfile(inputfile): logger.info('Starting Process: %s', inputfile) if 'Mars_Reconnaissance_Orbiter/CTX/' in inputfile: mission = 'CTX' # ********** Derived DIR path Stuff ********************** finalpath = makedir(inputfile) recipeOBJ = Recipe() recipe_json = recipeOBJ.getRecipeJSON(mission) recipeOBJ.AddJsonFile(recipe_json, 'reduced') infile = workarea + \ os.path.splitext(os.path.basename(inputfile))[ 0] + '.Pinput.cub' outfile = workarea + \ os.path.splitext(os.path.basename(inputfile))[ 0] + '.Poutput.cub' status = 'success' for item in recipeOBJ.getProcesses(): if status == 'error': break elif status == 'success': processOBJ = Process() processR = processOBJ.ProcessFromRecipe( item, recipeOBJ.getRecipe()) if '2isis' in item: processOBJ.updateParameter('from_', inputfile) processOBJ.updateParameter('to', outfile) elif item == 'spiceinit': processOBJ.updateParameter('from_', infile) elif item == 'ctxevenodd': label = pvl.load(infile) SS = label['IsisCube']['Instrument']['SpatialSumming'] if SS != 1: break else: processOBJ.updateParameter('from_', infile) processOBJ.updateParameter('to', outfile) elif item == 'reduce': label = pvl.load(infile) Nline = label['IsisCube']['Core']['Dimensions']['Lines'] Nsample = label['IsisCube']['Core']['Dimensions']['Samples'] Sfactor = scaleFactor(Nline, Nsample) processOBJ.updateParameter('lscale', Sfactor) processOBJ.updateParameter('sscale', Sfactor) processOBJ.updateParameter('from_', infile) processOBJ.updateParameter('to', outfile) elif item == 'isis2std': outfile = finalpath + '/' + \ os.path.splitext(os.path.basename(inputfile))[ 0] + '.projectionbrowse.png' processOBJ.updateParameter('from_', infile) processOBJ.updateParameter('to', outfile) else: processOBJ.updateParameter('from_', infile) processOBJ.updateParameter('to', outfile) print processOBJ.getProcess() for k, v in processOBJ.getProcess().items(): func = getattr(isis, k) try: func(**v) logger.info('Process %s :: Success', k) if os.path.isfile(outfile): if '.cub' in outfile: os.rename(outfile, infile) status = 'success' except ProcessError as e: logger.error('Process %s :: Error', k) status = 'error' if status == 'success': os.remove(infile) logger.info('Browse Process Success: %s', inputfile) else: logger.error('File %s Not Found', inputfile)
def main(): args = Args() args.parse_args() override = args.override # ********* Set up logging ************* logger = logging.getLogger('Ingest_Process') logger.setLevel(logging.INFO) logFileHandle = logging.FileHandler(pds_log + 'Ingest.log') formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s, %(message)s') logFileHandle.setFormatter(formatter) logger.addHandler(logFileHandle) logger.info("Starting Process") PDSinfoDICT = json.load(open(pds_info, 'r')) RQ_main = RedisQueue('Ingest_ReadyQueue') RQ_work = RedisQueue('Ingest_WorkQueue') RQ_upc = RedisQueue('UPC_ReadyQueue') RQ_thumb = RedisQueue('Thumbnail_ReadyQueue') RQ_browse = RedisQueue('Browse_ReadyQueue') #RQ_pilotB = RedisQueue('PilotB_ReadyQueue') try: session, _ = db_connect(pds_db) logger.info('DataBase Connecton: Success') except: logger.error('DataBase Connection: Error') index = 1 while int(RQ_main.QueueSize()) > 0: item = literal_eval(RQ_main.QueueGet().decode("utf-8")) inputfile = item[0] archive = item[1] RQ_work.QueueAdd(inputfile) subfile = inputfile.replace(PDSinfoDICT[archive]['path'], '') # Calculate checksum in chunks of 4096 f_hash = hashlib.md5() with open(inputfile, "rb") as f: for chunk in iter(lambda: f.read(4096), b""): f_hash.update(chunk) filechecksum = f_hash.hexdigest() QOBJ = session.query(Files).filter_by(filename=subfile).first() runflag = False if QOBJ is None: runflag = True elif filechecksum != QOBJ.checksum: runflag = True if runflag == True or override == True: date = datetime.datetime.now( pytz.utc).strftime("%Y-%m-%d %H:%M:%S") fileURL = inputfile.replace(archive_base, web_base) # If all upc requirements are in 'inputfile,' flag for upc upcflag = all(x in inputfile for x in PDSinfoDICT[archive]['upc_reqs']) filesize = os.path.getsize(inputfile) try: # If we found an existing file and want to overwrite the data if QOBJ is not None and override == True: testIN = QOBJ # If the file was not found, create a new entry else: testIN = Files() testIN.archiveid = PDSinfoDICT[archive]['archiveid'] testIN.filename = subfile testIN.entry_date = date testIN.checksum = filechecksum testIN.upc_required = upcflag testIN.validation_required = True testIN.header_only = False testIN.release_date = date testIN.file_url = fileURL testIN.file_size = filesize testIN.di_pass = True testIN.di_date = date session.merge(testIN) session.flush() if upcflag == True: RQ_upc.QueueAdd((inputfile, testIN.fileid, archive)) RQ_thumb.QueueAdd((inputfile, testIN.fileid, archive)) RQ_browse.QueueAdd((inputfile, testIN.fileid, archive)) #RQ_pilotB.QueueAdd((inputfile, testIN.fileid, archive)) RQ_work.QueueRemove(inputfile) index = index + 1 except Exception as e: print(e) logger.error("Error During File Insert %s", subfile) elif runflag == False: RQ_work.QueueRemove(inputfile) if index >= 250: try: session.commit() logger.info("Commit 250 files to Database: Success") index = 1 except: session.rollback() logger.error("Something Went Wrong During DB Insert") else: logger.info("No Files Found in Ingest Queue") try: session.commit() logger.info("Commit to Database: Success") except: session.rollback() if RQ_main.QueueSize() == 0 and RQ_work.QueueSize() == 0: logger.info("Process Complete All Queues Empty") elif RQ_main.QueueSize() == 0 and RQ_work.QueueSize() != 0: logger.warning("Process Done Work Queue NOT Empty Contains %s Files", str( RQ_work.QueueSize())) logger.info("Ingest Complete")