Merge branch 'master_14.3.1.1' into master_14.3.2

Conflicts:
	cave/com.raytheon.viz.gfe/localization/gfe/userPython/textUtilities/headline/HazardsTable.py
	edexOsgi/com.raytheon.uf.edex.activetable/src/com/raytheon/uf/edex/activetable/ActiveTable.java

Former-commit-id: 9a4751b60e [formerly 8bfe8fb65f [formerly 5aa2c444583d03b442768a8e9ea462877a25bb8d]]
Former-commit-id: 8bfe8fb65f
Former-commit-id: 97be252793
This commit is contained in:
Fay.Liang 2015-03-03 14:26:22 -05:00
commit 548851cad0
11 changed files with 366 additions and 199 deletions

View file

@ -36,6 +36,7 @@
# __warnETNduplication() and
# __highestETNActiveTable.
# 11/11/14 4953 randerso Changed type of endTime from float to int
# 02/05/15 4099 randerso Fixed exception handling in __getActiveTable
#
@ -933,7 +934,7 @@ class HazardsTable(VTECTableUtil.VTECTableUtil):
except:
self.log.exception("Unable to access VTEC Active Table: ")
raise Exception, s
raise
def __createCityHazards(self):
if not self.__accurateCities:

View file

@ -33,7 +33,7 @@
-Dthrift.stream.maxsize=200
-Dviz.memory.warn.threshold=98</vmArgs>
<vmArgsLin>-Xmx1280M -XX:MaxDirectMemorySize=2G</vmArgsLin>
<vmArgsWin>-Dfile.encoding=UTF-8 -Xmx768M</vmArgsWin>
<vmArgsWin>-Dfile.encoding=UTF-8 -Xmx1536M</vmArgsWin>
</launcherArgs>
<windowImages/>

View file

@ -71,7 +71,7 @@
</appender>
<!-- activeTableChange log -->
<appender name="activeTableLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<appender name="activeTableChangeLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-activeTableChange-%d{yyyyMMdd}.log</fileNamePattern>
<maxHistory>30</maxHistory>

View file

