IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jan 31, 2012, 9:57:07 AM (14 years ago)
Author:
rhenders
Message:

more stats for what is and isn't ingested; improvments when resetting and starting from scratch; moved safe table naming method to mysql class; lots more logging

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippToPsps/jython/dvo.py

    r33177 r33183  
    2929    Constructor
    3030
     31    - sets up logging
     32    - checks we are using the correct DVO
     33    - checks we have up-to-date Images.dat
     34    - checks we have up-to-date SkyTable.fits
     35
    3136    '''
    3237    def __init__(self, logger, doc):
     
    4449        self.correctDvo = self.scratchDb.isThisDvoCurrentlyIngested(self.dvoLocation)
    4550
     51        # using correct DVO, so now get up-to-date versions of Images and SkyTable tables
     52        self.updateMetaTables()
     53
    4654    '''
    4755    Destructor
     
    5260
    5361    '''
     62    Updates two main meta tables, Images and SkyTable
     63    '''
     64    def updateMetaTables(self):
     65
     66        self.loadImages()
     67        self.loadSkyTable()
     68
     69    '''
    5470    Check we are importing the DVO currenly ingested
    5571    '''
     
    6177    '''
    6278    def resetDetections(self):
     79        self.logger.infoPair("Resetting", "just detections")
    6380        self.scratchDb.resetOnlyDetectionDvoTables()
    6481
     
    6784    '''
    6885    def resetAllTables(self):
     86
     87        self.logger.infoPair("Resetting", "all tables")
    6988        self.scratchDb.resetDvoToMysqlTables()
    7089        self.correctDvo = True
     
    8099        # check if we have up-to-date version
    81100        path = self.dvoLocation + "/Images.dat"
    82         if self.scratchDb.alreadyImportedThisDvoTable(path): return
     101        if self.scratchDb.alreadyImportedThisDvoTable(path):
     102            self.logger.infoPair("DVO Images.dat file", "up-to-date")
     103            return
     104       
     105        self.logger.infoSeparator()
     106        self.logger.infoPair("DVO Images.dat file", "NOT up-to-date")
    83107
    84108        # first, delete old dvoMeta table
     
    86110        sql = "DELETE FROM " + self.scratchDb.dvoMetaTable
    87111        self.scratchDb.execute(sql)
    88 
     112        self.scratchDb.optimizeTable(self.scratchDb.dvoMetaTable)
     113   
    89114        self.importFits(
    90115                path,
     
    128153
    129154        path =  self.dvoLocation + "/SkyTable.fits"
    130         if self.scratchDb.alreadyImportedThisDvoTable(path): return
     155        if self.scratchDb.alreadyImportedThisDvoTable(path):
     156            self.logger.infoPair("DVO SkyTable.fits file", "up-to-date")       
     157            return
     158
     159        self.logger.infoSeparator()
     160        self.logger.infoPair("DVO SkyTable.fits file", "NOT up-to-date")       
    131161        self.importFits(
    132162                path,
     
    152182            return False       
    153183
    154         self.logger.infoPair("Finding DVO files for range",
    155                 "RA: %.2f -> %.2f, Dec: %.2f -> %.2f" % (minRa, maxRa, minDec, maxDec))
    156 
    157 
    158184        allRegions = self.scratchDb.getDvoRegionsForThisBox(minRa, maxRa, minDec, maxDec)
    159185        allIngestedRegions = self.scratchDb.getIngestedDvoRegions()
     
    161187        allPopulatedRegions = []
    162188        alreadyIngested = 0
    163         outOfDateIngested = []
     189        regionsIngestedButOutOfDate = []
    164190
    165191        for region in allRegions:
     
    182208           if self.scratchDb.haveOutOfDateVersionOfThisDvoTable(cpmPath) or self.scratchDb.haveOutOfDateVersionOfThisDvoTable(cptPath):
    183209               alreadyIngested = alreadyIngested + 1
    184                outOfDateIngested.append(region)
     210               regionsIngestedButOutOfDate.append(region)
    185211
    186212           regionsToIngest.append(region)
     
    191217
    192218        # now add out-of-date items to purge list
    193         for item in outOfDateIngested: regionsToPurge.append(item)
    194 
    195         self.logger.infoPair("Total DVO regions", "%d" % len(allPopulatedRegions))
    196         self.logger.infoPair("Total DVO regions already ingested", "%d" % alreadyIngested)
    197         self.logger.infoPair("Total DVO out-of-date regions", "%d" % len(outOfDateIngested))
    198         self.logger.infoPair("Total DVO regions to purge", "%d" % len(regionsToPurge))
    199         self.logger.infoPair("Total DVO regions to ingest", "%d" % len(regionsToIngest))
     219        for item in regionsIngestedButOutOfDate: regionsToPurge.append(item)
     220
     221        sizeOfAllPopulatedRegions = self.getFileSizeStr(self.getDiskSizeOfDvoRegions(allPopulatedRegions))
     222        sizeOfRegionsAlreadyIngested = self.getFileSizeStr(self.scratchDb.getTotalSizeOfIngestedDvoFiles())
     223        sizeOfRegionsIngestedButOutOfDate = self.getFileSizeStr(self.getDiskSizeOfDvoRegions(regionsIngestedButOutOfDate))
     224        sizeOfRegionsToPurge = self.getFileSizeStr(self.getDiskSizeOfDvoRegions(regionsToPurge))
     225        sizeOfRegionsToIngest = self.getFileSizeStr(self.getDiskSizeOfDvoRegions(regionsToIngest))
     226
     227        self.logger.infoTitle("DVO Overview")
     228        self.logger.infoPair("RA range", "%.2f -> %.2f" % (minRa, maxRa))
     229        self.logger.infoPair("Dec range", "%.2f -> %.2f" % (minDec, maxDec))
     230        self.logger.infoPair("Total regions", "%d (%s)" % (len(allPopulatedRegions), sizeOfAllPopulatedRegions))
     231        self.logger.infoPair("Total regions already ingested", "%d (%s)" % (alreadyIngested, sizeOfRegionsAlreadyIngested))
     232        self.logger.infoPair("Total out-of-date regions", "%d (%s)" % (len(regionsIngestedButOutOfDate), sizeOfRegionsIngestedButOutOfDate))
     233        self.logger.infoPair("Total regions to purge", "%d (%s)" % (len(regionsToPurge), sizeOfRegionsToPurge))
     234        self.logger.infoPair("Total regions to ingest", "%d (%s)" % (len(regionsToIngest), sizeOfRegionsToIngest))
    200235
    201236
     
    204239    '''
    205240    def purgeRegions(self, regions):
     241
     242        if len(regions) < 1: return
    206243
    207244        self.logger.infoPair("Purging", "%d regions" % len(regions))
     
    237274
    238275    '''
    239     Returns (and reports to log) total size of DVO files ingested to the scratch Db
    240     '''
    241     def getSizeAlreadyIngested(self):
    242 
    243         size = self.scratchDb.getTotalSizeOfIngestedDvoFiles()
    244         self.logger.infoPair("Total size of DVO already ingested", self.getFileSizeStr(size))
    245 
    246 
    247     '''
    248276    Populates dvoDetections and dvoMeta with FITS tables from DVO for the defined region
    249277    Defaults to whole sky if limits are missing
     
    253281        # go no further if we've already partly ingested a different DVO
    254282        if not self.correctDvo: return
     283
     284        self.updateMetaTables()
    255285
    256286        regionsToIngest = []
     
    258288        self.getRegions(regionsToIngest, regionsToPurge, minRa, maxRa, minDec, maxDec)
    259289
    260 
    261         totalSize = self.getDiskSizeOfDvoRegions(regionsToIngest)
    262         self.logger.infoPair("Total size of cpm/cpt files to ingest", self.getFileSizeStr(self.getDiskSizeOfDvoRegions(regionsToIngest)))
    263         self.logger.infoPair("Total size of cpm/cpt files to purge", self.getFileSizeStr(self.getDiskSizeOfDvoRegions(regionsToPurge)))
     290        self.purgeRegions(regionsToPurge)
     291
     292        if len(regionsToIngest) > 0: self.logger.infoSeparator()
     293
     294        # now loop through all regions and ingest to MySQL
    264295        count = 0
    265 
    266         self.purgeRegions(regionsToPurge)
    267 
    268         self.logger.infoSeparator()
    269 
    270         # now loop through all regions and ingest to MySQL
    271296        for region in regionsToIngest:
    272297
     
    274299           cptPath = self.dvoLocation + "/" + region + ".cpt"
    275300
    276            cpmTableName = self.getDatabaseFriendlyTableName(region + ".cpm")
    277            cptTableName = self.getDatabaseFriendlyTableName(region + ".cpt")
     301           cpmTableName = self.scratchDb.getDbFriendlyTableName(region + ".cpm")
     302           cptTableName = self.scratchDb.getDbFriendlyTableName(region + ".cpt")
    278303
    279304           # if we have not already ingested the cpm table, then do it now
    280305           if not self.scratchDb.alreadyImportedThisDvoTable(cpmPath):
    281    
     306   
     307               self.logger.infoTitle("Region: " + region)
     308
    282309               # import cpm table and index
    283310               self.importFits(
     
    372399
    373400    '''
    374     Create Db-friendly table name from file name
    375     '''
    376     def getDatabaseFriendlyTableName(self, file):
    377 
    378         name = file
    379         name = name.replace('.', '_')
    380         name = name.replace('/', '_')
    381 
    382         return name
    383 
    384 
    385     '''
    386401    Imports a FITS file. A regex filter lets you choose which tables to pull from the file
    387402    An optional final argument lets you name the resulatant database table
     
    390405
    391406      self.logger.infoPair("Importing file", path)
    392       self.logger.infoPair("Writing to database table", tableName)
     407      self.logger.debugPair("Writing to database table", tableName)
    393408
    394409      tables = stilts.treads(path)
     
    401416     
    402417          # IPP FITS files are littered with infinities, so remove these
    403           self.logger.infoPair("Removing", "infinity values")
     418          self.logger.debugPair("Removing", "infinity values")
    404419          table = stilts.tpipe(table, cmd='replaceval -Infinity null *')
    405420          table = stilts.tpipe(table, cmd='replaceval Infinity null *')
     
    410425   
    411426              try:
    412                   self.logger.infoPair("          attempt", "%d" % attempts)
     427                  if attempts > 0: self.logger.infoPair("Attempt", "%d" % attempts)
    413428                  table.cmd_keepcols(columns).write(self.scratchDb.url + '#' + tableName)
    414429                  break
    415430              except:
     431                  # wait a few secs then try again
    416432                  time.sleep(2)
    417433                  attempts = attempts + 1
     
    419435          count = count + 1
    420436
    421 
    422       self.logger.infoPair("Finished importing", tableName)
     437      self.logger.debugPair("Finished importing", tableName)
    423438
    424439      return tableName
Note: See TracChangeset for help on using the changeset viewer.