Omaha #3600 Update radar inventory scripts to DAF

Change-Id: I9b410e61db6dc9edd60cd1c0ec225bf3aa0daf51

Former-commit-id: ac8c4c17f2 [formerly 5a6aec3edc] [formerly 6966d7d7c5] [formerly d93009bd8d [formerly 6966d7d7c5 [formerly 1f780ff45f48936320853c793a4a5e85aa4ed588]]]
Former-commit-id: d93009bd8d
Former-commit-id: a25650518df9f25adda2190246a9f71c55325686 [formerly d3f7d1216b]
Former-commit-id: c59033f918
This commit is contained in:
Nathan Bowler 2014-11-03 13:14:28 -05:00
parent d05845f539
commit 90501c9615
2 changed files with 338 additions and 113 deletions

View file

@ -1,4 +1,23 @@
#!/bin/csh
##
# 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.
##
#
# A script wrapper that is meant to get inventories of radar data
# from the A-II database. The data is output to stdout as ASCII.
@ -50,8 +69,19 @@
# primary tilt angles for a range of tilts. When tilt angles are returned
# with a time inventory, then these are the actual tilt angle of the
# data received.
#
#
# Gets inventories of radar grid data from the A-II database. The data is
# output to stdout as ASCII. Inventories are limited to Radial and Raster
# formats.
#
# SOFTWARE HISTORY
#
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 2014-10-28 3600 nabowle Initial modification. Call DAF properly.
#
#
set rmpy = yes
if ( "$1" == "p" ) then
set rmpy = no
@ -89,12 +119,53 @@ else
bash -c "echo could not find a2invradStub.py 1>&2"
exit
endif
set rrr = `echo $1 | grep '[a-z][a-z][a-z][a-z]'`
if ( "$rrr" != "" ) shift
set lastcmd = cat
#
# Determine if we are using the data access framework or the uEngine.
#
grep DataAccessLayer $stubpy >& /dev/null
if ( $status == 0 ) then
set method = "daf"
set mydate = `echo "$1" | grep '.*-.*-'`
set mytime = `echo "$2" | grep ':'`
if ( "$mydate" != "" && "$mytime" != "" ) then
shift
shift
set userargs = "--date ${mydate} --time ${mytime}"
else
set userargs = ""
endif
if ( "$rrr" == "" ) then
#done
else if ( "$1" == "" ) then
set userargs = "$userargs --icao $rrr"
else if ( "$1" == "+" ) then
set userargs = "$userargs --icao $rrr"
if ( -e ./msgCodeSeds.txt ) then
set mctrans = $PWD/msgCodeSeds.txt
else if ( -e $mydir/msgCodeSeds.txt ) then
set mctrans = $mydir/msgCodeSeds.txt
else if ( -e $fxa_home/src/dm/radar/msgCodeSeds.txt ) then
set mctrans = $fxa_home/src/dm/radar/msgCodeSeds.txt
else if ( -e $FXA_HOME/data/msgCodeSeds.txt ) then
set mctrans = $FXA_HOME/data/msgCodeSeds.txt
else
bash -c "echo could not find msgCodeSeds.txt 1>&2"
exit
endif
set lastcmd = "sed -f $mctrans"
else if ( "$2" == "" ) then
set userargs = "$userargs --icao $rrr --productCode $1 --angle 0.0 --outputDate"
else if ( "$2" == "+" ) then
set userargs = "$userargs --icao $rrr --productCode $1 --outputPrimary"
else
set userargs = "$userargs --icao $rrr --productCode $1 --angle $2 --outputTrue --outputDate"
endif
/awips2/python/bin/python $stubpy ${userargs} | $lastcmd
else
#
# Set up the environment we need to run the UEngine.
@ -113,104 +184,101 @@ else
exit
endif
source $ueenv
endif
#
#
set rrr = `echo $1 | grep '[a-z][a-z][a-z][a-z]'`
if ( "$rrr" != "" ) shift
#
# Set range of time we will request this information over, will default to
# essentially forever.
#
set aaa = "1970-01-01 00:00:00.0"
set bbb = "2038-01-01 00:00:00.0"
set mydate = `echo "$1" | grep '.*-.*-'`
set mytime = `echo "$2" | grep ':'`
if ( "$mydate" != "" && "$mytime" != "" ) then
shift
shift
if ( -x ./gtasUtil ) then
set gtasUtil = ./gtasUtil
else if ( -x $mydir/gtasUtil ) then
set gtasUtil = $mydir/gtasUtil
else if ( -x $fxa_home/src/dm/point/gtasUtil ) then
set gtasUtil = $fxa_home/src/dm/point/gtasUtil
else if ( -x $FXA_HOME/bin/gtasUtil ) then
set gtasUtil = $FXA_HOME/bin/gtasUtil
else
bash -c "echo could not find gtasUtil executable 1>&2"
exit
#
# Set range of time we will request this information over, will default to
# essentially forever.
#
set aaa = "1970-01-01 00:00:00.0"
set bbb = "2038-01-01 00:00:00.0"
set mydate = `echo "$1" | grep '.*-.*-'`
set mytime = `echo "$2" | grep ':'`
if ( "$mydate" != "" && "$mytime" != "" ) then
shift
shift
if ( -x ./gtasUtil ) then
set gtasUtil = ./gtasUtil
else if ( -x $mydir/gtasUtil ) then
set gtasUtil = $mydir/gtasUtil
else if ( -x $fxa_home/src/dm/point/gtasUtil ) then
set gtasUtil = $fxa_home/src/dm/point/gtasUtil
else if ( -x $FXA_HOME/bin/gtasUtil ) then
set gtasUtil = $FXA_HOME/bin/gtasUtil
else
bash -c "echo could not find gtasUtil executable 1>&2"
exit
endif
set aaa = `$gtasUtil = $mydate $mytime -60`
set bbb = `$gtasUtil = $mydate $mytime 60`
endif
set aaa = `$gtasUtil = $mydate $mytime -60`
set bbb = `$gtasUtil = $mydate $mytime 60`
#
# Modify the text of special tags in stub to create finalized script.
#
set binary = no
set specpy = /tmp/a2invrad${$}.py
rm -rf $specpy >& /dev/null
touch $specpy
chmod 775 $specpy
if ( "$rrr" == "" ) then
cat $stubpy | grep -v "KKKK" | grep -v "MMMM" | grep -v "EEEE" | \
sed "s/AAAAA/$aaa/g" | sed "s/BBBBB/$bbb/g" | \
grep -v 'Code")' | grep -v 'Time")' | grep -v 'Angle")' \
>> $specpy
else if ( "$1" == "" ) then
cat $stubpy | sed "s/KKKK/$rrr/g" | grep -v "MMMM" | \
sed "s/AAAAA/$aaa/g" | sed "s/BBBBB/$bbb/g" | grep -v 'icao")' | \
sed 's/^.*EEEE.*$//g' | grep -v 'Time")' | grep -v 'Angle")' \
>> $specpy
else if ( "$1" == "+" ) then
cat $stubpy | sed "s/KKKK/$rrr/g" | grep -v "MMMM" | \
sed "s/AAAAA/$aaa/g" | sed "s/BBBBB/$bbb/g" | grep -v 'icao")' | \
sed 's/^.*EEEE.*$//g' | grep -v 'Time")' | grep -v 'Angle")' \
>> $specpy
if ( -e ./msgCodeSeds.txt ) then
set mctrans = $PWD/msgCodeSeds.txt
else if ( -e $mydir/msgCodeSeds.txt ) then
set mctrans = $mydir/msgCodeSeds.txt
else if ( -e $fxa_home/src/dm/radar/msgCodeSeds.txt ) then
set mctrans = $fxa_home/src/dm/radar/msgCodeSeds.txt
else if ( -e $FXA_HOME/data/msgCodeSeds.txt ) then
set mctrans = $FXA_HOME/data/msgCodeSeds.txt
else
bash -c "echo could not find msgCodeSeds.txt 1>&2"
exit
endif
set lastcmd = "sed -f $mctrans"
else if ( "$2" == "" ) then
cat $stubpy | sed "s/KKKK/$rrr/g" | sed "s/MMMM/$1/g" | \
sed "s/AAAAA/$aaa/g" | sed "s/BBBBB/$bbb/g" | grep -v 'icao")' | \
sed 's/EEEE/0.0/g' | grep -v 'Angle")' | grep -v 'Code")' \
>> $specpy
else if ( "$2" == "+" ) then
cat $stubpy | sed "s/KKKK/$rrr/g" | sed "s/MMMM/$1/g" | \
sed "s/AAAAA/$aaa/g" | sed "s/BBBBB/$bbb/g" | grep -v 'icao")' | \
sed 's/^.*EEEE.*$//g' | grep -v 'Time")' | grep -v 'Code")' | \
sed 's/true/primary/g' >> $specpy
else
cat $stubpy | sed "s/KKKK/$rrr/g" | sed "s/MMMM/$1/g" | \
sed "s/AAAAA/$aaa/g" | sed "s/BBBBB/$bbb/g" | grep -v 'icao")' | \
sed "s/EEEE/$2/g" | grep -v 'Code")' >> $specpy
set binary = yes
endif
#
# Submit the temporary python script stripping xml stuff, then remove it
#
if ( "$binary" == "yes" ) then
cd $UE_BIN_PATH
( uengine -r python < $specpy ) |& sed 's|.*</items>.*|@|g' | \
grep -E 'attributes|@' | cut '-d"' -f4 | tr '\n' ' ' | tr '@' '\n' | \
sed 's/00000.*$//g' | sed 's/^ *//g' | sed 's/ *$//g'
else
cd $UE_BIN_PATH
( uengine -r python < $specpy ) |& grep attributes | cut '-d"' -f4 | \
$lastcmd
endif
if ( "$rmpy" == "yes" ) rm -rf $specpy >& /dev/null
endif
#
# Modify the text of special tags in stub to create finalized script.
#
set binary = no
set specpy = /tmp/a2invrad${$}.py
rm -rf $specpy >& /dev/null
touch $specpy
chmod 775 $specpy
set lastcmd = cat
if ( "$rrr" == "" ) then
cat $stubpy | grep -v "KKKK" | grep -v "MMMM" | grep -v "EEEE" | \
sed "s/AAAAA/$aaa/g" | sed "s/BBBBB/$bbb/g" | \
grep -v 'Code")' | grep -v 'Time")' | grep -v 'Angle")' \
>> $specpy
else if ( "$1" == "" ) then
cat $stubpy | sed "s/KKKK/$rrr/g" | grep -v "MMMM" | \
sed "s/AAAAA/$aaa/g" | sed "s/BBBBB/$bbb/g" | grep -v 'icao")' | \
sed 's/^.*EEEE.*$//g' | grep -v 'Time")' | grep -v 'Angle")' \
>> $specpy
else if ( "$1" == "+" ) then
cat $stubpy | sed "s/KKKK/$rrr/g" | grep -v "MMMM" | \
sed "s/AAAAA/$aaa/g" | sed "s/BBBBB/$bbb/g" | grep -v 'icao")' | \
sed 's/^.*EEEE.*$//g' | grep -v 'Time")' | grep -v 'Angle")' \
>> $specpy
if ( -e ./msgCodeSeds.txt ) then
set mctrans = $PWD/msgCodeSeds.txt
else if ( -e $mydir/msgCodeSeds.txt ) then
set mctrans = $mydir/msgCodeSeds.txt
else if ( -e $fxa_home/src/dm/radar/msgCodeSeds.txt ) then
set mctrans = $fxa_home/src/dm/radar/msgCodeSeds.txt
else if ( -e $FXA_HOME/data/msgCodeSeds.txt ) then
set mctrans = $FXA_HOME/data/msgCodeSeds.txt
else
bash -c "echo could not find msgCodeSeds.txt 1>&2"
exit
endif
set lastcmd = "sed -f $mctrans"
else if ( "$2" == "" ) then
cat $stubpy | sed "s/KKKK/$rrr/g" | sed "s/MMMM/$1/g" | \
sed "s/AAAAA/$aaa/g" | sed "s/BBBBB/$bbb/g" | grep -v 'icao")' | \
sed 's/EEEE/0.0/g' | grep -v 'Angle")' | grep -v 'Code")' \
>> $specpy
else if ( "$2" == "+" ) then
cat $stubpy | sed "s/KKKK/$rrr/g" | sed "s/MMMM/$1/g" | \
sed "s/AAAAA/$aaa/g" | sed "s/BBBBB/$bbb/g" | grep -v 'icao")' | \
sed 's/^.*EEEE.*$//g' | grep -v 'Time")' | grep -v 'Code")' | \
sed 's/true/primary/g' >> $specpy
else
cat $stubpy | sed "s/KKKK/$rrr/g" | sed "s/MMMM/$1/g" | \
sed "s/AAAAA/$aaa/g" | sed "s/BBBBB/$bbb/g" | grep -v 'icao")' | \
sed "s/EEEE/$2/g" | grep -v 'Code")' >> $specpy
set binary = yes
endif
#
# Submit the temporary python script stripping xml stuff, then remove it
#
if ( "$method" == "daf" ) then
/awips2/python/bin/python $specpy
else if ( "$binary" == "yes" ) then
cd $UE_BIN_PATH
( uengine -r python < $specpy ) |& sed 's|.*</items>.*|@|g' | \
grep -E 'attributes|@' | cut '-d"' -f4 | tr '\n' ' ' | tr '@' '\n' | \
sed 's/00000.*$//g' | sed 's/^ *//g' | sed 's/ *$//g'
else
cd $UE_BIN_PATH
( uengine -r python < $specpy ) |& grep attributes | cut '-d"' -f4 | \
$lastcmd
endif
if ( "$rmpy" == "yes" ) rm -rf $specpy >& /dev/null
#