@ -6,6 +6,8 @@
## EVAN BOOKBINDER -- SEP 18 2013 Implemented config.vm
## PHIL KURIMSKI -- JUN 26 2014 OB14.2.2-9 ##
## ADDED DSS EVENTS ##
## UPDATED PHIL KURIMSKI -- FEB 18 2015 Implemented##
## updated CTAs ##
#####################################################
#parse("config.vm")
################################################
@ -335,7 +337,7 @@ THIS IS A TEST MESSAGE. ##
THIS IS A TEST MESSAGE. ##
#end
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
...${report}LOCATED ##
...${report}WAS LOCATED ##
#if(${stormType} == "line")
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxMarineNearDistance}, ${overPhrase}, ${maxMarineOverDistance}, ${marineDistanceUnits}, ${useSecondReferenceLine})
#else
@ -406,7 +408,7 @@ THOSE ATTENDING !**event/venue name or location**! ARE IN THE PATH OF ${specialE
## Comment out #parse command below to pull in Dynamic DSS Event Info
## If this feature is utilized, the "specialEvent" bullet (output above) can
## likely be commented out from the impactSevereThunderstormWarning.xml file
## likely be commented out from the impactSpecialMarineWarning.xml file
#parse("dssEvents.vm")
#####################
@ -430,46 +432,46 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
${ashfallCTA}
#if(${list.contains(${bullets}, "genericCTA")})
#if(${stormType} == "line")
AS THUNDERSTORMS MOVE OVER THE WATER...BOATERS CAN EXPECT GUSTY WINDS AND HIGH WAVES. MOVE TO SAFE HARBOR OR STAY CLOSE TO SHORE UNTIL THESE STORMS PASS.
MOVE TO SAFE HARBOR UNTIL HAZARDOUS WEATHER PASSES.
#else
AS THIS THUNDERSTORM MOVES OVER THE WATER...BOATERS CAN EXPECT GUSTY WINDS AND HIGH WAVES. MOVE TO SAFE HARBOR OR STAY CLOSE TO SHORE UNTIL THE STORM PASSES.
#end
#end
#if(${list.contains(${bullets}, "gustyWindsCTA")})
#if(${stormType} == "line")
MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THESE STORMS PASS.
MOVE TO SAFE HARBOR IMMEDIATELY AS GUSTY WINDS AND HIGH WAVES ARE EXPECTED.
#else
MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THIS STORM PASSES.
#end
#end
#if(${list.contains(${bullets}, "hailWindsCTA")})
#if(${stormType} == "line")
MARINERS CAN EXPECT ${windCTA}${hailCTA}...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THESE STORMS PASS.
BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THESE STORMS PASS. ${windCTA}${hailCTA}...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAIN ARE POSSIBLE WITH THESE STORMS.
#else
MARINERS CAN EXPECT ${windCTA}${hailCTA}...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THIS STORM PASSES.
BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THIS STORM PASSES. ${windCTA}${hailCTA}...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAIN ARE POSSIBLE WITH THIS STORM.
#end
#end
#if(${list.contains(${bullets}, "nonThunderstormCTA")})
MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES. BOATERS...ESPECIALLY THOSE UNDER SAIL...SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THE HIGH WINDS SUBSIDE.
SEEK SAFE SHELTER...MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES.
#end
#if(${list.contains(${bullets}, "waterspoutCTA")})
#if(${list.contains(${bullets}, "thunderstorm")})
THUNDERSTORMS CAN PRODUCE SUDDEN WATERSPOUTS. WATERSPOUTS CAN EASILY OVERTURN BOATS AND CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY.
#else
WATERSPOUTS CAN EASILY OVERTURN BOATS AND CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY.
#end
#end
#if(${list.contains(${bullets}, "lightningCTA")})
#if(${stormType} == "line")
FREQUENT LIGHTNING IS OCCURRING WITH THESE STORMS. IF CAUGHT ON THE OPEN WATER STAY BELOW DECK IF POSSIBLE...KEEP AWAY FROM UNGROUNDED METAL OBJECTS.
#else
FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM. IF CAUGHT ON THE OPEN WATER STAY BELOW DECK IF POSSIBLE...KEEP AWAY FROM UNGROUNDED METAL OBJECTS.
#end
#end
#if(${list.contains(${bullets}, "reportCTA")})
REPORT SEVERE WEATHER TO THE COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY. THEY WILL RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE OFFICE.
REPORT SEVERE WEATHER TO THE NATIONAL WEATHER SERVICE OFFICE.
#end
#if(${ctaSelected} == "YES")

View file

@ -5,6 +5,7 @@
Note: Volcano information will not show up in the GUI unless uncommented out
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Phil Kurimski 06-26-2014 added DSS Events
Phil Kurimski 02-18-2015 Updated CTA section
-->
<!-- INCLUDE ALL GEOSPTATIAL INFORMATION FOR THIS PRODUCT
@ -137,13 +138,13 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="specialEvent" bulletText="Special heads-up for large event/venue" parseString="THOSE ATTENDING"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText=" ****** CALLS TO ACTION (CHOOSE 1 OR MORE) ****** " bulletType="title"/>
<bullet bulletName="genericCTA" bulletText="As thunderstorms move over the water.." parseString="OVER THE WATER...BOATERS CAN EXPECT"/>
<bullet bulletName="gustyWindsCTA" bulletText="Mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES..."/>
<bullet bulletName="hailWindsCTA" bulletText="Mariners can expect cta with hail/wind speeds" parseString="MARINERS CAN EXPECT WIND GUSTS"/>
<bullet bulletName="genericCTA" bulletText="Generic CTA" parseString="MOVE TO SAFE HARBOR UNTIL HAZARDOUS WEATHER PASSES"/>
<bullet bulletName="gustyWindsCTA" bulletText="Gusty Winds CTA" parseString="MOVE TO SAFE HARBOR IMMEDIATELY AS GUSTY WINDS AND HIGH WAVES ARE EXPECTED"/>
<bullet bulletName="hailWindsCTA" bulletText="Wind/Hail cta with hail/wind speeds" parseString="DANGEROUS LIGHTNING...AND HEAVY RAIN ARE POSSIBLE"/>
<bullet bulletName="nonThunderstormCTA" bulletText="Non thunderstorm winds - mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES"/>
<bullet bulletName="waterspoutCTA" bulletText="Thunderstorms can produce waterspouts" parseString="THUNDERSTORMS CAN PRODUCE SUDDEN WATERSPOUTS"/>
<bullet bulletName="lightningCTA" bulletText="Frequent lightning" parseString="FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM"/>
<bullet bulletName="reportCTA" bulletText="Report severe wx" parseString="REPORT SEVERE WEATHER TO THE COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY"/>
<bullet bulletName="waterspoutCTA" bulletText="Waterspout CTA" parseString="CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY"/>
<bullet bulletName="lightningCTA" bulletText="Frequent lightning CTA" parseString="FREQUENT LIGHTNING IS OCCURRING WITH"/>
<bullet bulletName="reportCTA" bulletText="Report severe wx" parseString="REPORT SEVERE WEATHER TO THE NATIONAL WEATHER SERVICE"/>
</bullets>
</bulletActionGroup>
<bulletActionGroup action="COR" phen="MA" sig="W">
@ -196,13 +197,13 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="specialEvent" bulletText="Special heads-up for large event/venue" parseString="THOSE ATTENDING"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText=" ****** CALLS TO ACTION (CHOOSE 1 OR MORE) ****** " bulletType="title"/>
<bullet bulletName="genericCTA" bulletText="As thunderstorms move over the water.." parseString="OVER THE WATER...BOATERS CAN EXPECT"/>
<bullet bulletName="gustyWindsCTA" bulletText="Mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES..."/>
<bullet bulletName="hailWindsCTA" bulletText="Mariners can expect cta with hail/wind speeds" parseString="MARINERS CAN EXPECT WIND GUSTS"/>
<bullet bulletName="genericCTA" bulletText="Generic CTA" parseString="MOVE TO SAFE HARBOR UNTIL HAZARDOUS WEATHER PASSES"/>
<bullet bulletName="gustyWindsCTA" bulletText="Gusty Winds CTA" parseString="MOVE TO SAFE HARBOR IMMEDIATELY AS GUSTY WINDS AND HIGH WAVES ARE EXPECTED"/>
<bullet bulletName="hailWindsCTA" bulletText="Wind/Hail cta with hail/wind speeds" parseString="DANGEROUS LIGHTNING...AND HEAVY RAIN ARE POSSIBLE"/>
<bullet bulletName="nonThunderstormCTA" bulletText="Non thunderstorm winds - mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES"/>
<bullet bulletName="waterspoutCTA" bulletText="Thunderstorms can produce waterspouts" parseString="THUNDERSTORMS CAN PRODUCE SUDDEN WATERSPOUTS"/>
<bullet bulletName="lightningCTA" bulletText="Frequent lightning" parseString="FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM"/>
<bullet bulletName="reportCTA" bulletText="Report severe wx" parseString="REPORT SEVERE WEATHER TO THE COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY"/>
<bullet bulletName="waterspoutCTA" bulletText="Waterspout CTA" parseString="CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY"/>
<bullet bulletName="lightningCTA" bulletText="Frequent lightning CTA" parseString="FREQUENT LIGHTNING IS OCCURRING WITH"/>
<bullet bulletName="reportCTA" bulletText="Report severe wx" parseString="REPORT SEVERE WEATHER TO THE NATIONAL WEATHER SERVICE"/>
</bullets>
</bulletActionGroup>
</bulletActionGroups>

View file

@ -6,6 +6,10 @@
## UPDATED BOOKBINDER 9-18-2013 Implemented config.vm
## PHIL KURIMSKI -- JUN 26 2014 OB14.2.2-9 ##
## ADDED DSS EVENTS ##
## UPDATED PHIL KURIMSKI -- FEB 18 2015 Implemented##
## updated CTAs ##
## MIKE REGA - 2-26-2015 removed wind/hail/spout ##
## tags in CAN and EXP ##
#####################################################
#parse("config.vm")
############################################
@ -447,7 +451,7 @@ ${area.name}...
THIS IS A TEST MESSAGE. ##
#end
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
...${report}LOCATED ##
...${report}WAS LOCATED ##
#if(${stormType} == "line")
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxMarineNearDistance}, ${overPhrase}, ${maxMarineOverDistance}, ${marineDistanceUnits}, ${useSecondReferenceLine})
#else
@ -507,7 +511,7 @@ THOSE ATTENDING !**event/venue name or location**! ARE IN THE PATH OF ${specialE
## Comment out #parse command below to pull in Dynamic DSS Event Info
## If this feature is utilized, the "specialEvent" bullet (output above) can
## likely be commented out from the impactSevereThunderstormWarning.xml file
## likely be commented out from the impactSpecialMarineWarningFollowup.xml file
#parse("dssEvents.vm")
#####################
@ -532,46 +536,46 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
${ashfallCTA}
#if(${list.contains(${bullets}, "genericCTA")})
#if(${stormType} == "line")
AS THUNDERSTORMS MOVE OVER THE WATER...BOATERS CAN EXPECT GUSTY WINDS AND HIGH WAVES. MOVE TO SAFE HARBOR OR STAY CLOSE TO SHORE UNTIL THESE STORMS PASS.
MOVE TO SAFE HARBOR UNTIL HAZARDOUS WEATHER PASSES.
#else
AS THIS THUNDERSTORM MOVES OVER THE WATER...BOATERS CAN EXPECT GUSTY WINDS AND HIGH WAVES. MOVE TO SAFE HARBOR OR STAY CLOSE TO SHORE UNTIL THE STORM PASSES.
#end
#end
#if(${list.contains(${bullets}, "gustyWindsCTA")})
#if(${stormType} == "line")
MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THESE STORMS PASS.
MOVE TO SAFE HARBOR IMMEDIATELY AS GUSTY WINDS AND HIGH WAVES ARE EXPECTED.
#else
MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THIS STORM PASSES.
#end
#end
#if(${list.contains(${bullets}, "hailWindsCTA")})
#if(${stormType} == "line")
MARINERS CAN EXPECT ${windCTA}${hailCTA}...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THESE STORMS PASS.
BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THESE STORMS PASS. ${windCTA}${hailCTA}...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAIN ARE POSSIBLE WITH THESE STORMS.
#else
MARINERS CAN EXPECT ${windCTA}${hailCTA}...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THIS STORM PASSES.
BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THIS STORM PASSES. ${windCTA}${hailCTA}...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAIN ARE POSSIBLE WITH THIS STORM.
#end
#end
#if(${list.contains(${bullets}, "nonThunderstormCTA")})
MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES. BOATERS...ESPECIALLY THOSE UNDER SAIL...SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THE HIGH WINDS SUBSIDE.
SEEK SAFE SHELTER...MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES.
#end
#if(${list.contains(${bullets}, "waterspoutCTA")})
THUNDERSTORMS CAN PRODUCE SUDDEN WATERSPOUTS. WATERSPOUTS CAN EASILY OVERTURN BOATS AND CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY.
#if(${list.contains(${bullets}, "thunderstorm")})
THUNDERSTORMS CAN PRODUCE SUDDEN WATERSPOUTS. WATERSPOUTS CAN EASILY OVERTURN BOATS AND CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY.
#else
WATERSPOUTS CAN EASILY OVERTURN BOATS AND CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY.
#end
#end
#if(${list.contains(${bullets}, "lightningCTA")})
FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM. IF CAUGHT ON THE OPEN WATER STAY BELOW DECK IF POSSIBLE...KEEP AWAY FROM UNGROUNDED METAL OBJECTS.
#if(${stormType} == "line")
FREQUENT LIGHTNING IS OCCURRING WITH THESE STORMS. IF CAUGHT ON THE OPEN WATER STAY BELOW DECK IF POSSIBLE...KEEP AWAY FROM UNGROUNDED METAL OBJECTS.
#else
FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM. IF CAUGHT ON THE OPEN WATER STAY BELOW DECK IF POSSIBLE...KEEP AWAY FROM UNGROUNDED METAL OBJECTS.
#end
#end
#if(${list.contains(${bullets}, "reportCTA")})
REPORT SEVERE WEATHER TO THE COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY. THEY WILL RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE OFFICE.
REPORT SEVERE WEATHER TO THE NATIONAL WEATHER SERVICE OFFICE.
#end
#if(${ctaSelected} == "YES")
@ -756,7 +760,7 @@ ${area.name}...
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report}LOCATED ##
AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report}WAS LOCATED ##
#if(${stormType} == "line")
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxMarineNearDistance}, ${overPhrase}, ${maxMarineOverDistance}, ${marineDistanceUnits}, ${useSecondReferenceLine})
#else
@ -822,7 +826,7 @@ THOSE ATTENDING THE !**event/venue name or location**! ARE IN THE PATH OF THIS S
## Comment out #parse command below to pull in Dynamic DSS Event Info
## If this feature is utilized, the "specialEvent" bullet (output above) can
## likely be commented out from the impactSevereThunderstormWarning.xml file
## likely be commented out from the impactSpecialMarineWarningFollowup.xml file
#parse("dssEvents.vm")
#####################
@ -847,46 +851,46 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
${ashfallCTA}
#if(${list.contains(${bullets}, "genericCTA")})
#if(${stormType} == "line")
AS THUNDERSTORMS MOVE OVER THE WATER...BOATERS CAN EXPECT GUSTY WINDS AND HIGH WAVES. MOVE TO SAFE HARBOR OR STAY CLOSE TO SHORE UNTIL THESE STORMS PASS.
MOVE TO SAFE HARBOR UNTIL HAZARDOUS WEATHER PASSES.
#else
AS THIS THUNDERSTORM MOVES OVER THE WATER...BOATERS CAN EXPECT GUSTY WINDS AND HIGH WAVES. MOVE TO SAFE HARBOR OR STAY CLOSE TO SHORE UNTIL THE STORM PASSES.
#end
#end
#if(${list.contains(${bullets}, "gustyWindsCTA")})
#if(${stormType} == "line")
MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THESE STORMS PASS.
MOVE TO SAFE HARBOR IMMEDIATELY AS GUSTY WINDS AND HIGH WAVES ARE EXPECTED.
#else
MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THIS STORM PASSES.
#end
#end
#if(${list.contains(${bullets}, "hailWindsCTA")})
#if(${stormType} == "line")
MARINERS CAN EXPECT ${windCTA}${hailCTA}...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THESE STORMS PASS.
BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THESE STORMS PASS. ${windCTA}${hailCTA}...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAIN ARE POSSIBLE WITH THESE STORMS.
#else
MARINERS CAN EXPECT ${windCTA}${hailCTA}...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THIS STORM PASSES.
BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THIS STORM PASSES. ${windCTA}${hailCTA}...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAIN ARE POSSIBLE WITH THIS STORM.
#end
#end
#if(${list.contains(${bullets}, "nonThunderstormCTA")})
MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES. BOATERS...ESPECIALLY THOSE UNDER SAIL...SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THE HIGH WINDS SUBSIDE.
SEEK SAFE SHELTER...MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES.
#end
#if(${list.contains(${bullets}, "waterspoutCTA")})
THUNDERSTORMS CAN PRODUCE SUDDEN WATERSPOUTS. WATERSPOUTS CAN EASILY OVERTURN BOATS AND CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY.
#if(${list.contains(${bullets}, "thunderstorm")})
THUNDERSTORMS CAN PRODUCE SUDDEN WATERSPOUTS. WATERSPOUTS CAN EASILY OVERTURN BOATS AND CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY.
#else
WATERSPOUTS CAN EASILY OVERTURN BOATS AND CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY.
#end
#end
#if(${list.contains(${bullets}, "lightningCTA")})
FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM. IF CAUGHT ON THE OPEN WATER STAY BELOW DECK IF POSSIBLE...KEEP AWAY FROM UNGROUNDED METAL OBJECTS.
#if(${stormType} == "line")
FREQUENT LIGHTNING IS OCCURRING WITH THESE STORMS. IF CAUGHT ON THE OPEN WATER STAY BELOW DECK IF POSSIBLE...KEEP AWAY FROM UNGROUNDED METAL OBJECTS.
#else
FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM. IF CAUGHT ON THE OPEN WATER STAY BELOW DECK IF POSSIBLE...KEEP AWAY FROM UNGROUNDED METAL OBJECTS.
#end
#end
#if(${list.contains(${bullets}, "reportCTA")})
REPORT SEVERE WEATHER TO THE COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY. THEY WILL RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE OFFICE.
REPORT SEVERE WEATHER TO THE NATIONAL WEATHER SERVICE OFFICE.
#end
#if(${ctaSelected} == "YES")
@ -1023,7 +1027,7 @@ ${area.name}...
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report}LOCATED ##
AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report}WAS LOCATED ##
##Many of the variables passed below are controlled by config.vm
#if(${stormType} == "line")
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxMarineNearDistance}, ${overPhrase}, ${maxMarineOverDistance}, ${marineDistanceUnits}, ${useSecondReferenceLine})
@ -1090,7 +1094,7 @@ THOSE ATTENDING THE !**event/venue name or location**! ARE IN THE PATH OF THIS S
## Comment out #parse command below to pull in Dynamic DSS Event Info
## If this feature is utilized, the "specialEvent" bullet (output above) can
## likely be commented out from the impactSevereThunderstormWarning.xml file
## likely be commented out from the impactSpecialMarineWarningFollowup.xml file
#parse("dssEvents.vm")
#####################
@ -1115,46 +1119,46 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
${ashfallCTA}
#if(${list.contains(${bullets}, "genericCTA")})
#if(${stormType} == "line")
AS THUNDERSTORMS MOVE OVER THE WATER...BOATERS CAN EXPECT GUSTY WINDS AND HIGH WAVES. MOVE TO SAFE HARBOR OR STAY CLOSE TO SHORE UNTIL THESE STORMS PASS.
MOVE TO SAFE HARBOR UNTIL HAZARDOUS WEATHER PASSES.
#else
AS THIS THUNDERSTORM MOVES OVER THE WATER...BOATERS CAN EXPECT GUSTY WINDS AND HIGH WAVES. MOVE TO SAFE HARBOR OR STAY CLOSE TO SHORE UNTIL THE STORM PASSES.
#end
#end
#if(${list.contains(${bullets}, "gustyWindsCTA")})
#if(${stormType} == "line")
MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THESE STORMS PASS.
MOVE TO SAFE HARBOR IMMEDIATELY AS GUSTY WINDS AND HIGH WAVES ARE EXPECTED.
#else
MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THIS STORM PASSES.
#end
#end
#if(${list.contains(${bullets}, "hailWindsCTA")})
#if(${stormType} == "line")
MARINERS CAN EXPECT ${windCTA}${hailCTA}...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THESE STORMS PASS.
BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THESE STORMS PASS. ${windCTA}${hailCTA}...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAIN ARE POSSIBLE WITH THESE STORMS.
#else
MARINERS CAN EXPECT ${windCTA}${hailCTA}...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THIS STORM PASSES.
BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THIS STORM PASSES. ${windCTA}${hailCTA}...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAIN ARE POSSIBLE WITH THIS STORM.
#end
#end
#if(${list.contains(${bullets}, "nonThunderstormCTA")})
MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES. BOATERS...ESPECIALLY THOSE UNDER SAIL...SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THE HIGH WINDS SUBSIDE.
SEEK SAFE SHELTER...MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES.
#end
#if(${list.contains(${bullets}, "waterspoutCTA")})
THUNDERSTORMS CAN PRODUCE SUDDEN WATERSPOUTS. WATERSPOUTS CAN EASILY OVERTURN BOATS AND CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY.
#if(${list.contains(${bullets}, "thunderstorm")})
THUNDERSTORMS CAN PRODUCE SUDDEN WATERSPOUTS. WATERSPOUTS CAN EASILY OVERTURN BOATS AND CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY.
#else
WATERSPOUTS CAN EASILY OVERTURN BOATS AND CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY.
#end
#end
#if(${list.contains(${bullets}, "lightningCTA")})
FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM. IF CAUGHT ON THE OPEN WATER STAY BELOW DECK IF POSSIBLE...KEEP AWAY FROM UNGROUNDED METAL OBJECTS.
#if(${stormType} == "line")
FREQUENT LIGHTNING IS OCCURRING WITH THESE STORMS. IF CAUGHT ON THE OPEN WATER STAY BELOW DECK IF POSSIBLE...KEEP AWAY FROM UNGROUNDED METAL OBJECTS.
#else
FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM. IF CAUGHT ON THE OPEN WATER STAY BELOW DECK IF POSSIBLE...KEEP AWAY FROM UNGROUNDED METAL OBJECTS.
#end
#end
#if(${list.contains(${bullets}, "reportCTA")})
REPORT SEVERE WEATHER TO THE COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY. THEY WILL RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE OFFICE.
REPORT SEVERE WEATHER TO THE NATIONAL WEATHER SERVICE OFFICE.
#end
#if(${ctaSelected} == "YES")
@ -1266,11 +1270,21 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
## Waterspout/Hail/Wind Tags used by CR for IBW
##################################################################
#if(${action}=="CAN" || ${action}=="EXP")
#set($windTag = "")
#set($hailTag = "")
#set($spoutTag = "")
#end
#if($spoutTag.length() > 0)
<L>${spoutTag}</L>
#end
#if($hailTag.length() > 0)
<L>HAIL...${hailTag}IN</L>
#end
#if($windTag.length() > 0)
<L>WIND...${windTag}KTS</L>
#end
$$

