Ejemplo n.º 1
0
    def decode(self):
        #get pil and date-time group
        self._productPil, self._issueTime, linePos, \
          self._completeProductPil = self._getPilAndDTG()

        # If this is a WCL - don't go any further. Run WCL procedure and exit.
        if self._productPil[0:3] == "WCL":
            endpoint = "WCLWatch"
            # build a Java object for the warning
            from com.raytheon.edex.plugin.gfe.watch import WclInfo
            import JUtil
            lines = JUtil.pyValToJavaObj(self._lines)
            warning = WclInfo(long(self._issueTime * 1000),
                              self._completeProductPil, lines, self._notifyGFE)
            from com.raytheon.uf.edex.core import EDEXUtil
            EDEXUtil.getMessageProducer().sendAsync(endpoint, warning)
            LogStream.logEvent("%s forwarded to WCLWatch" % self._productPil)
            return []

        # Determine if this is a segmented product
        segmented = self._determineSegmented(linePos)

        # Get overview text
        if segmented == 1:
            self._overviewText, linePos = self._getOverviewText(linePos)
        else:
            self._overviewText = ''
        LogStream.logDebug("OverviewText: ", self._overviewText)

        #find all UGCs, VTEC strings, and segment text
        ugcVTECList = self._getUGCAndVTECStrings(linePos)

        self._polygon = self._getPolygon(linePos)
        self._storm = self._getStorm(linePos)

        #convert UGC strings into UGC list
        ugcVTECSegText = []
        segCount = 1
        for ugcString, vtecStrings, segText, cities in ugcVTECList:
            purgeTime = None
            self._checkForDTG(ugcString)
            if self._hasDTG:
                purgeTime = ugcString[-7:-1]
            else:
                purgeTime = self._getPurgeTimeStrFromVTEC(vtecStrings)
            vtecList = self._expandVTEC(ugcString, vtecStrings, segCount,
                                        segText, cities, purgeTime)
            segCount = segCount + 1
            for r in vtecList:
                ugcVTECSegText.append(r)
        if len(ugcVTECSegText) == 0:
            LogStream.logVerbose("No VTEC Found in product")
            return

        return ugcVTECSegText
Ejemplo n.º 2
0
    def decode(self):
        #get pil and date-time group
        self._productPil, self._issueTime, linePos,\
          self._completeProductPil  = self._getPilAndDTG()
          
         # If this is a WCL - don't go any further. Run WCL procedure and exit.
        if self._productPil[0:3] == "WCL":
            endpoint = "WCLWatch"
            # build a Java object for the warning
            from com.raytheon.edex.plugin.gfe.wcl import WclInfo
            import JUtil
            lines = JUtil.pyValToJavaObj(self._lines)
            warning = WclInfo(long(self._issueTime * 1000),
                              self._completeProductPil, lines, self._notifyGFE)
            from com.raytheon.uf.edex.core import EDEXUtil
            EDEXUtil.getMessageProducer().sendAsync(endpoint, warning)
            LogStream.logEvent("%s forwarded to WCLWatch" % self._productPil)
            return []
       
        # Determine if this is a segmented product
        segmented = self._determineSegmented(linePos)
 
        # Get overview text
        if segmented == 1:
            self._overviewText, linePos = self._getOverviewText(linePos)      
        else:
            self._overviewText = ''
        LogStream.logDebug("OverviewText: ", self._overviewText)

        #find all UGCs, VTEC strings, and segment text
        ugcVTECList = self._getUGCAndVTECStrings(linePos)       
        
        self._polygon = self._getPolygon(linePos)
        self._storm = self._getStorm(linePos)

        #convert UGC strings into UGC list
        ugcVTECSegText = []
        segCount = 1
        for ugcString, vtecStrings, segText, cities in ugcVTECList:
            purgeTime = None
            self._checkForDTG(ugcString)
            if self._hasDTG:
                purgeTime = self._dtgFromDDHHMM(ugcString[-7:-1])
            else:
                purgeTime = self._getPurgeTimeFromVTEC(vtecStrings)            
            vtecList = self._expandVTEC(ugcString, vtecStrings, segCount,
              segText, cities, purgeTime)
            segCount = segCount + 1
            for r in vtecList:
                ugcVTECSegText.append(r)
        if len(ugcVTECSegText) == 0:
            LogStream.logVerbose("No VTEC Found in product")
            return

        return ugcVTECSegText