View file

@ -1,15 +1,172 @@
import CatalogQuery
##
# 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.
##
query = CatalogQuery.CatalogQuery("radar")
query.addConstraint("icao","KKKK","=")
query.addConstraint("productCode","MMMM","in")
query.addConstraint("primaryElevationAngle","EEEE","=")
query.addConstraint("dataTime","AAAAA",">=")
query.addConstraint("dataTime","BBBBB","<=")
# Gets inventories of radar grid data from the A-II database. The data is
# output to stdout as ASCII. Inventories are limited to Radial and Raster
# formats.
#
# SOFTWARE HISTORY
#
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 2014-10-27 3600 nabowle Initial modification. Convert to DAF.
#
query.setDistinctField("icao")
query.setDistinctField("dataTime")
query.setDistinctField("trueElevationAngle")
query.setDistinctField("productCode")
import argparse
import numpy
import sys
return query.executeWrapped()
from datetime import datetime
from datetime import timedelta
from ufpy.dataaccess import DataAccessLayer
from dynamicserialize.dstypes.com.raytheon.uf.common.time import TimeRange
from dynamicserialize.dstypes.com.raytheon.uf.common.dataplugin.level import Level
def get_args():
parser = argparse.ArgumentParser(conflict_handler="resolve")
parser.add_argument("-h", action="store", dest="host",
help="EDEX server hostname (optional)", metavar="hostname")
parser.add_argument("--icao", action="store", dest="icao",
help="The ICAO (optional)", metavar="icao")
parser.add_argument("--productCode", action="store", dest="productCode",
help="Product Code (optional)", metavar="productCode")
parser.add_argument("--angle", action="store", dest="angle", type=float,
help="The Primary Elevation Angle (optional)",
metavar="angle")
parser.add_argument("--date", action="store", dest="date",
help="A date to find data within a minute of. (optional, --time required if provided)",
metavar="YYYY-MM-DD")
parser.add_argument("--time", action="store", dest="time",
help="A time to find data within a minute of. (optional, --date required if provided)",
metavar="HH:MM")
parser.add_argument("--outputDate", action="store_true",
dest="outputDate", help="Output the datetime (optional)")
parser.add_argument("--outputTrue", action="store_const",
dest="outputAngle", const="true",
help="Output true elevation angle, if relevant. (optional,"
+ " exclusive with --outputPrimary)")
parser.add_argument("--outputPrimary", action="store_const",
dest="outputAngle", const="primary",
help="Output primary elevation angle, if relevant. "
+ "(optional, exclusive with --outputTrue)")
return parser.parse_args()
def main():
user_args = get_args()
if user_args.host:
DataAccessLayer.changeEDEXHost(user_args.host)
if (user_args.date and not user_args.time) or (user_args.time and not user_args.date):
print >> sys.stderr, "date and time must be provided together"
return
# If a time range is provided, results will be filtered based on available times
timeRange = None
if user_args.date:
midRange = datetime.strptime( user_args.date + " " + user_args.time, "%Y-%m-%d %H:%M")
beginRange = midRange - timedelta(0, 60)
endRange = midRange + timedelta(0, 60)
timeRange = TimeRange(beginRange, endRange)
req = create_request(user_args)
if user_args.icao:
if user_args.productCode: # retrieve available times and/or true or primary elevation angles
if timeRange:
tr = timeRange
else:
tr = []
lines = set()
radars = DataAccessLayer.getGridData(req, tr)
for radar in radars:
line = ""
if user_args.outputDate:
line = str(radar.getDataTime()) + ".0"
if user_args.outputAngle:
line += " "
if user_args.outputAngle == "true":
line += "%.1f"%float(radar.getLocationName().split("_")[1])
elif user_args.outputAngle == "primary":
line += radar.getLevel()[0:3] #Trim "TILT"
lines.add(line)
msg = "\n".join(lines)
else: #retrieve available product codes
unfiltered = DataAccessLayer.getAvailableParameters(req)
productCodes = []
for parameter in unfiltered: #filter to just productCodes
if parameter.isdigit():
productCodes.append(parameter)
if timeRange:
unfiltered = productCodes
productCodes = []
for productCode in unfiltered:
req = create_request(user_args)
req.setParameters(productCode)
if data_in_time_range(req, timeRange):
productCodes.append(productCode)
msg = "\n".join(productCodes)
else: # retrieve available icaos
icaos = DataAccessLayer.getAvailableLocationNames(req)
if timeRange:
unfiltered = icaos
icaos = []
for icao in unfiltered:
req = create_request(user_args)
req.addIdentifier("icao", icao)
if data_in_time_range(req, timeRange):
icaos.append(icao)
msg = "\n".join(icaos)
print msg.strip()
def create_request(user_args):
req = DataAccessLayer.newDataRequest("radar")
if user_args.icao:
req.addIdentifier("icao", user_args.icao)
if user_args.productCode:
req.setParameters(user_args.productCode)
if user_args.angle is not None:
level = Level()
level.setLevelonevalue(user_args.angle)
req.setLevels(level)
return req
def data_in_time_range(req, timeRange):
times = DataAccessLayer.getAvailableTimes(req)
for time in times:
if timeRange.contains(time.getValidPeriod()):
return True
return False
if __name__ == '__main__':
main()