View file

@ -5,6 +5,7 @@
Note: Volcano information will not show up in the GUI unless uncommented out
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Phil Kurimski 06-26-2014 added DSS Events
Phil Kurimski 02-18-2015 Updated CTA section
-->
<!-- INCLUDE ALL GEOSPTATIAL INFORMATION FOR THIS PRODUCT
@ -184,13 +185,13 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="specialEvent" bulletText="Special heads-up for large event/venue" parseString="THOSE ATTENDING"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText=" ****** CALLS TO ACTION (CHOOSE 1 OR MORE) ****** " bulletType="title"/>
<bullet bulletName="genericCTA" bulletText="As thunderstorms move over the water.." parseString="OVER THE WATER...BOATERS CAN EXPECT"/>
<bullet bulletName="gustyWindsCTA" bulletText="Mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES..."/>
<bullet bulletName="hailWindsCTA" bulletText="Mariners can expect cta with hail/wind speeds" parseString="MARINERS CAN EXPECT WIND GUSTS"/>
<bullet bulletName="genericCTA" bulletText="Generic CTA" parseString="MOVE TO SAFE HARBOR UNTIL HAZARDOUS WEATHER PASSES"/>
<bullet bulletName="gustyWindsCTA" bulletText="Gusty Winds CTA" parseString="MOVE TO SAFE HARBOR IMMEDIATELY AS GUSTY WINDS AND HIGH WAVES ARE EXPECTED"/>
<bullet bulletName="hailWindsCTA" bulletText="Wind/Hail cta with hail/wind speeds" parseString="DANGEROUS LIGHTNING...AND HEAVY RAIN ARE POSSIBLE"/>
<bullet bulletName="nonThunderstormCTA" bulletText="Non thunderstorm winds - mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES"/>
<bullet bulletName="waterspoutCTA" bulletText="Thunderstorms can produce waterspouts" parseString="THUNDERSTORMS CAN PRODUCE SUDDEN WATERSPOUTS"/>
<bullet bulletName="lightningCTA" bulletText="Frequent lightning" parseString="FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM"/>
<bullet bulletName="reportCTA" bulletText="Report severe wx" parseString="REPORT SEVERE WEATHER TO THE COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY"/>
<bullet bulletName="waterspoutCTA" bulletText="Waterspout CTA" parseString="CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY"/>
<bullet bulletName="lightningCTA" bulletText="Frequent lightning CTA" parseString="FREQUENT LIGHTNING IS OCCURRING WITH"/>
<bullet bulletName="reportCTA" bulletText="Report severe wx" parseString="REPORT SEVERE WEATHER TO THE NATIONAL WEATHER SERVICE"/>
</bullets>
</bulletActionGroup>
<bulletActionGroup action="COR" phen="MA" sig="W">
@ -243,13 +244,13 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="specialEvent" bulletText="Special heads-up for large event/venue" parseString="THOSE ATTENDING"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText=" ****** CALLS TO ACTION (CHOOSE 1 OR MORE) ****** " bulletType="title"/>
<bullet bulletName="genericCTA" bulletText="As thunderstorms move over the water.." parseString="OVER THE WATER...BOATERS CAN EXPECT"/>
<bullet bulletName="gustyWindsCTA" bulletText="Mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES..."/>
<bullet bulletName="hailWindsCTA" bulletText="Mariners can expect cta with hail/wind speeds" parseString="MARINERS CAN EXPECT WIND GUSTS"/>
<bullet bulletName="genericCTA" bulletText="Generic CTA" parseString="MOVE TO SAFE HARBOR UNTIL HAZARDOUS WEATHER PASSES"/>
<bullet bulletName="gustyWindsCTA" bulletText="Gusty Winds CTA" parseString="MOVE TO SAFE HARBOR IMMEDIATELY AS GUSTY WINDS AND HIGH WAVES ARE EXPECTED"/>
<bullet bulletName="hailWindsCTA" bulletText="Wind/Hail cta with hail/wind speeds" parseString="DANGEROUS LIGHTNING...AND HEAVY RAIN ARE POSSIBLE"/>
<bullet bulletName="nonThunderstormCTA" bulletText="Non thunderstorm winds - mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES"/>
<bullet bulletName="waterspoutCTA" bulletText="Thunderstorms can produce waterspouts" parseString="THUNDERSTORMS CAN PRODUCE SUDDEN WATERSPOUTS"/>
<bullet bulletName="lightningCTA" bulletText="Frequent lightning" parseString="FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM"/>
<bullet bulletName="reportCTA" bulletText="Report severe wx" parseString="REPORT SEVERE WEATHER TO THE COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY"/>
<bullet bulletName="waterspoutCTA" bulletText="Waterspout CTA" parseString="CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY"/>
<bullet bulletName="lightningCTA" bulletText="Frequent lightning CTA" parseString="FREQUENT LIGHTNING IS OCCURRING WITH"/>
<bullet bulletName="reportCTA" bulletText="Report severe wx" parseString="REPORT SEVERE WEATHER TO THE NATIONAL WEATHER SERVICE"/>
</bullets>
</bulletActionGroup>
</bulletActionGroups>

