Change-Id: If95cb839ad81ca2a842ff7f6926847ac3928d8f2 Former-commit-id:db24201469
[formerlybbad83c21a
] [formerly6f60751ec6
] [formerlydb24201469
[formerlybbad83c21a
] [formerly6f60751ec6
] [formerlyc5575f9624
[formerly6f60751ec6
[formerly 77e1a4d8f5237e5fae930c1e00589c752f8b3738]]]] Former-commit-id:c5575f9624
Former-commit-id:62f4f1bafb
[formerly8139e0dfb7
] [formerly 33159773a1764cd4fb517d13a3cff0a11feaa433 [formerly8de539020d
]] Former-commit-id: 094fceec6e1d9989f5e80a4efe1310f8a093b3ef [formerly451eb54a36
] Former-commit-id:f553c93092
115 lines
3.7 KiB
Python
115 lines
3.7 KiB
Python
##
|
|
# This software was developed and / or modified by Raytheon Company,
|
|
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
#
|
|
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
# This software product contains export-restricted data whose
|
|
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
# to non-U.S. persons whether in the United States or abroad requires
|
|
# an export license or other authorization.
|
|
#
|
|
# Contractor Name: Raytheon Company
|
|
# Contractor Address: 6825 Pine Street, Suite 340
|
|
# Mail Stop B8
|
|
# Omaha, NE 68106
|
|
# 402.291.0100
|
|
#
|
|
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
# further licensing information.
|
|
##
|
|
#
|
|
# Name:
|
|
# GuidanceThread.py
|
|
# GFS1-NHD:A8834.0000-SCRIPT;2
|
|
#
|
|
# Status:
|
|
# DELIVERED
|
|
#
|
|
# History:
|
|
# Revision 2 (DELIVERED)
|
|
# Created: 31-JAN-2006 08:35:24 TROJAN
|
|
# Change in naming convention for MOS/LAMP data, added LAMP
|
|
# to plotting module
|
|
#
|
|
# Revision 1 (DELIVERED)
|
|
# Created: 10-JUL-2005 18:23:25 TROJAN
|
|
# spr 6915
|
|
#
|
|
# Change Document History:
|
|
# 1:
|
|
# Change Document: GFS1-NHD_STDR_900
|
|
# Action Date: 21-MAR-2006 15:26:42
|
|
# Relationship Type: In Response to
|
|
# Status: DELIVERED
|
|
# Title: AvnFPS: Creation of guidance TAFs
|
|
#
|
|
#
|
|
# GuidanceThread.py
|
|
# acesses BUFR data
|
|
# Author: George Trojan, SAIC/MDL, May 2005
|
|
# last update: 01/30/06
|
|
|
|
import logging, os, Queue, re, time
|
|
import Avn, AvnParser, EtaData, MosData
|
|
|
|
_Pattern = re.compile(r'[0-9]{8}_[0-9]{4}')
|
|
|
|
_Logger = logging.getLogger(__name__)
|
|
|
|
###############################################################################
|
|
class Server(object):
|
|
WaitTime = 120.0 # time between reads (seconds)
|
|
|
|
def __init__(self, inqueue, outqueue, info):
|
|
self.inqueue = inqueue
|
|
self.outqueue = outqueue
|
|
self.name = info['name']
|
|
self.nhours = int(info['nhours'])
|
|
self.info = info.copy()
|
|
del self.info['name']
|
|
del self.info['nhours']
|
|
del self.info['module']
|
|
self.siteinfo = AvnParser.getAllSiteIds()
|
|
|
|
def __retrieve(self, direct, fname):
|
|
# find data type
|
|
for key in self.info:
|
|
if direct == self.info[key]:
|
|
break
|
|
else:
|
|
return
|
|
idlist = [x for x in self.siteinfo[key] if x]
|
|
path = os.path.join(direct, fname)
|
|
if key == 'eta':
|
|
ids = EtaData.retrieve(path, self.nhours, filter(None, idlist))
|
|
else:
|
|
ids = MosData.retrieve(path, self.nhours, key, filter(None, idlist))
|
|
if ids:
|
|
self.outqueue.put(Avn.Bunch(src=self.name, ident='ALL'))
|
|
|
|
def paths(self):
|
|
return filter(None, self.info.values())
|
|
|
|
def run(self):
|
|
while True:
|
|
lasttime = time.time()
|
|
flist = []
|
|
# optimization
|
|
while True:
|
|
try:
|
|
code, fname, direct = self.inqueue.get(True, 6)
|
|
if code == 0: # end thread
|
|
_Logger.info('Got exit request')
|
|
raise SystemExit
|
|
if _Pattern.match(fname) and (direct, fname) not in flist:
|
|
flist.append((direct, fname))
|
|
except Queue.Empty:
|
|
pass
|
|
if time.time() > lasttime + self.WaitTime:
|
|
break
|
|
try:
|
|
for item in flist:
|
|
self.__retrieve(*item)
|
|
except Exception:
|
|
_Logger.exception('Unexpected error')
|
|
break
|