Ejemplo n.º 3
0
    def __init__(self,
                 activeTable,
                 activeTableMode,
                 newRecords,
                 offsetSecs=0.0,
                 makeBackups=True,
                 logger=None,
                 atChangeLog=None):
        # activeTable - current activeTable records
        # activeTableMode - which table is being modified--OPERATIONAL or PRACTICE
        # newRecords - records to merge in to activeTable
        # inputIsGZIP (0,1) - remote input file is gzipped
        # offsetSecs - Number of seconds +/- current time
        # makeBackups (False, True) - make backups of previous table
        # logger - python logging object to send all logs to
        if logger is not None:
            self._log = logger
        else:
            self._log = self.__initLogging()

        # get our site
        siteid = siteConfig.GFESUITE_SITEID
        self._ourSite = self._get4ID(siteid)

        # create a dummy name to simplify the file access code in VTECTableUtil
        filePath = os.path.join(EDEXUtil.getEdexData(), "activetable", siteid)
        fileName = os.path.join(filePath, activeTableMode + ".tbl")

        # to ensure time calls are based on Zulu
        os.environ['TZ'] = "GMT0"
        self._time = time.time() + offsetSecs  #present time

        self._makeBackups = makeBackups

        VTECTableUtil.VTECTableUtil.__init__(self, fileName)

        # get the SPC site id from the configuration file
        self._spcSite = JUtil.javaObjToPyVal(
            JavaVTECPartners.getInstance(siteid).getSpcSites("KWNS"))
        self._tpcSite = JUtil.javaObjToPyVal(
            JavaVTECPartners.getInstance(siteid).getTpcSites("KNHC"))

        self._siteFilter = self._getFilterSites()

        self._log.info("MergeVTEC Starting")
        self._log.info("localFN= " + self._activeTableFilename + " sites= " +
                       repr(self._siteFilter))

        #read table to merge
        otherTable = newRecords
        self._log.info("Remote Table size: %d", len(otherTable))

        #read active table
        self._log.info("Active Table size: %d", len(activeTable))

        #save a copy for later backup purposes
        oldActiveTable = copy.deepcopy(activeTable)

        #delete "obsolete" records from our table and the other table
        vts = VTECTableSqueeze.VTECTableSqueeze(self._time)
        activeTable, tossRecords = vts.squeeze(activeTable)
        self._log.info("Active Table squeezed size: %d", len(activeTable))
        self._log.info("Other Table size: %d", len(otherTable))
        otherTable, tossRecordsOther = vts.squeeze(otherTable)
        self._log.info("Other Table squeezed size: %d", len(otherTable))

        #merge the tables
        updatedTable, toDelete, changes = self._mergeTable(
            activeTable, otherTable, atChangeLog)
        self._log.info("Updated Active Table size: %d", len(updatedTable))
        updatedTable, tossRecordsMerged = vts.squeeze(updatedTable)
        self._log.info("Updated Active Table squeeze size: %d",
                       len(updatedTable))
        del vts

        if atChangeLog is not None:
            atChangeLog.info("Entries tossed after merge: " +
                             self.printActiveTable(tossRecordsMerged, 1))

        # determine final changes
        finalChanges = []
        for rec in updatedTable:
            if rec['state'] != 'Existing':
                item = (rec['officeid'], rec['pil'], rec['phensig'],
                        rec['xxxid'])
                if item not in finalChanges:
                    finalChanges.append(item)

        changes = finalChanges
        if atChangeLog is not None:
            atChangeLog.info("Table Changes: " + str(changes))

        self._updatedTable = []
        self._purgedTable = []
        self._changes = []

        #notify the ifpServer of changes, save a backup copy
        if tossRecords or tossRecordsMerged or changes:
            self._log.debug("#tossRecords: %d", len(tossRecords))
            self._log.debug("#tossRecordsMerged: %d", len(tossRecordsMerged))
            self._log.debug("#changes: %d", len(changes))

            # save lists for later retrieval
            self._updatedTable = updatedTable
            self._purgedTable.extend(tossRecords)
            self._purgedTable.extend(toDelete)
            self._purgedTable.extend(
                [rec for rec in tossRecordsMerged if rec in oldActiveTable])
            self._changes = changes

            #save backup copy
            if self._makeBackups:
                oldActiveTable = self._convertTableToPurePython(
                    oldActiveTable, siteid)
                self.saveOldActiveTable(oldActiveTable)
                pTime = getattr(VTECPartners, "VTEC_BACKUP_TABLE_PURGE_TIME",
                                168)
                self.purgeOldSavedTables(pTime)

        self._log.info("MergeVTEC Finished")
Ejemplo n.º 4
0
LocalizationType = LocalizationContext.LocalizationType
LocalizationLevel = LocalizationContext.LocalizationLevel
pathMgr = PathManagerFactory.getPathManager()
ctx = pathMgr.getContext(LocalizationType.valueOf('EDEX_STATIC'),
                         LocalizationLevel.valueOf('BASE'))
DPATH = pathMgr.getFile(ctx, 'dissemination').getPath()
f = open(DPATH + '/rcv_action2codes.txt')
for line in f:
    codeSplit = line.split()
    ACTION_CODES[codeSplit[0]] = codeSplit[1]
f.close()

from com.raytheon.uf.edex.core import EDEXUtil

dataDir = EDEXUtil.getEdexData()
OUT_DIR = dataDir + 'outgoing'
if not os.path.isdir(OUT_DIR):
    os.mkdir(OUT_DIR)
INGEST_DIR = dataDir + 'manual'
INGEST_ROUTE = 'handleoupFilePush'
SITE_ID = EDEXUtil.getEdexSite()


def process(oup, afosID, resp, ackMgr=None, test=False):
    _Logger.info("handleOUP.py received " + str(oup.getFilename()))
    wmoTypeString = ""
    userDateTimeStamp = ""
    msg = ''

    # WMO message type, aka bbb