View file

@ -6,8 +6,9 @@
## EDITED EVAN BOOKBINDER 2-25-13 FOR IBW 2013 ##
## EDITED PHIL KURIMSKI 5-20-13 FOR UPDATED IMPACT STATEMENTS ##
## EDITED PHIL KURIMSKI 9-17-13 FOR SMW IMPACT STATEMENTS ##
## EDITED EvAN BOOKBINDER 2-18-14 FOR 2014 IMPACT STATEMENTS ##
## EDITED EVAN BOOKBINDER 2-18-14 FOR 2014 IMPACT STATEMENTS ##
## EDITED PHIL KURIMSKI 6-26-15 FIXED CONSID IMPCT VARIABLE ##
## EDITED PHIL KURIMSKI 2-19-15 UPDATED SMW IMPACT STATEMENTS ##
################################################################
##
################################################################
@ -114,7 +115,63 @@
################################################################
## Finally create the Impact Statements for the SMW template
################################################################
#set($smwimpact = "OVERTURNED AND CAPSIZED BOATS.")
###################################################
## HANDLE HAIL POSSIBILITIES ######################
###################################################
#set($smwHailImpact = "")
#set($hailAppend = "")
#if($hailTag == ">.75")
#set($smwHailImpact = "LARGE HAIL COULD RESULT IN STRUCTURAL DAMAGE.")
#set($hailAppend = " AND HAIL")
#end
#if($hailTag == ">2.0")
#set($smwHailImpact = "LARGE HAIL COULD RESULT IN PERSONAL INJURY AND SIGNIFICANT STRUCTURAL DAMAGE.")
#set($hailAppend = " AND HAIL")
#end
###################################################
## HANDLE WIND POSSIBILITIES ######################
###################################################
#set($smwWindImpact = "")
#if(${windTag} == ">34" || ${windTag} == "40" || ${windTag} == "49")
#set($smwWindImpact = "SMALL CRAFT COULD BE DAMAGED IN BRIEFLY HIGHER WINDS AND SUDDENLY HIGHER WAVES.")
#end
## If winds are 50 knots or greater do not include hail impact statement
#if(${windTag} == "50" || ${windTag} == "65")
#set($smwWindImpact = "BOATS COULD SUFFER SIGNIFICANT STRUCTURAL DAMAGE IN HIGH WINDS${hailAppend}. SMALL CRAFT COULD CAPSIZE IN SUDDENLY HIGHER WAVES.")
#set($smwHailImpact = "")
#end
###################################################
## HANDLE WATERSPOUTS #############################
###################################################
#set($smwWaterspoutImpact = "")
#if(${list.contains(${bullets}, "thunderstorm")})
#set($extraImpact = "EASILY OVERTURN BOATS AND ")
#else
#set($extraImpact = "")
#end
#if(${list.contains(${bullets}, "sightedSpout")} || ${list.contains(${bullets}, "possibleSpout")})
#set($smwWaterspoutImpact = "WATERSPOUTS CAN ${extraImpact}CREATE LOCALLY HAZARDOUS SEAS.")
#end
##########################################################
## Merge the Hail...Wind and Waterspout Impact Statements
##########################################################
#if($smwWindImpact.length() > 0 && $smwHailImpact.length() > 0 && $smwWaterspoutImpact.length() > 0)
#set($smwimpact = "${smwWaterspoutImpact} ${smwWindImpact} ${smwHailImpact}")
#elseif($smwWindImpact.length() > 0 && $smwHailImpact.length() > 0)
#set($smwimpact = "${smwWindImpact} ${smwHailImpact}")
#elseif($smwWindImpact.length() > 0 && $smwWaterspoutImpact.length() > 0)
#set($smwimpact = "${smwWaterspoutImpact} ${smwWindImpact}")
#elseif($smwHailImpact.length() > 0 && $smwWaterspoutImpact.length() > 0)
#set($smwimpact = "${smwWaterspoutImpact} ${smwHailImpact}")
#elseif($smwWaterspoutImpact.length() > 0)
#set($smwimpact = "${smwWaterspoutImpact}")
#elseif($smwWindImpact.length() > 0)
#set($smwimpact = "${smwWindImpact}")
#elseif($smwHailImpact.length() > 0)
#set($smwimpact = "${smwHailImpact}")
#else
#set($smwimpact = "!**YOU DID NOT SELECT ANY THREATS WORTHY OF SMW CRITERIA. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING!**!")
#end
############################################################################
## End of File
############################################################################

