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: 5aa2c444583d03b442768a8e9ea462877a25bb8d
This commit is contained in:
commit
9a4751b60e
11 changed files with 366 additions and 199 deletions
|
@ -36,6 +36,7 @@
|
||||||
# __warnETNduplication() and
|
# __warnETNduplication() and
|
||||||
# __highestETNActiveTable.
|
# __highestETNActiveTable.
|
||||||
# 11/11/14 4953 randerso Changed type of endTime from float to int
|
# 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:
|
except:
|
||||||
self.log.exception("Unable to access VTEC Active Table: ")
|
self.log.exception("Unable to access VTEC Active Table: ")
|
||||||
raise Exception, s
|
raise
|
||||||
|
|
||||||
def __createCityHazards(self):
|
def __createCityHazards(self):
|
||||||
if not self.__accurateCities:
|
if not self.__accurateCities:
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
-Dthrift.stream.maxsize=200
|
-Dthrift.stream.maxsize=200
|
||||||
-Dviz.memory.warn.threshold=98</vmArgs>
|
-Dviz.memory.warn.threshold=98</vmArgs>
|
||||||
<vmArgsLin>-Xmx1280M -XX:MaxDirectMemorySize=2G</vmArgsLin>
|
<vmArgsLin>-Xmx1280M -XX:MaxDirectMemorySize=2G</vmArgsLin>
|
||||||
<vmArgsWin>-Dfile.encoding=UTF-8 -Xmx768M</vmArgsWin>
|
<vmArgsWin>-Dfile.encoding=UTF-8 -Xmx1536M</vmArgsWin>
|
||||||
</launcherArgs>
|
</launcherArgs>
|
||||||
|
|
||||||
<windowImages/>
|
<windowImages/>
|
||||||
|
|
|
@ -71,7 +71,7 @@
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
<!-- activeTableChange log -->
|
<!-- 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">
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||||
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-activeTableChange-%d{yyyyMMdd}.log</fileNamePattern>
|
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-activeTableChange-%d{yyyyMMdd}.log</fileNamePattern>
|
||||||
<maxHistory>30</maxHistory>
|
<maxHistory>30</maxHistory>
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
## EVAN BOOKBINDER -- SEP 18 2013 Implemented config.vm
|
## EVAN BOOKBINDER -- SEP 18 2013 Implemented config.vm
|
||||||
## PHIL KURIMSKI -- JUN 26 2014 OB14.2.2-9 ##
|
## PHIL KURIMSKI -- JUN 26 2014 OB14.2.2-9 ##
|
||||||
## ADDED DSS EVENTS ##
|
## ADDED DSS EVENTS ##
|
||||||
|
## UPDATED PHIL KURIMSKI -- FEB 18 2015 Implemented##
|
||||||
|
## updated CTAs ##
|
||||||
#####################################################
|
#####################################################
|
||||||
#parse("config.vm")
|
#parse("config.vm")
|
||||||
################################################
|
################################################
|
||||||
|
@ -335,7 +337,7 @@ THIS IS A TEST MESSAGE. ##
|
||||||
THIS IS A TEST MESSAGE. ##
|
THIS IS A TEST MESSAGE. ##
|
||||||
#end
|
#end
|
||||||
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
|
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
|
||||||
...${report}LOCATED ##
|
...${report}WAS LOCATED ##
|
||||||
#if(${stormType} == "line")
|
#if(${stormType} == "line")
|
||||||
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxMarineNearDistance}, ${overPhrase}, ${maxMarineOverDistance}, ${marineDistanceUnits}, ${useSecondReferenceLine})
|
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxMarineNearDistance}, ${overPhrase}, ${maxMarineOverDistance}, ${marineDistanceUnits}, ${useSecondReferenceLine})
|
||||||
#else
|
#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
|
## Comment out #parse command below to pull in Dynamic DSS Event Info
|
||||||
## If this feature is utilized, the "specialEvent" bullet (output above) can
|
## 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")
|
#parse("dssEvents.vm")
|
||||||
|
|
||||||
#####################
|
#####################
|
||||||
|
@ -430,46 +432,46 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
|
||||||
${ashfallCTA}
|
${ashfallCTA}
|
||||||
|
|
||||||
#if(${list.contains(${bullets}, "genericCTA")})
|
#if(${list.contains(${bullets}, "genericCTA")})
|
||||||
#if(${stormType} == "line")
|
MOVE TO SAFE HARBOR UNTIL HAZARDOUS WEATHER PASSES.
|
||||||
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.
|
|
||||||
|
|
||||||
#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
|
#end
|
||||||
#if(${list.contains(${bullets}, "gustyWindsCTA")})
|
#if(${list.contains(${bullets}, "gustyWindsCTA")})
|
||||||
#if(${stormType} == "line")
|
MOVE TO SAFE HARBOR IMMEDIATELY AS GUSTY WINDS AND HIGH WAVES ARE EXPECTED.
|
||||||
MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THESE STORMS PASS.
|
|
||||||
|
|
||||||
#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
|
#end
|
||||||
#if(${list.contains(${bullets}, "hailWindsCTA")})
|
#if(${list.contains(${bullets}, "hailWindsCTA")})
|
||||||
#if(${stormType} == "line")
|
#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
|
#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
|
||||||
#end
|
#end
|
||||||
#if(${list.contains(${bullets}, "nonThunderstormCTA")})
|
#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
|
#end
|
||||||
#if(${list.contains(${bullets}, "waterspoutCTA")})
|
#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.
|
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
|
#end
|
||||||
#if(${list.contains(${bullets}, "lightningCTA")})
|
#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.
|
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
|
#end
|
||||||
#if(${list.contains(${bullets}, "reportCTA")})
|
#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
|
#end
|
||||||
#if(${ctaSelected} == "YES")
|
#if(${ctaSelected} == "YES")
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
Note: Volcano information will not show up in the GUI unless uncommented out
|
Note: Volcano information will not show up in the GUI unless uncommented out
|
||||||
Phil Kurimski 09-19-2013 added geospatialConfig.xml
|
Phil Kurimski 09-19-2013 added geospatialConfig.xml
|
||||||
Phil Kurimski 06-26-2014 added DSS Events
|
Phil Kurimski 06-26-2014 added DSS Events
|
||||||
|
Phil Kurimski 02-18-2015 Updated CTA section
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<!-- INCLUDE ALL GEOSPTATIAL INFORMATION FOR THIS PRODUCT
|
<!-- 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 bulletName="specialEvent" bulletText="Special heads-up for large event/venue" parseString="THOSE ATTENDING"/>
|
||||||
<bullet bulletText="" bulletType="title"/>
|
<bullet bulletText="" bulletType="title"/>
|
||||||
<bullet bulletText=" ****** CALLS TO ACTION (CHOOSE 1 OR MORE) ****** " 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="genericCTA" bulletText="Generic CTA" parseString="MOVE TO SAFE HARBOR UNTIL HAZARDOUS WEATHER PASSES"/>
|
||||||
<bullet bulletName="gustyWindsCTA" bulletText="Mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES..."/>
|
<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="Mariners can expect cta with hail/wind speeds" parseString="MARINERS CAN EXPECT WIND GUSTS"/>
|
<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="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="waterspoutCTA" bulletText="Waterspout CTA" parseString="CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY"/>
|
||||||
<bullet bulletName="lightningCTA" bulletText="Frequent lightning" parseString="FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM"/>
|
<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 COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY"/>
|
<bullet bulletName="reportCTA" bulletText="Report severe wx" parseString="REPORT SEVERE WEATHER TO THE NATIONAL WEATHER SERVICE"/>
|
||||||
</bullets>
|
</bullets>
|
||||||
</bulletActionGroup>
|
</bulletActionGroup>
|
||||||
<bulletActionGroup action="COR" phen="MA" sig="W">
|
<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 bulletName="specialEvent" bulletText="Special heads-up for large event/venue" parseString="THOSE ATTENDING"/>
|
||||||
<bullet bulletText="" bulletType="title"/>
|
<bullet bulletText="" bulletType="title"/>
|
||||||
<bullet bulletText=" ****** CALLS TO ACTION (CHOOSE 1 OR MORE) ****** " 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="genericCTA" bulletText="Generic CTA" parseString="MOVE TO SAFE HARBOR UNTIL HAZARDOUS WEATHER PASSES"/>
|
||||||
<bullet bulletName="gustyWindsCTA" bulletText="Mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES..."/>
|
<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="Mariners can expect cta with hail/wind speeds" parseString="MARINERS CAN EXPECT WIND GUSTS"/>
|
<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="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="waterspoutCTA" bulletText="Waterspout CTA" parseString="CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY"/>
|
||||||
<bullet bulletName="lightningCTA" bulletText="Frequent lightning" parseString="FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM"/>
|
<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 COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY"/>
|
<bullet bulletName="reportCTA" bulletText="Report severe wx" parseString="REPORT SEVERE WEATHER TO THE NATIONAL WEATHER SERVICE"/>
|
||||||
</bullets>
|
</bullets>
|
||||||
</bulletActionGroup>
|
</bulletActionGroup>
|
||||||
</bulletActionGroups>
|
</bulletActionGroups>
|
||||||
|
|
|
@ -6,6 +6,10 @@
|
||||||
## UPDATED BOOKBINDER 9-18-2013 Implemented config.vm
|
## UPDATED BOOKBINDER 9-18-2013 Implemented config.vm
|
||||||
## PHIL KURIMSKI -- JUN 26 2014 OB14.2.2-9 ##
|
## PHIL KURIMSKI -- JUN 26 2014 OB14.2.2-9 ##
|
||||||
## ADDED DSS EVENTS ##
|
## 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")
|
#parse("config.vm")
|
||||||
############################################
|
############################################
|
||||||
|
@ -447,7 +451,7 @@ ${area.name}...
|
||||||
THIS IS A TEST MESSAGE. ##
|
THIS IS A TEST MESSAGE. ##
|
||||||
#end
|
#end
|
||||||
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
|
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
|
||||||
...${report}LOCATED ##
|
...${report}WAS LOCATED ##
|
||||||
#if(${stormType} == "line")
|
#if(${stormType} == "line")
|
||||||
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxMarineNearDistance}, ${overPhrase}, ${maxMarineOverDistance}, ${marineDistanceUnits}, ${useSecondReferenceLine})
|
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxMarineNearDistance}, ${overPhrase}, ${maxMarineOverDistance}, ${marineDistanceUnits}, ${useSecondReferenceLine})
|
||||||
#else
|
#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
|
## Comment out #parse command below to pull in Dynamic DSS Event Info
|
||||||
## If this feature is utilized, the "specialEvent" bullet (output above) can
|
## 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")
|
#parse("dssEvents.vm")
|
||||||
|
|
||||||
#####################
|
#####################
|
||||||
|
@ -532,46 +536,46 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
|
||||||
${ashfallCTA}
|
${ashfallCTA}
|
||||||
|
|
||||||
#if(${list.contains(${bullets}, "genericCTA")})
|
#if(${list.contains(${bullets}, "genericCTA")})
|
||||||
#if(${stormType} == "line")
|
MOVE TO SAFE HARBOR UNTIL HAZARDOUS WEATHER PASSES.
|
||||||
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.
|
|
||||||
|
|
||||||
#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
|
#end
|
||||||
#if(${list.contains(${bullets}, "gustyWindsCTA")})
|
#if(${list.contains(${bullets}, "gustyWindsCTA")})
|
||||||
#if(${stormType} == "line")
|
MOVE TO SAFE HARBOR IMMEDIATELY AS GUSTY WINDS AND HIGH WAVES ARE EXPECTED.
|
||||||
MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THESE STORMS PASS.
|
|
||||||
|
|
||||||
#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
|
#end
|
||||||
#if(${list.contains(${bullets}, "hailWindsCTA")})
|
#if(${list.contains(${bullets}, "hailWindsCTA")})
|
||||||
#if(${stormType} == "line")
|
#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
|
#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
|
||||||
#end
|
#end
|
||||||
#if(${list.contains(${bullets}, "nonThunderstormCTA")})
|
#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
|
#end
|
||||||
#if(${list.contains(${bullets}, "waterspoutCTA")})
|
#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
|
#end
|
||||||
#if(${list.contains(${bullets}, "lightningCTA")})
|
#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
|
#end
|
||||||
#if(${list.contains(${bullets}, "reportCTA")})
|
#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
|
#end
|
||||||
#if(${ctaSelected} == "YES")
|
#if(${ctaSelected} == "YES")
|
||||||
|
@ -756,7 +760,7 @@ ${area.name}...
|
||||||
#if(${productClass}=="T")
|
#if(${productClass}=="T")
|
||||||
THIS IS A TEST MESSAGE. ##
|
THIS IS A TEST MESSAGE. ##
|
||||||
#end
|
#end
|
||||||
AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report}LOCATED ##
|
AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report}WAS LOCATED ##
|
||||||
#if(${stormType} == "line")
|
#if(${stormType} == "line")
|
||||||
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxMarineNearDistance}, ${overPhrase}, ${maxMarineOverDistance}, ${marineDistanceUnits}, ${useSecondReferenceLine})
|
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxMarineNearDistance}, ${overPhrase}, ${maxMarineOverDistance}, ${marineDistanceUnits}, ${useSecondReferenceLine})
|
||||||
#else
|
#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
|
## Comment out #parse command below to pull in Dynamic DSS Event Info
|
||||||
## If this feature is utilized, the "specialEvent" bullet (output above) can
|
## 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")
|
#parse("dssEvents.vm")
|
||||||
|
|
||||||
#####################
|
#####################
|
||||||
|
@ -847,46 +851,46 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
|
||||||
${ashfallCTA}
|
${ashfallCTA}
|
||||||
|
|
||||||
#if(${list.contains(${bullets}, "genericCTA")})
|
#if(${list.contains(${bullets}, "genericCTA")})
|
||||||
#if(${stormType} == "line")
|
MOVE TO SAFE HARBOR UNTIL HAZARDOUS WEATHER PASSES.
|
||||||
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.
|
|
||||||
|
|
||||||
#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
|
#end
|
||||||
#if(${list.contains(${bullets}, "gustyWindsCTA")})
|
#if(${list.contains(${bullets}, "gustyWindsCTA")})
|
||||||
#if(${stormType} == "line")
|
MOVE TO SAFE HARBOR IMMEDIATELY AS GUSTY WINDS AND HIGH WAVES ARE EXPECTED.
|
||||||
MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THESE STORMS PASS.
|
|
||||||
|
|
||||||
#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
|
#end
|
||||||
#if(${list.contains(${bullets}, "hailWindsCTA")})
|
#if(${list.contains(${bullets}, "hailWindsCTA")})
|
||||||
#if(${stormType} == "line")
|
#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
|
#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
|
||||||
#end
|
#end
|
||||||
#if(${list.contains(${bullets}, "nonThunderstormCTA")})
|
#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
|
#end
|
||||||
#if(${list.contains(${bullets}, "waterspoutCTA")})
|
#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
|
#end
|
||||||
#if(${list.contains(${bullets}, "lightningCTA")})
|
#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
|
#end
|
||||||
#if(${list.contains(${bullets}, "reportCTA")})
|
#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
|
#end
|
||||||
#if(${ctaSelected} == "YES")
|
#if(${ctaSelected} == "YES")
|
||||||
|
@ -1023,7 +1027,7 @@ ${area.name}...
|
||||||
#if(${productClass}=="T")
|
#if(${productClass}=="T")
|
||||||
THIS IS A TEST MESSAGE. ##
|
THIS IS A TEST MESSAGE. ##
|
||||||
#end
|
#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
|
##Many of the variables passed below are controlled by config.vm
|
||||||
#if(${stormType} == "line")
|
#if(${stormType} == "line")
|
||||||
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxMarineNearDistance}, ${overPhrase}, ${maxMarineOverDistance}, ${marineDistanceUnits}, ${useSecondReferenceLine})
|
#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
|
## Comment out #parse command below to pull in Dynamic DSS Event Info
|
||||||
## If this feature is utilized, the "specialEvent" bullet (output above) can
|
## 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")
|
#parse("dssEvents.vm")
|
||||||
|
|
||||||
#####################
|
#####################
|
||||||
|
@ -1115,46 +1119,46 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
|
||||||
${ashfallCTA}
|
${ashfallCTA}
|
||||||
|
|
||||||
#if(${list.contains(${bullets}, "genericCTA")})
|
#if(${list.contains(${bullets}, "genericCTA")})
|
||||||
#if(${stormType} == "line")
|
MOVE TO SAFE HARBOR UNTIL HAZARDOUS WEATHER PASSES.
|
||||||
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.
|
|
||||||
|
|
||||||
#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
|
#end
|
||||||
#if(${list.contains(${bullets}, "gustyWindsCTA")})
|
#if(${list.contains(${bullets}, "gustyWindsCTA")})
|
||||||
#if(${stormType} == "line")
|
MOVE TO SAFE HARBOR IMMEDIATELY AS GUSTY WINDS AND HIGH WAVES ARE EXPECTED.
|
||||||
MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THESE STORMS PASS.
|
|
||||||
|
|
||||||
#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
|
#end
|
||||||
#if(${list.contains(${bullets}, "hailWindsCTA")})
|
#if(${list.contains(${bullets}, "hailWindsCTA")})
|
||||||
#if(${stormType} == "line")
|
#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
|
#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
|
||||||
#end
|
#end
|
||||||
#if(${list.contains(${bullets}, "nonThunderstormCTA")})
|
#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
|
#end
|
||||||
#if(${list.contains(${bullets}, "waterspoutCTA")})
|
#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
|
#end
|
||||||
#if(${list.contains(${bullets}, "lightningCTA")})
|
#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
|
#end
|
||||||
#if(${list.contains(${bullets}, "reportCTA")})
|
#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
|
#end
|
||||||
#if(${ctaSelected} == "YES")
|
#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
|
## 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)
|
#if($spoutTag.length() > 0)
|
||||||
<L>${spoutTag}</L>
|
<L>${spoutTag}</L>
|
||||||
#end
|
#end
|
||||||
|
#if($hailTag.length() > 0)
|
||||||
<L>HAIL...${hailTag}IN</L>
|
<L>HAIL...${hailTag}IN</L>
|
||||||
|
#end
|
||||||
|
#if($windTag.length() > 0)
|
||||||
<L>WIND...${windTag}KTS</L>
|
<L>WIND...${windTag}KTS</L>
|
||||||
|
#end
|
||||||
|
|
||||||
$$
|
$$
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
Note: Volcano information will not show up in the GUI unless uncommented out
|
Note: Volcano information will not show up in the GUI unless uncommented out
|
||||||
Phil Kurimski 09-19-2013 added geospatialConfig.xml
|
Phil Kurimski 09-19-2013 added geospatialConfig.xml
|
||||||
Phil Kurimski 06-26-2014 added DSS Events
|
Phil Kurimski 06-26-2014 added DSS Events
|
||||||
|
Phil Kurimski 02-18-2015 Updated CTA section
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<!-- INCLUDE ALL GEOSPTATIAL INFORMATION FOR THIS PRODUCT
|
<!-- 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 bulletName="specialEvent" bulletText="Special heads-up for large event/venue" parseString="THOSE ATTENDING"/>
|
||||||
<bullet bulletText="" bulletType="title"/>
|
<bullet bulletText="" bulletType="title"/>
|
||||||
<bullet bulletText=" ****** CALLS TO ACTION (CHOOSE 1 OR MORE) ****** " 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="genericCTA" bulletText="Generic CTA" parseString="MOVE TO SAFE HARBOR UNTIL HAZARDOUS WEATHER PASSES"/>
|
||||||
<bullet bulletName="gustyWindsCTA" bulletText="Mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES..."/>
|
<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="Mariners can expect cta with hail/wind speeds" parseString="MARINERS CAN EXPECT WIND GUSTS"/>
|
<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="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="waterspoutCTA" bulletText="Waterspout CTA" parseString="CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY"/>
|
||||||
<bullet bulletName="lightningCTA" bulletText="Frequent lightning" parseString="FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM"/>
|
<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 COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY"/>
|
<bullet bulletName="reportCTA" bulletText="Report severe wx" parseString="REPORT SEVERE WEATHER TO THE NATIONAL WEATHER SERVICE"/>
|
||||||
</bullets>
|
</bullets>
|
||||||
</bulletActionGroup>
|
</bulletActionGroup>
|
||||||
<bulletActionGroup action="COR" phen="MA" sig="W">
|
<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 bulletName="specialEvent" bulletText="Special heads-up for large event/venue" parseString="THOSE ATTENDING"/>
|
||||||
<bullet bulletText="" bulletType="title"/>
|
<bullet bulletText="" bulletType="title"/>
|
||||||
<bullet bulletText=" ****** CALLS TO ACTION (CHOOSE 1 OR MORE) ****** " 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="genericCTA" bulletText="Generic CTA" parseString="MOVE TO SAFE HARBOR UNTIL HAZARDOUS WEATHER PASSES"/>
|
||||||
<bullet bulletName="gustyWindsCTA" bulletText="Mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES..."/>
|
<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="Mariners can expect cta with hail/wind speeds" parseString="MARINERS CAN EXPECT WIND GUSTS"/>
|
<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="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="waterspoutCTA" bulletText="Waterspout CTA" parseString="CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY"/>
|
||||||
<bullet bulletName="lightningCTA" bulletText="Frequent lightning" parseString="FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM"/>
|
<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 COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY"/>
|
<bullet bulletName="reportCTA" bulletText="Report severe wx" parseString="REPORT SEVERE WEATHER TO THE NATIONAL WEATHER SERVICE"/>
|
||||||
</bullets>
|
</bullets>
|
||||||
</bulletActionGroup>
|
</bulletActionGroup>
|
||||||
</bulletActionGroups>
|
</bulletActionGroups>
|
||||||
|
|
|
@ -6,8 +6,9 @@
|
||||||
## EDITED EVAN BOOKBINDER 2-25-13 FOR IBW 2013 ##
|
## EDITED EVAN BOOKBINDER 2-25-13 FOR IBW 2013 ##
|
||||||
## EDITED PHIL KURIMSKI 5-20-13 FOR UPDATED IMPACT STATEMENTS ##
|
## EDITED PHIL KURIMSKI 5-20-13 FOR UPDATED IMPACT STATEMENTS ##
|
||||||
## EDITED PHIL KURIMSKI 9-17-13 FOR SMW 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 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
|
## 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
|
## End of File
|
||||||
############################################################################
|
############################################################################
|
||||||
|
|
|
@ -60,6 +60,10 @@ import com.raytheon.uf.common.util.CollectionUtil;
|
||||||
import com.raytheon.uf.common.util.FileUtil;
|
import com.raytheon.uf.common.util.FileUtil;
|
||||||
import com.raytheon.uf.edex.core.EDEXUtil;
|
import com.raytheon.uf.edex.core.EDEXUtil;
|
||||||
import com.raytheon.uf.edex.database.DataAccessLayerException;
|
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.CoreDao;
|
||||||
import com.raytheon.uf.edex.database.dao.DaoConfig;
|
import com.raytheon.uf.edex.database.dao.DaoConfig;
|
||||||
import com.raytheon.uf.edex.database.query.DatabaseQuery;
|
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()
|
* Pass issuance site id to getActiveTable()
|
||||||
* in updateActiveTable() so records will
|
* in updateActiveTable() so records will
|
||||||
* be updated correctly.
|
* 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>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -111,6 +118,10 @@ public class ActiveTable {
|
||||||
private static final Logger changeLog = Logger
|
private static final Logger changeLog = Logger
|
||||||
.getLogger("ActiveTableChange");
|
.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>() {
|
private static ThreadLocal<PythonScript> threadLocalPythonScript = new ThreadLocal<PythonScript>() {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -285,7 +296,7 @@ public class ActiveTable {
|
||||||
*/
|
*/
|
||||||
private void updateActiveTable(String siteId,
|
private void updateActiveTable(String siteId,
|
||||||
List<ActiveTableRecord> newRecords, float offsetSecs) {
|
List<ActiveTableRecord> newRecords, float offsetSecs) {
|
||||||
if (newRecords.size() > 0) {
|
if (!newRecords.isEmpty()) {
|
||||||
ActiveTableMode mode = ActiveTableMode.PRACTICE;
|
ActiveTableMode mode = ActiveTableMode.PRACTICE;
|
||||||
if (newRecords.get(0) instanceof OperationalActiveTableRecord) {
|
if (newRecords.get(0) instanceof OperationalActiveTableRecord) {
|
||||||
mode = ActiveTableMode.OPERATIONAL;
|
mode = ActiveTableMode.OPERATIONAL;
|
||||||
|
@ -296,36 +307,67 @@ public class ActiveTable {
|
||||||
IPerformanceStatusHandler perfStat = PerformanceStatus
|
IPerformanceStatusHandler perfStat = PerformanceStatus
|
||||||
.getHandler("ActiveTable");
|
.getHandler("ActiveTable");
|
||||||
ITimer timer = TimeUtil.getTimer();
|
ITimer timer = TimeUtil.getTimer();
|
||||||
timer.start();
|
MergeResult result = null;
|
||||||
List<ActiveTableRecord> activeTable = getActiveTable(issueSiteId, mode);
|
ClusterTask writeLock = null;
|
||||||
timer.stop();
|
try {
|
||||||
perfStat.logDuration("getActiveTable", timer.getElapsedTime());
|
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
|
timer.reset();
|
||||||
Set<String> decoderSites = getDecoderSites(siteId);
|
timer.start();
|
||||||
|
List<ActiveTableRecord> activeTable = getActiveTable(
|
||||||
// if any new record is from one of the decoder sites
|
issueSiteId, mode);
|
||||||
// we need to queue a backup
|
timer.stop();
|
||||||
for (ActiveTableRecord rec : newRecords) {
|
perfStat.logDuration("getActiveTable", timer.getElapsedTime());
|
||||||
if (decoderSites.contains(rec.getOfficeid())) {
|
// get decoder sites to see if we need to backup active table
|
||||||
ActiveTableBackup.queue(mode, activeTable);
|
Set<String> decoderSites = getDecoderSites(siteId);
|
||||||
break;
|
// 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();
|
if (!result.changeList.isEmpty()) {
|
||||||
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) {
|
|
||||||
sendNotification(mode, result.changeList, "VTECDecoder");
|
sendNotification(mode, result.changeList, "VTECDecoder");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -403,29 +445,28 @@ public class ActiveTable {
|
||||||
ActiveTableMode mode, String phensigList, String action,
|
ActiveTableMode mode, String phensigList, String action,
|
||||||
String etn, Calendar currentTime, boolean requestValidTimes,
|
String etn, Calendar currentTime, boolean requestValidTimes,
|
||||||
boolean latestEtn) {
|
boolean latestEtn) {
|
||||||
synchronized (ActiveTable.class) {
|
DatabaseQuery query = null;
|
||||||
DatabaseQuery query = null;
|
CoreDao dao = null;
|
||||||
CoreDao dao = null;
|
|
||||||
|
|
||||||
if (mode.equals(ActiveTableMode.OPERATIONAL)) {
|
if (mode.equals(ActiveTableMode.OPERATIONAL)) {
|
||||||
query = new DatabaseQuery(OperationalActiveTableRecord.class);
|
query = new DatabaseQuery(OperationalActiveTableRecord.class);
|
||||||
dao = operationalDao;
|
dao = operationalDao;
|
||||||
} else {
|
} else {
|
||||||
query = new DatabaseQuery(PracticeActiveTableRecord.class);
|
query = new DatabaseQuery(PracticeActiveTableRecord.class);
|
||||||
dao = practiceDao;
|
dao = practiceDao;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (phensigList != null) {
|
if (phensigList != null) {
|
||||||
query.addQueryParam("phensig", phensigList, "in");
|
query.addQueryParam("phensig", phensigList, "in");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (action != null) {
|
if (action != null) {
|
||||||
query.addQueryParam("act", action, "in");
|
query.addQueryParam("act", action, "in");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (etn != null) {
|
if (etn != null) {
|
||||||
query.addQueryParam("etn", etn, "in");
|
query.addQueryParam("etn", etn, "in");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (requestValidTimes && (currentTime != null)) {
|
if (requestValidTimes && (currentTime != null)) {
|
||||||
// Current Time
|
// Current Time
|
||||||
|
@ -439,18 +480,29 @@ public class ActiveTable {
|
||||||
query.addOrder("etn", false);
|
query.addOrder("etn", false);
|
||||||
query.setMaxResults(1);
|
query.setMaxResults(1);
|
||||||
}
|
}
|
||||||
|
if (requestValidTimes && currentTime != null) {
|
||||||
query.addQueryParam("officeid", siteId, "in");
|
// Current Time
|
||||||
|
query.addQueryParam("endTime", currentTime, "greater_than");
|
||||||
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 (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,
|
private static void updateTable(String siteId, MergeResult changes,
|
||||||
ActiveTableMode mode) {
|
ActiveTableMode mode) {
|
||||||
synchronized (ActiveTable.class) {
|
List<ActiveTableRecord> updated = changes.updatedList;
|
||||||
List<ActiveTableRecord> updated = changes.updatedList;
|
List<ActiveTableRecord> purged = changes.purgedList;
|
||||||
List<ActiveTableRecord> purged = changes.purgedList;
|
|
||||||
|
|
||||||
CoreDao dao = null;
|
CoreDao dao = (ActiveTableMode.OPERATIONAL.equals(mode)) ? operationalDao
|
||||||
if (mode.equals(ActiveTableMode.OPERATIONAL)) {
|
: practiceDao;
|
||||||
dao = operationalDao;
|
dao.bulkSaveOrUpdateAndDelete(updated, purged);
|
||||||
} else {
|
|
||||||
dao = practiceDao;
|
|
||||||
}
|
|
||||||
for (ActiveTableRecord update : updated) {
|
|
||||||
dao.saveOrUpdate(update);
|
|
||||||
}
|
|
||||||
for (ActiveTableRecord delete : purged) {
|
|
||||||
dao.delete(delete);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -550,22 +591,23 @@ public class ActiveTable {
|
||||||
ActiveTableMode tableName, List<ActiveTableRecord> newRecords,
|
ActiveTableMode tableName, List<ActiveTableRecord> newRecords,
|
||||||
float timeOffset, boolean makeBackup, boolean runIngestAT,
|
float timeOffset, boolean makeBackup, boolean runIngestAT,
|
||||||
String xmlSource) throws JepException {
|
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;
|
MergeResult result = null;
|
||||||
PythonScript script = null;
|
PythonScript script = null;
|
||||||
|
ClusterTask writeLock = null;
|
||||||
try {
|
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 {
|
try {
|
||||||
script = new PythonScript(scriptPath, pythonIncludePath,
|
script = new PythonScript(scriptPath, pythonIncludePath,
|
||||||
ActiveTable.class.getClassLoader());
|
ActiveTable.class.getClassLoader());
|
||||||
|
@ -575,6 +617,23 @@ public class ActiveTable {
|
||||||
throw e;
|
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 {
|
try {
|
||||||
String site4Char = SiteMap.getInstance().getSite4LetterId(
|
String site4Char = SiteMap.getInstance().getSite4LetterId(
|
||||||
siteId);
|
siteId);
|
||||||
|
@ -597,18 +656,26 @@ public class ActiveTable {
|
||||||
"Error merging active table", e);
|
"Error merging active table", e);
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (result != null) {
|
||||||
|
updateTable(siteId, result, tableName);
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
|
if (writeLock != null) {
|
||||||
|
statusHandler.info("mergeRemoteTable() released lock ["
|
||||||
|
+ ACTIVE_TABLE_LOCK_NAME + ":" + tableName.toString()
|
||||||
|
+ "].");
|
||||||
|
ClusterLockUtils.unlock(writeLock, true);
|
||||||
|
}
|
||||||
|
|
||||||
if (script != null) {
|
if (script != null) {
|
||||||
script.dispose();
|
script.dispose();
|
||||||
script = null;
|
script = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result != null) {
|
if ((result != null) && (!result.changeList.isEmpty())) {
|
||||||
updateTable(siteId, result, tableName);
|
sendNotification(tableName, result.changeList, "MergeVTEC");
|
||||||
if (!result.changeList.isEmpty()) {
|
|
||||||
sendNotification(tableName, result.changeList, "MergeVTEC");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
# 06/17/13 #3296 randerso Moved active table backup and purging
|
# 06/17/13 #3296 randerso Moved active table backup and purging
|
||||||
# to a separate thread in java.
|
# to a separate thread in java.
|
||||||
# Added performance logging
|
# Added performance logging
|
||||||
|
# 02/05/15 #4099 randerso Changed log level of year-end issuance tweak
|
||||||
#
|
#
|
||||||
|
|
||||||
import time
|
import time
|
||||||
|
@ -119,7 +120,7 @@ class ActiveTable(VTECTableUtil.VTECTableUtil):
|
||||||
if oldYear < newYear:
|
if oldYear < newYear:
|
||||||
if (newR['act'] == "EXP" and newR['endTime'] == oldR['endTime']) or \
|
if (newR['act'] == "EXP" and newR['endTime'] == oldR['endTime']) or \
|
||||||
self.__overlaps((oldR['startTime'],oldR['endTime']), (newR['startTime'],newR['endTime'])):
|
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),
|
"\nNewRec: ", self.printEntry(newR),
|
||||||
"OldRec: ", self.printEntry(oldR))
|
"OldRec: ", self.printEntry(oldR))
|
||||||
newR['issueTime'] = lastYearIssueTime
|
newR['issueTime'] = lastYearIssueTime
|
||||||
|
|
|
@ -101,6 +101,7 @@ import com.raytheon.uf.edex.database.query.DatabaseQuery;
|
||||||
* Dec 13, 2013 2555 rjpeter Added processByCriteria and fixed Generics warnings.
|
* 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.
|
* 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.
|
* Apr 23, 2014 2726 rjpeter Updated processByCriteria to throw exceptions back up to caller.
|
||||||
|
* Feb 23, 2015 4127 dgilling Added bulkSaveOrUpdateAndDelete().
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
|
@ -1143,4 +1144,26 @@ public class CoreDao extends HibernateDaoSupport {
|
||||||
return getSessionFactory().getClassMetadata(daoClass);
|
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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue