Changeset 4888 for TI01-discovery


Ignore:
Timestamp:
29/01/09 17:07:37 (11 years ago)
Author:
sdonegan
Message:

Create tagged release of stable developed version for ingestion and ingestion reporting. Note - this is pre- Calums restructuring of ndgUtils and update to use atom feed. Will need to merge the two at some stage.

Location:
TI01-discovery/tags/stable-TI01-ingestAutomation_Proglue_upgradesAndReporting/temp
Files:
6 edited
1 copied

Legend:

Unmodified
Added
Removed
  • TI01-discovery/tags/stable-TI01-ingestAutomation_Proglue_upgradesAndReporting/temp/OAIBatch/PostgresDAO.py

    r4224 r4888  
    162162        logging.info("Adding spatiotemporal row to DB") 
    163163         
    164         sqlCmd = "SELECT add_spatiotemporal_row('" + str(self._record.db_id) + "', '" + \ 
    165             str(coords.north) + "', '" + str(coords.south) + "', '" + str(coords.west) + "', '" + \ 
    166             str(coords.east) + "', " 
     164         
     165        sqlCmd = "SELECT add_spatiotemporal_row('" + str(self._record.db_id) + "', " + \ 
     166            str(coords.north) + ", " + str(coords.south) + ", " + str(coords.west) + ", " + \ 
     167            str(coords.east) + ", " 
    167168             
    168169             
     
    179180            sqlCmd += "'" + timeRange.end + "'" 
    180181         
    181         sqlCmd += ");"       
     182        sqlCmd += ");"  
     183         
     184        logging.info("sssssssssssssssssssssssssssssssssssssssss" + sqlCmd) 
    182185 
    183186        db_funcs.runSQLCommand(self._connection, sqlCmd) 
     
    203206             
    204207        spatialData = self._record.getSpatialData() 
    205         
     208                 
    206209        # check if we have any spatiotemporal data to add; escape if not 
    207210        if not timeData and not spatialData: 
     
    215218        if not spatialData: 
    216219            spatialData = [ Coords('null', 'null', 'null', 'null') ] 
    217         
     220             
     221 
    218222        # if both arrays of data are the same length, assume they map together 
    219223        i = 0 
     
    231235                    self._insertSpatioTemporalRow(coords, timeRange) 
    232236        logging.info("Spatiotemporal data added to DB record") 
    233              
     237         
     238         
    234239     
    235240    def _insertOriginalRecord(self): 
  • TI01-discovery/tags/stable-TI01-ingestAutomation_Proglue_upgradesAndReporting/temp/OAIBatch/PostgresRecord.py

    r4223 r4888  
    187187        # write the query to file, to make it easier to input 
    188188        # NB, running directly at the command line leads to problems with the interpretation of $ characters 
    189         xqFile = "currentQuery.xq" 
     189        #xqFile = "currentQuery.xq" 
     190        xqFile="currentQuery_" +xQueryType + ".xq" 
    190191        self._fileUtils.createFile(xqFile, xquery) 
    191192 
    192193        # Now do the transform 
    193         os.putenv ('PATH', ':/usr/java/jdk1.5.0_03/bin:/usr/java/jdk1.5.0_03:/usr/java/jdk1.5.0_03/lib/tools.jar:/usr/local/WSClients/OAIBatch:/usr/local/exist-client/bin:/bin:/usr/bin:.') 
     194        #os.putenv ('PATH', ':/usr/java/jdk1.5.0_03/bin:/usr/java/jdk1.5.0_03:/usr/java/jdk1.5.0_03/lib/tools.jar:/usr/local/WSClients/OAIBatch:/usr/local/exist-client/bin:/bin:/usr/bin:.') 
     195        os.putenv ('PATH', ':/usr/java/jdk1.5.0_06/bin:/usr/java/jdk1.5.0_06:/usr/java/jdk1.5.0_06/lib/tools.jar:/usr/local/WSClients/OAIBatch:/usr/local/exist-client/bin:/bin:/usr/bin:.') 
    194196        xqCommand = "java -cp ./lib/saxon9.jar net.sf.saxon.Query " + xqFile + " !omit-xml-declaration=yes" 
    195197        logging.debug("Running saxon command: " + xqCommand) 
    196198        pipe = os.popen(xqCommand + " 2>&1") 
     199         
    197200        output = pipe.read() 
    198201        status = pipe.close() 
    199202 
     203        #for debug - write output to a local file for checking 
     204        #xqOpLocalFile= xQueryType + "_results.xml" 
     205        #print "++++++++++++++++++++++++++++++++++++++++++++++SJD: Printing xq op to local file: " + xqOpLocalFile 
     206        #self._fileUtils.createFile(xqOpLocalFile,output) 
     207        #file=open(xqOpLocalFile) 
     208        #file.writelines(output) 
     209        #file.close 
     210         
    200211        if status is not None: 
    201212            raise SystemError, 'Failed at running the XQuery' 
    202213 
    203214        # now remove the temp xquery file 
    204         status = os.unlink(xqFile) 
    205         if status is not None: 
    206             raise OSError, 'Failed to remove the temporary xquery file, ' + xqFile 
     215        #status = os.unlink(xqFile) 
     216        #if status is not None: 
     217         #   raise OSError, 'Failed to remove the temporary xquery file, ' + xqFile 
    207218         
    208219        logging.info("Transform completed successfully") 
     
    359370        # initialise the various spatiotemporal arrays used to extract data to 
    360371        self.stData = SpatioTemporalData() 
     372         
     373        logging.info('ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg : ' + self.stData) 
    361374         
    362375        if self.dgMeta is None: 
  • TI01-discovery/tags/stable-TI01-ingestAutomation_Proglue_upgradesAndReporting/temp/OAIBatch/db_funcs.py

    r3907 r4888  
    2828        ''' 
    2929        logging.info("Running SQL command") 
    30         logging.debug("Actual command: %s" %sqlCmd) 
     30        #logging.debug("Actual command: %s" %sqlCmd) 
    3131        cursor = connection.cursor() 
    3232        try: 
  • TI01-discovery/tags/stable-TI01-ingestAutomation_Proglue_upgradesAndReporting/temp/OAIBatch/ingest.config

    r3855 r4888  
    1 calum glue calum boybear 51000 
     1discovery_steve glue steve purplepie 51000 
  • TI01-discovery/tags/stable-TI01-ingestAutomation_Proglue_upgradesAndReporting/temp/OAIBatch/oai_document_ingester.py

    r3972 r4888  
    1616from PostgresRecord import PostgresRecord 
    1717from PostgresDAO import PostgresDAO 
     18from datetime import date 
    1819import db_funcs 
    1920 
     
    4344                    raise TypeError, "Only handles DIF or MDIP here." 
    4445         
    45                 logging.info("Found identifier: " + ID) 
    4646                return ID 
    4747         
     
    5353                @param filename: full path of file to add to postgres DB  
    5454                ''' 
     55                 
     56                #filename = self.discDir + actualFilename 
     57                 
    5558                if not os.path.isfile(filename): 
    5659                        logging.info("Skipping, %s - not a valid file" %filename) 
     
    5861                 
    5962                logging.info("Adding file, " + filename + ", to postgres DB") 
     63                 
     64                numSlash = len(filename.split('/')) 
     65                shortFilename = filename.split('/')[numSlash - 1] 
    6066                 
    6167                # first of all create a PostgresRecord - this object represents all the data required 
     
    6369                dao = None 
    6470                try: 
     71                         
    6572                        discoveryID = self.getID(filename) 
    6673                         
     
    6976                                                            discoveryID, self._xq, self._datacentre_format) 
    7077         
     78                         
    7179                        # Now create the data access object to interface to the DB 
    7280                        dao = PostgresDAO(record, self._dbConnection) 
    73                  
     81                         
    7482                        # Finally, write the new record 
    75                         if dao.createOrUpdateRecord(): 
     83                        if dao.createOrUpdateRecord():                           
    7684                                self._no_files_ingested += 1 
     85                                 
     86                         
    7787                except: 
     88                         
     89                        #if error encountered, add to failure lisr 
     90                        logging.error("Could not update: " + filename) 
     91                         
     92                        originalRecordFilename = self.inputFileOrigFinal[shortFilename] 
     93                        self.updateFailList.append(originalRecordFilename) 
     94                         
    7895                        logging.error("Exception thrown - detail: ") 
    7996                        logging.error(sys.exc_info()) 
     
    216233                if datacentre is None: 
    217234                        self.usage() 
     235                         
     236                #create list to to hold files ingest failed on. 
     237                self.updateFailList = [] 
    218238                 
    219239                # create file utils object to do various file related stuff 
     
    271291                #Execute the script which processes/renames the files (changed 08/01/07 to get id from inside file) 
    272292                # - also replace any namespace declarations with a standard one which we know works in NDG 
    273                 # NB, this copies files from the original dir to the discovery dir 
     293                # NB, this copies files from the original dir to the discovery dir               
     294                self.inputFileOrigFinal = {} 
     295                 
    274296                logging.info(self.lineSeparator) 
    275297                logging.info("Renaming files:") 
     298         
    276299                for filename in os.listdir(originals_dir): 
    277                         if filename.endswith('.xml'): 
     300                        if filename.endswith('.xml'):                            
    278301                                original_filename = originals_dir + filename 
     302                                                                 
    279303                                try: 
    280304                                        ident=self.getID(original_filename) 
     305                                         
    281306                                except Exception, detail: 
    282307                                        logging.error("Could not retrieve ID from file, %s" %filename) 
     
    291316                                                ident = ident.replace("/","-") 
    292317                                                new_filename = discovery_dir + "/" +self._datacentre_namespace+ "__"+self._datacentre_format+ "__"+ ident +".xml" 
     318                                                new_filename_short = self._datacentre_namespace+ "__"+self._datacentre_format+ "__"+ ident +".xml" 
    293319                                                logging.info("original file = " + original_filename) 
    294320                                                logging.info("newfile = " + new_filename) 
    295                                  
     321                                                 
     322                                                #create list of all ORIGINAL filenames for ingest reporting (use actual filename) 
     323                                                #this links a derived filename in processing dir with original filename 
     324                                                #get basic filename from the path+filename passed to this function to use as key                 
     325                                                self.inputFileOrigFinal[new_filename_short]=filename 
     326                                                                                                                 
    296327                                # now correct any namespace issues 
    297328                                try: 
     
    305336                        else: 
    306337                                logging.warning('File %s is not xml format. Not processed'  %(filename)) 
     338                                 
     339                         
    307340                 
    308341                logging.info(self.lineSeparator) 
     
    319352                self._getDBConnection() 
    320353                 
     354                #add this to self so can produce list of failed files 
     355                #self.discDir = discovery_dir 
     356                 
    321357                filenames = os.listdir(discovery_dir) 
    322358                for filename in filenames: 
     
    333369                #fileUtils.cleanDir(discovery_dir) 
    334370                 
     371                #create a summary file for each data centre ingest 
     372                data_dir = self._base_dir + "data/" 
     373                recOpFileName = data_dir + datacentre + "_ingestSummary.txt"             
     374                recOpFile = open(recOpFileName,'w') 
     375                 
    335376                logging.info("oai_document_ingest processing complete:") 
     377                 
     378                recOpFile.write("Ingest report for data centre: " + datacentre + "\n") 
     379                recOpFile.write("Ingest date: " + str(date.today()) + "\n") 
     380                recOpFile.write("Original metadata directory: " + self._harvest_home + "\n\n") 
     381                recOpFile.write("PROCESSED " + str(numfilesproc) + "\n") 
     382                recOpFile.write("INGESTED " + str(self._no_files_ingested)  + "\n") 
     383                 
    336384                if self._no_problem_files == 0: 
    337385                        logging.info("All files successfully processed - cleaning harvest directory") 
     
    340388                        logging.error("Problems experienced with %s files" %self._no_problem_files) 
    341389                        logging.error("- harvest directory will not be cleared until these have been fixed and the script has been reran") 
     390                         
     391                        logging.info("INFO: Could not ingest the following files into the Discovery Database: ") 
     392                         
     393                        recOpFile.write("PROBLEM_NUM "  + str(self._no_problem_files)  + "\n") 
     394                         
     395                        for badFile in self.updateFailList: 
     396                                logging.info("INFO: Could not ingest = %s" %badFile) 
     397                                recOpFile.write("PROBLEM_FILE " + badFile + "\n")                                        
    342398                 
    343399                logging.info(self.lineSeparator) 
     
    345401                logging.info("INFO: Number of files ingested = %s" %self._no_files_ingested) 
    346402                logging.info(self.lineSeparator) 
    347                 print "Script finished running." 
    348                  
     403                 
     404                recOpFile.close() 
     405                                 
     406                 
     407                print "\nScript finished running." 
    349408         
    350409if __name__=="__main__": 
  • TI01-discovery/tags/stable-TI01-ingestAutomation_Proglue_upgradesAndReporting/temp/OAIBatch/run_all_ingest.py

    r3869 r4888  
    22"""  
    33""" 
    4 import os, sys, logging 
     4import os, sys, logging,time,string 
    55from oai_document_ingester import oai_document_ingester 
     6 
    67 
    78run_counter = 0 
     
    2122logging.info("Running ingest script for all config files in the current run directory (%s)" %current_dir) 
    2223 
     24#create file for summary report on all ingests 
     25summaryFileName = "data/runAllIngestSummary.txt"         
     26summaryFile = open(summaryFileName,'w')             
    2327 
    24 # iterate over all files in the current directory and process any config ones 
     28#iterate over all files in the current directory and process any config ones 
    2529config_suffix = '_config.properties' 
    2630filenames = os.listdir(current_dir + 'datacentre_config/') 
     31 
    2732for filename in filenames: 
    2833        if filename.endswith(config_suffix): 
    2934            logging.info("Found config file: %s" %filename) 
    30              
     35           
    3136            # get the datacentre from the filename 
    3237            datacentre = filename.replace(config_suffix, '') 
     38            summaryFile.write("\n=====================================================================\n") 
     39            summaryFile.write("Ingest report for data centre: " + datacentre + " at " + str(time.asctime()) + "\n") 
     40                     
    3341            if datacentre.find('backup') > -1: 
    3442                continue 
     
    3947                run_counter += 1 
    4048                oai_document_ingester(datacentre) 
     49             
     50             
    4151            except: 
    4252                logging.error("Exception thrown - detail: ") 
     
    4454                logging.info("Continue processing next datacentre config file...") 
    4555                error_counter +=1 
    46                  
     56                 
     57            #summarise harvest info from report doc now produced by ingester program 
     58            recOpFileName = "data/" + datacentre + "_ingestSummary.txt" 
     59             
     60            try: 
     61                ingest_report_file = open(recOpFileName, "r") 
     62                                      
     63                for line in ingest_report_file.readlines():                     
     64                    words  = string.split(line)                                     
     65                    if len(words) == 0: 
     66                        continue 
     67                    if words[0] == 'PROCESSED':  
     68                        summaryFile.write("Number of processed files: " + words[1] + "\n") 
     69                    if words[0] == 'INGESTED': 
     70                        summaryFile.write("Number of ingested files: " + words[1] + "\n") 
     71                    if words[0] == 'PROBLEM_NUM': 
     72                        summaryFile.write("Number of problem files: " + words[1] + "\n") 
     73                    if words[0] == 'PROBLEM_FILE': 
     74                        summaryFile.write("Problem file name: " + words[1] + "\n") 
     75                                           
     76                    ingest_report_file.close() 
     77                    
     78            except: 
     79                summaryFile.write("Could not extract summary info for " + datacentre + " ingest!!\n") 
     80             
     81             
     82             
     83summaryFile.close() 
     84 
     85if os.path.exists(summaryFileName): 
     86    commandline = "cat " + summaryFileName + " | mail -s 'ignis discovery ingest report' s.j.donegan@rl.ac.uk" 
     87    os.system(commandline) 
     88 
    4789logging.info("run_all_ingest.py complete - processed %s config files" %run_counter) 
     90logging.info("ingest report at: "  + summaryFileName) 
     91 
    4892if error_counter > 0:            
    4993    logging.error("WARNING: %s errors were encountered during the run - check logfiles for more details" %error_counter) 
Note: See TracChangeset for help on using the changeset viewer.