View file

@ -60,6 +60,10 @@ import com.raytheon.uf.common.util.CollectionUtil;
import com.raytheon.uf.common.util.FileUtil;
import com.raytheon.uf.edex.core.EDEXUtil;
import com.raytheon.uf.edex.database.DataAccessLayerException;
import com.raytheon.uf.edex.database.cluster.ClusterLockUtils;
import com.raytheon.uf.edex.database.cluster.ClusterLockUtils.LockState;
import com.raytheon.uf.edex.database.cluster.ClusterTask;
import com.raytheon.uf.edex.database.cluster.handler.CurrentTimeClusterLockHandler;
import com.raytheon.uf.edex.database.dao.CoreDao;
import com.raytheon.uf.edex.database.dao.DaoConfig;
import com.raytheon.uf.edex.database.query.DatabaseQuery;
@ -97,6 +101,9 @@ import com.raytheon.uf.edex.database.query.DatabaseQuery;
* Pass issuance site id to getActiveTable()
* in updateActiveTable() so records will
* be updated correctly.
* Feb 05, 2015 4099 randerso Fixed latest ETN query for year-end
* Feb 23, 2015 4127 dgilling Use cluster locking to only allow 1 active
* table write at a time.
*
* </pre>
*
@ -111,6 +118,10 @@ public class ActiveTable {
private static final Logger changeLog = Logger
.getLogger("ActiveTableChange");
private static final String ACTIVE_TABLE_LOCK_NAME = "ActiveTableWriteLock";
private static final long DEFAULT_LOCK_TIMEOUT = 5 * TimeUtil.MILLIS_PER_MINUTE;
private static ThreadLocal<PythonScript> threadLocalPythonScript = new ThreadLocal<PythonScript>() {
/*
@ -285,7 +296,7 @@ public class ActiveTable {
*/
private void updateActiveTable(String siteId,
List<ActiveTableRecord> newRecords, float offsetSecs) {
if (newRecords.size() > 0) {
if (!newRecords.isEmpty()) {
ActiveTableMode mode = ActiveTableMode.PRACTICE;
if (newRecords.get(0) instanceof OperationalActiveTableRecord) {
mode = ActiveTableMode.OPERATIONAL;
@ -296,36 +307,67 @@ public class ActiveTable {
IPerformanceStatusHandler perfStat = PerformanceStatus
.getHandler("ActiveTable");
ITimer timer = TimeUtil.getTimer();
timer.start();
List<ActiveTableRecord> activeTable = getActiveTable(issueSiteId, mode);
timer.stop();
perfStat.logDuration("getActiveTable", timer.getElapsedTime());
MergeResult result = null;
ClusterTask writeLock = null;
try {
boolean logFirst = true;
timer.start();
do {
if (logFirst) {
statusHandler
.info("updateActiveTable() waiting on lock ["
+ ACTIVE_TABLE_LOCK_NAME + ":"
+ mode.toString() + "].");
logFirst = false;
}
writeLock = ClusterLockUtils.lock(ACTIVE_TABLE_LOCK_NAME,
mode.toString(), new CurrentTimeClusterLockHandler(
DEFAULT_LOCK_TIMEOUT, false), true);
} while (!writeLock.getLockState().equals(LockState.SUCCESSFUL));
statusHandler
.info("updateActiveTable() obtained lock ["
+ ACTIVE_TABLE_LOCK_NAME + ":"
+ mode.toString() + "].");
timer.stop();
perfStat.logDuration("getLock", timer.getElapsedTime());
// get decoder sites to see if we need to backup active table
Set<String> decoderSites = getDecoderSites(siteId);
// if any new record is from one of the decoder sites
// we need to queue a backup
for (ActiveTableRecord rec : newRecords) {
if (decoderSites.contains(rec.getOfficeid())) {
ActiveTableBackup.queue(mode, activeTable);
break;
timer.reset();
timer.start();
List<ActiveTableRecord> activeTable = getActiveTable(
issueSiteId, mode);
timer.stop();
perfStat.logDuration("getActiveTable", timer.getElapsedTime());
// get decoder sites to see if we need to backup active table
Set<String> decoderSites = getDecoderSites(siteId);
// if any new record is from one of the decoder sites
// we need to queue a backup
for (ActiveTableRecord rec : newRecords) {
if (decoderSites.contains(rec.getOfficeid())) {
ActiveTableBackup.queue(mode, activeTable);
break;
}
}
timer.reset();
timer.start();
result = filterTable(siteId, activeTable, newRecords, mode,
offsetSecs);
timer.stop();
perfStat.logDuration("filterTable", timer.getElapsedTime());
timer.reset();
timer.start();
updateTable(siteId, result, mode);
timer.stop();
perfStat.logDuration("updateTable", timer.getElapsedTime());
} finally {
if (writeLock != null) {
statusHandler.info("updateActiveTable() released lock ["
+ ACTIVE_TABLE_LOCK_NAME + ":" + mode.toString()
+ "].");
ClusterLockUtils.unlock(writeLock, true);
}
}
timer.reset();
timer.start();
MergeResult result = filterTable(siteId, activeTable, newRecords,
mode, offsetSecs);
timer.stop();
perfStat.logDuration("filterTable", timer.getElapsedTime());
timer.reset();
timer.start();
updateTable(siteId, result, mode);
timer.stop();
perfStat.logDuration("updateTable", timer.getElapsedTime());
if (result.changeList.size() > 0) {
if (!result.changeList.isEmpty()) {
sendNotification(mode, result.changeList, "VTECDecoder");
}
}
@ -403,29 +445,28 @@ public class ActiveTable {
ActiveTableMode mode, String phensigList, String action,
String etn, Calendar currentTime, boolean requestValidTimes,
boolean latestEtn) {
synchronized (ActiveTable.class) {
DatabaseQuery query = null;
CoreDao dao = null;
DatabaseQuery query = null;
CoreDao dao = null;
if (mode.equals(ActiveTableMode.OPERATIONAL)) {
query = new DatabaseQuery(OperationalActiveTableRecord.class);
dao = operationalDao;
} else {
query = new DatabaseQuery(PracticeActiveTableRecord.class);
dao = practiceDao;
}
if (mode.equals(ActiveTableMode.OPERATIONAL)) {
query = new DatabaseQuery(OperationalActiveTableRecord.class);
dao = operationalDao;
} else {
query = new DatabaseQuery(PracticeActiveTableRecord.class);
dao = practiceDao;
}
if (phensigList != null) {
query.addQueryParam("phensig", phensigList, "in");
}
if (phensigList != null) {
query.addQueryParam("phensig", phensigList, "in");
}
if (action != null) {
query.addQueryParam("act", action, "in");
}
if (action != null) {
query.addQueryParam("act", action, "in");
}
if (etn != null) {
query.addQueryParam("etn", etn, "in");
}
if (etn != null) {
query.addQueryParam("etn", etn, "in");
}
if (requestValidTimes && (currentTime != null)) {
// Current Time
@ -439,18 +480,29 @@ public class ActiveTable {
query.addOrder("etn", false);
query.setMaxResults(1);
}
query.addQueryParam("officeid", siteId, "in");
List<ActiveTableRecord> result = null;
try {
result = (List<ActiveTableRecord>) dao.queryByCriteria(query);
} catch (DataAccessLayerException e) {
statusHandler.handle(Priority.PROBLEM,
"Error querying active table for site " + siteId, e);
}
return result;
if (requestValidTimes && currentTime != null) {
// Current Time
query.addQueryParam("endTime", currentTime, "greater_than");
}
if (latestEtn && currentTime != null) {
Calendar yearStart = Calendar.getInstance();
yearStart.set(currentTime.get(Calendar.YEAR), Calendar.JANUARY, 1,
0, 0);
query.addQueryParam("issueTime", yearStart, "greater_than");
query.addOrder("etn", false);
query.setMaxResults(1);
}
query.addQueryParam("officeid", siteId, "in");
List<ActiveTableRecord> result = null;
try {
result = (List<ActiveTableRecord>) dao.queryByCriteria(query);
} catch (DataAccessLayerException e) {
statusHandler.handle(Priority.PROBLEM,
"Error querying active table for site " + siteId, e);
}
return result;
}
/**
@ -463,23 +515,12 @@ public class ActiveTable {
*/
private static void updateTable(String siteId, MergeResult changes,
ActiveTableMode mode) {
synchronized (ActiveTable.class) {
List<ActiveTableRecord> updated = changes.updatedList;
List<ActiveTableRecord> purged = changes.purgedList;
List<ActiveTableRecord> updated = changes.updatedList;
List<ActiveTableRecord> purged = changes.purgedList;
CoreDao dao = null;
if (mode.equals(ActiveTableMode.OPERATIONAL)) {
dao = operationalDao;
} else {
dao = practiceDao;
}
for (ActiveTableRecord update : updated) {
dao.saveOrUpdate(update);
}
for (ActiveTableRecord delete : purged) {
dao.delete(delete);
}
}
CoreDao dao = (ActiveTableMode.OPERATIONAL.equals(mode)) ? operationalDao
: practiceDao;
dao.bulkSaveOrUpdateAndDelete(updated, purged);
}
/**
@ -550,22 +591,23 @@ public class ActiveTable {
ActiveTableMode tableName, List<ActiveTableRecord> newRecords,
float timeOffset, boolean makeBackup, boolean runIngestAT,
String xmlSource) throws JepException {
String scriptName = runIngestAT ? "ingestAT.py" : "MergeVTEC.py";
IPathManager pathMgr = PathManagerFactory.getPathManager();
LocalizationContext commonCx = pathMgr.getContext(
LocalizationType.COMMON_STATIC, LocalizationLevel.BASE);
String scriptPath = pathMgr.getFile(commonCx,
FileUtil.join(ActiveTablePyIncludeUtil.VTEC, scriptName))
.getPath();
String pythonIncludePath = PyUtil.buildJepIncludePath(
ActiveTablePyIncludeUtil.getCommonPythonIncludePath(),
ActiveTablePyIncludeUtil.getVtecIncludePath(siteId),
ActiveTablePyIncludeUtil.getGfeConfigIncludePath(siteId),
ActiveTablePyIncludeUtil.getIscScriptsIncludePath());
MergeResult result = null;
PythonScript script = null;
ClusterTask writeLock = null;
try {
String scriptName = runIngestAT ? "ingestAT.py" : "MergeVTEC.py";
IPathManager pathMgr = PathManagerFactory.getPathManager();
LocalizationContext commonCx = pathMgr.getContext(
LocalizationType.COMMON_STATIC, LocalizationLevel.BASE);
String scriptPath = pathMgr.getFile(commonCx,
FileUtil.join(ActiveTablePyIncludeUtil.VTEC, scriptName))
.getPath();
String pythonIncludePath = PyUtil.buildJepIncludePath(
ActiveTablePyIncludeUtil.getCommonPythonIncludePath(),
ActiveTablePyIncludeUtil.getVtecIncludePath(siteId),
ActiveTablePyIncludeUtil.getGfeConfigIncludePath(siteId),
ActiveTablePyIncludeUtil.getIscScriptsIncludePath());
try {
script = new PythonScript(scriptPath, pythonIncludePath,
ActiveTable.class.getClassLoader());
@ -575,6 +617,23 @@ public class ActiveTable {
throw e;
}
boolean logFirst = true;
do {
if (logFirst) {
statusHandler.info("mergeRemoteTable() waiting on lock ["
+ ACTIVE_TABLE_LOCK_NAME + ":"
+ tableName.toString() + "].");
logFirst = false;
}
writeLock = ClusterLockUtils.lock(ACTIVE_TABLE_LOCK_NAME,
tableName.toString(),
new CurrentTimeClusterLockHandler(DEFAULT_LOCK_TIMEOUT,
false), true);
} while (!writeLock.getLockState().equals(LockState.SUCCESSFUL));
statusHandler.info("mergeRemoteTable() obtained lock ["
+ ACTIVE_TABLE_LOCK_NAME + ":" + tableName.toString()
+ "].");
try {
String site4Char = SiteMap.getInstance().getSite4LetterId(
siteId);
@ -597,18 +656,26 @@ public class ActiveTable {
"Error merging active table", e);
throw e;
}
if (result != null) {
updateTable(siteId, result, tableName);
}
} finally {
if (writeLock != null) {
statusHandler.info("mergeRemoteTable() released lock ["
+ ACTIVE_TABLE_LOCK_NAME + ":" + tableName.toString()
+ "].");
ClusterLockUtils.unlock(writeLock, true);
}
if (script != null) {
script.dispose();
script = null;
}
}
if (result != null) {
updateTable(siteId, result, tableName);
if (!result.changeList.isEmpty()) {
sendNotification(tableName, result.changeList, "MergeVTEC");
}
if ((result != null) && (!result.changeList.isEmpty())) {
sendNotification(tableName, result.changeList, "MergeVTEC");
}
}

View file

@ -31,6 +31,7 @@
# 06/17/13 #3296 randerso Moved active table backup and purging
# to a separate thread in java.
# Added performance logging
# 02/05/15 #4099 randerso Changed log level of year-end issuance tweak
#
import time
@ -119,7 +120,7 @@ class ActiveTable(VTECTableUtil.VTECTableUtil):
if oldYear < newYear:
if (newR['act'] == "EXP" and newR['endTime'] == oldR['endTime']) or \
self.__overlaps((oldR['startTime'],oldR['endTime']), (newR['startTime'],newR['endTime'])):
LogStream.logVerbose("Reset issuance time to last year:",
LogStream.logEvent("Reset issuance time to last year:",
"\nNewRec: ", self.printEntry(newR),
"OldRec: ", self.printEntry(oldR))
newR['issueTime'] = lastYearIssueTime

View file

@ -101,6 +101,7 @@ import com.raytheon.uf.edex.database.query.DatabaseQuery;
* Dec 13, 2013 2555 rjpeter Added processByCriteria and fixed Generics warnings.
* Jan 23, 2014 2555 rjpeter Updated processByCriteria to be a row at a time using ScrollableResults.
* Apr 23, 2014 2726 rjpeter Updated processByCriteria to throw exceptions back up to caller.
* Feb 23, 2015 4127 dgilling Added bulkSaveOrUpdateAndDelete().
* </pre>
*
* @author bphillip
@ -1143,4 +1144,26 @@ public class CoreDao extends HibernateDaoSupport {
return getSessionFactory().getClassMetadata(daoClass);
}
}
/**
* Updates/saves a set of records and deletes a set of records in the
* database in a single transaction.
*
* @param updates
* Records to update or add.
* @param deletes
* Records to delete.
*/
public void bulkSaveOrUpdateAndDelete(
final Collection<? extends Object> updates,
final Collection<? extends Object> deletes) {
txTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
HibernateTemplate ht = getHibernateTemplate();
ht.saveOrUpdateAll(updates);
ht.deleteAll(deletes);
}
});
}
}