Changeset 5600 for TI01-discovery


Ignore:
Timestamp:
11/08/09 15:14:02 (10 years ago)
Author:
sdonegan
Message:

Debugged ATOM feed ingestion to deal with revised eXist atom architecture

Location:
TI01-discovery/branches/ingestAutomation-upgrade/OAIBatch
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • TI01-discovery/branches/ingestAutomation-upgrade/OAIBatch/abstractdocumentingester.py

    r5582 r5600  
    4343                 
    4444                try: 
    45                         opts, args = getopt.getopt(sys.argv[1:], "vdi") 
     45                        opts, args = getopt.getopt(sys.argv[1:], "vd") 
    4646                except getopt.GetoptError, err: 
    4747                    # print help information and exit: 
     
    7979                 
    8080                print self.lineSeparator 
     81                 
    8182                # NB, this is a slight fudge as cannot get the detailed logging to work 
    8283                # without setting up a new logger here - which means we get two loggers 
     
    398399 
    399400 
    400         def _convertAndIngestFiles(self, originals_dir, discovery_dir, datacentre): 
     401        def _convertAndIngestFiles(self, originals_dir, discovery_dir, datacentre, feed): 
    401402                ''' 
    402403                Convert files from originals dir to discovery one, then 
     
    404405                @param originals_dir: directory to ingest docs from 
    405406                @param discovery_dir: directory to use to process ingested docs 
     407                @param feed: boolean, False if calling func is feedDocumentIngester, True - all other 
    406408                ''' 
    407409                 
     
    412414                #generate a list of files ALREADY in database so can compare with what has been ingested 
    413415                sqlCmd = "select discovery_id from original_document where discovery_id like '%" + self._datacentre_namespace + "%'"             
     416                 
     417                 
    414418                filePresentListArr = self.pgc.runSQLCommand(sqlCmd) 
    415419                filesPresentList=[] 
     
    439443                #will need to be removed. 
    440444                 
    441                 #only do this if not in single file mode (or else wverything else gets deleted!) 
    442                 if self.indFileToIngest == "": 
     445                #only do this if not in single file mode (or else wverything else gets deleted!)                 
     446                if ((self.indFileToIngest == "") & (feed)): 
    443447                        for item in filesPresentList: 
    444448                                logging.info("NEED to DELETE : " + item + " IN ORDER TO SYNCHRONISE INGEST DIRECTORY WITH DATABASE CONTENTS")                    
     
    463467                message = message + "Original metadata directory: " + self._harvest_home + "\n\n" 
    464468                message = message + "TOTAL PROCESSED " + str(numfilesproc) + "\n" 
    465                 message = message + "INGESTED (Updated) " + str(self._no_files_changed)  + "\n" 
    466                 message = message + "INGESTED (Created) " + str(self._no_files_ingested)  + "\n" 
     469                message = message + "INGESTED (Created) " + str(self._no_files_changed)  + "\n" 
     470                message = message + "INGESTED (Updated) " + str(self._no_files_ingested)  + "\n" 
    467471                message = message + "DELETED " + str(self._no_files_deleted)  + "\n" 
    468472                message = message + "PROBLEM FILES " + str(self._no_problem_files)  + "\n" 
  • TI01-discovery/branches/ingestAutomation-upgrade/OAIBatch/feeddocumentingester.py

    r5587 r5600  
    66''' 
    77import os, sys, logging, time, feedparser, datetime 
     8 
     9#TODO take this out for production (fudge to get logging to work.) 
     10logging.basicConfig(level=logging.DEBUG, 
     11                    format='%(asctime)s %(filename)s:%(lineno)d %(levelname)s %(message)s') 
     12 
    813from ndg.common.src.lib.utilities import formatDateYYYYMMDD, YEAR_FORMAT 
    914import ndg.common.src.lib.fileutilities as FileUtilities 
     
    111116                self._setupDataCentreDirs() 
    112117                 
    113                 doc = self.dbClient.getNDGDoc(no.repository, no.schema, no.localID, 
    114                                       targetCollection=dc.DIF_COLLECTION_PATH) 
    115  
    116                 # create a temporary file to allow the ingest to do the various 
    117                 # xquery transforms on 
    118                 difFilename = self.originals_dir + no.localID + '.dif' 
    119                 FileUtilities.createFile(difFilename, doc) 
    120  
    121                 numfilesproc, processingReport = self._convertAndIngestFiles(self.originals_dir, self.discovery_dir, self.dataCentre) 
     118                 
     119                difFilename = self.originals_dir + no.localID + '.xml'           
     120                 
     121                #SJD - encapsulate so catch errors - some problems with feeds. 
     122                try: 
     123                         
     124                        doc = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + self.dbClient.getNDGDoc(no.repository, no.schema, no.localID, 
     125                                      targetCollection=dc.DIF_COLLECTION_PATH + no.repository)                   
     126                         
     127                        FileUtilities.createFile(difFilename, doc)                               
     128                        numfilesproc, processingReport = self._convertAndIngestFiles(self.originals_dir, self.discovery_dir, self.dataCentre, False)                             
     129                        self.record.append(str(time.asctime()) + " Successfully obtained " + no.localID + " and ingested (" + str(numfilesproc) + ") document") 
     130                         
     131                except: 
     132                        self.record.append(str(time.asctime()) + " Could not ingest: " + difFilename + " (id = " + no.localID + " )")    
     133                        logging.error(str(time.asctime()) + " Could not ingest: " + difFilename + " (id = " + no.localID + " )" ) 
     134                         
     135                                         
     136                #self.summaryFile.write(self.summaryLine) 
    122137                 
    123138                #for feed ingester, just log report OP 
    124139                logging.info("----------------------------------------------------------------") 
    125                 logging.info(processingReport)         
    126                 logging.info("Document fully ingested into discovery service") 
     140                #logging.info(processingReport)       # dont need this  
     141                logging.info("Document " + no.localID + " fully ingested into discovery service") 
    127142                logging.info("----------------------------------------------------------------") 
    128  
    129  
     143                 
     144                #return record list of transactions 
     145                 
    130146        def __setupFeedClient(self): 
    131147                ''' 
     
    142158                @param feedUrl: url to the feed to poll 
    143159                ''' 
     160                 
     161                #setup log file for checking history of ingests etc 
     162                self.summaryFileName = "data/FeedIngestSummary.txt"         
     163                self.summaryFile = open(self.summaryFileName,'a')     
     164                 
     165                self.record = [] 
     166                  
     167                 
    144168                # NB, only check the feed every five minutes 
    145169                if time.time() > self.refreshTime: 
     
    149173                        newEntryNumber = len(feed.entries) 
    150174                        if  newEntryNumber > self.entryNumber: 
     175                                 
    151176                                logging.info("New data found - checking if this has been published after specified ingest date...") 
    152177                                 
     
    157182                         
    158183                                self.entryNumber = len(feed.entries) 
    159  
     184                                 
     185                        #write this runs entries to log file 
     186                        for line in self.record:                                 
     187                                self.summaryFile.write(line) 
     188                                 
    160189                        self.refreshTime = time.time() + self.pollInterval 
    161190                        logging.info("- finished polling for new data") 
     
    171200                self.entryNumber = 0 
    172201 
    173                 logging.info("Start polling for atom feed updates") 
    174202                while (1 == 1): 
    175203                        self.processFeed(feedUrl) 
  • TI01-discovery/branches/ingestAutomation-upgrade/OAIBatch/oai_document_ingester.py

    r5583 r5600  
    5454                #os.putenv('PATH', 'C:\\opt\\cygwin\\bin') 
    5555                 
     56 
    5657                self.getConfigDetails(dataCentre) 
    5758                # override default settings with input keyword values, if set 
     
    9899                self._getPostgresDBConnection() 
    99100 
    100                 numfilesproc, processingReport = self._convertAndIngestFiles(self.originals_dir, self.discovery_dir, dataCentre) 
     101                numfilesproc, processingReport = self._convertAndIngestFiles(self.originals_dir, self.discovery_dir, dataCentre, True) 
    101102                 
    102103                outMessage = "OAI Document ingest processing complete:\n" 
Note: See TracChangeset for help on using the changeset viewer.