Merge branch 'asm_14.3.1' of /data/integration-asm-gerrit/update-latest/AWIPS2_baseline into master_14.3.1
Former-commit-id:3919c9ec2f
[formerly 36fa86071fa492bd1d135b3ded6cde54d0567474] Former-commit-id:61b206be0b
This commit is contained in:
commit
feb26ee9b7
15 changed files with 483 additions and 45 deletions
|
@ -0,0 +1,30 @@
|
|||
# radarWatchdog.txt
|
||||
#
|
||||
# Controls how long to wait for products specified on the RPS list before
|
||||
# sounding an alarm. There are two sections: One defines VCP durations
|
||||
# and one that lists products to monitor.
|
||||
#
|
||||
# VCP duration format: <VCP number>|<duration in seconds>
|
||||
#
|
||||
# Product format: <product mnemonic>
|
||||
#
|
||||
# <product mnemonic> is a mnemonic found in radarInfo.txt.
|
||||
#
|
||||
#
|
||||
# If a product is listed, but is not actually in the current RPS list,
|
||||
# it will not be monitored.
|
||||
[VCP]
|
||||
11 | 300
|
||||
211 | 300
|
||||
12 | 270
|
||||
212 | 270
|
||||
21 | 360
|
||||
121 | 360
|
||||
221 | 360
|
||||
31 | 600
|
||||
32 | 600
|
||||
80 | 360
|
||||
90 | 360
|
||||
[Products]
|
||||
V
|
||||
Z
|
|
@ -124,6 +124,7 @@ public class RadarServer implements RadarEventListener {
|
|||
addListener(new DedicatedRadarActivator(this));
|
||||
addListener(new RequestScheduler(this));
|
||||
addListener(new RadarServerAvailable(this));
|
||||
addListener(new RadarWatchdogListener(configuration));
|
||||
}
|
||||
|
||||
public void addListener(RadarEventListener l) {
|
||||
|
|
|
@ -42,6 +42,7 @@ import com.raytheon.rcm.event.RadarEventAdapter;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Nov 9, 2011 mnash Initial creation
|
||||
* 2012-07-27 DR 14896 D. Friedman Handle multiple RPGs.
|
||||
* 2014-05-22 DR 16319 dhuffman Change some methods to static.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -86,7 +87,7 @@ public class RadarServerAvailable extends RadarEventAdapter {
|
|||
}
|
||||
}
|
||||
|
||||
private void sendNotification(final String radarId, final String message) {
|
||||
public static void sendNotification(final String radarId, final String message) {
|
||||
getExecutorService().submit(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
|
@ -95,7 +96,7 @@ public class RadarServerAvailable extends RadarEventAdapter {
|
|||
});
|
||||
}
|
||||
|
||||
private void sendNotification2(String radarId, String message) {
|
||||
private static void sendNotification2(String radarId, String message) {
|
||||
ProcessBuilder builder;
|
||||
Process proc = null;
|
||||
|
||||
|
|
|
@ -0,0 +1,259 @@
|
|||
/**
|
||||
* This software was developed and / or modified by Raytheon Company,
|
||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
*
|
||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
* This software product contains export-restricted data whose
|
||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
* to non-U.S. persons whether in the United States or abroad requires
|
||||
* an export license or other authorization.
|
||||
*
|
||||
* Contractor Name: Raytheon Company
|
||||
* Contractor Address: 6825 Pine Street, Suite 340
|
||||
* Mail Stop B8
|
||||
* Omaha, NE 68106
|
||||
* 402.291.0100
|
||||
*
|
||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.rcm.server;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import com.raytheon.rcm.config.Configuration;
|
||||
|
||||
/**
|
||||
*
|
||||
* This class encapsulates the watchdog activity into a plugin for the
|
||||
* RadarServer.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------- ---------- ----------- --------------------------
|
||||
* May 12, 2014 DR 16319 dhuffman Initial creation.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author dhuffman
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public class RadarWatchdog extends Thread {
|
||||
|
||||
private static Object semifore = new Object();
|
||||
|
||||
protected static class GsmItem {
|
||||
protected String radarID;
|
||||
protected int vcp;
|
||||
protected long time;
|
||||
protected long alarmTime;
|
||||
protected long nextAlarmTime;
|
||||
|
||||
protected GsmItem() {
|
||||
}
|
||||
}
|
||||
|
||||
protected static class RadarItem {
|
||||
protected String radarID;
|
||||
protected String mnemonic;
|
||||
protected long time;
|
||||
protected long messageTime;
|
||||
|
||||
protected RadarItem() {
|
||||
}
|
||||
}
|
||||
|
||||
private long startTime = 0;
|
||||
private long shortestWait = 0;
|
||||
private static final long fudgeTime = 30;
|
||||
|
||||
private static Map<String, GsmItem> mapGSM = new ConcurrentHashMap<String, GsmItem>();
|
||||
private static Map<String, Map<String, RadarItem>> mapMnemonic = new ConcurrentHashMap<String, Map<String, RadarItem>>();
|
||||
private static Map<Integer, Integer> mapDuration = new ConcurrentHashMap<Integer, Integer>();
|
||||
private static List<String> mapMnemonicProducts = new ArrayList<String>();
|
||||
|
||||
protected Configuration configuration;
|
||||
private static String configFileName = "radarWatchdog.txt";
|
||||
|
||||
protected RadarWatchdog(Configuration conf) {
|
||||
setDaemon(true);
|
||||
startTime = System.currentTimeMillis();
|
||||
configuration = conf;
|
||||
|
||||
loadConfigFile(configFileName);
|
||||
|
||||
Iterator<String> mnem = mapMnemonicProducts.iterator();
|
||||
while (mnem.hasNext()) {
|
||||
String mn = mnem.next();
|
||||
Map<String, RadarItem> mapRadar = new ConcurrentHashMap<String, RadarItem>();
|
||||
mapMnemonic.put(mn, mapRadar);
|
||||
}
|
||||
}
|
||||
|
||||
public GsmItem getGSMItem(final String radarID) {
|
||||
return mapGSM.get(radarID);
|
||||
}
|
||||
|
||||
public void putGSMItem(GsmItem gi) {
|
||||
if (gi != null) {
|
||||
mapGSM.put(gi.radarID, gi);
|
||||
}
|
||||
}
|
||||
|
||||
public RadarItem getRadarItem(final String Mnemonic, final String radarID) {
|
||||
Map<String, RadarItem> mapRadar = mapMnemonic.get(Mnemonic);
|
||||
if (mapRadar != null)
|
||||
return mapRadar.get(radarID);
|
||||
return null;
|
||||
}
|
||||
|
||||
public void putRadarItem(RadarItem ri) {
|
||||
if (ri != null) {
|
||||
Map<String, RadarItem> mapRadar = mapMnemonic.get(ri.mnemonic);
|
||||
if (mapRadar != null) {
|
||||
mapRadar.put(ri.radarID, ri);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
long currentTime = 0;
|
||||
shortestWait = 0;
|
||||
while (true) {
|
||||
|
||||
try {
|
||||
synchronized (semifore) {
|
||||
semifore.wait(shortestWait < 800 ? 800 : shortestWait);
|
||||
currentTime = System.currentTimeMillis();
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
patrol(currentTime);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void patrol(long currentTime) {
|
||||
long duration = 0;
|
||||
long adjustedTime = currentTime - fudgeTime;
|
||||
shortestWait = 0;
|
||||
Iterator<GsmItem> git = mapGSM.values().iterator();
|
||||
while (git.hasNext()) {
|
||||
GsmItem gi = git.next();
|
||||
if (mapDuration.get(gi.vcp) != null) {
|
||||
duration = mapDuration.get(gi.vcp) * 1000;
|
||||
|
||||
Iterator<String> mnem = mapMnemonicProducts.iterator();
|
||||
while (mnem.hasNext()) {
|
||||
String mn = mnem.next();
|
||||
Map<String, RadarItem> mapRadar = mapMnemonic.get(mn);
|
||||
if (mapRadar == null)
|
||||
continue;
|
||||
RadarItem ri = mapRadar.get(gi.radarID);
|
||||
|
||||
if (ri == null) {
|
||||
if (duration + startTime < adjustedTime
|
||||
&& gi.alarmTime != startTime) {
|
||||
alert(duration, gi, mn);
|
||||
gi.alarmTime = startTime;
|
||||
gi.nextAlarmTime = startTime + duration;
|
||||
}
|
||||
|
||||
if (shortestWait < 1 || duration < shortestWait)
|
||||
shortestWait = duration;
|
||||
}
|
||||
|
||||
if (ri != null) {
|
||||
|
||||
if (ri.time + duration < adjustedTime) {
|
||||
if (ri.time <= gi.alarmTime
|
||||
&& gi.nextAlarmTime < currentTime) {
|
||||
alert(duration, gi, ri.mnemonic);
|
||||
gi.alarmTime = ri.time;
|
||||
gi.nextAlarmTime = currentTime + duration;
|
||||
}
|
||||
if (gi.nextAlarmTime < currentTime)
|
||||
gi.alarmTime = ri.time;
|
||||
}
|
||||
|
||||
if ((duration + ri.time) - adjustedTime < shortestWait
|
||||
&& 1 <= (duration + ri.time) - adjustedTime)
|
||||
shortestWait = (duration + ri.time) - adjustedTime;
|
||||
if (shortestWait < 1)
|
||||
shortestWait = duration;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void alert(final long duration, final GsmItem gi, final String mn) {
|
||||
String AlertVizMessage = "Watchdog: Radar ";
|
||||
AlertVizMessage += gi.radarID + " has not produced a '" + mn
|
||||
+ "' product in the last " + duration / 1000 + " seconds.";
|
||||
RadarServerAvailable.sendNotification(gi.radarID, AlertVizMessage);
|
||||
}
|
||||
|
||||
public void notifyWatchdog() {
|
||||
synchronized (semifore) {
|
||||
semifore.notify();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean loadConfigFile(final String filename) {
|
||||
try {
|
||||
InputStream inFile = configuration.getDropInData(filename);
|
||||
InputStreamReader reader = new InputStreamReader(inFile);
|
||||
BufferedReader in = new BufferedReader(reader);
|
||||
String line;
|
||||
|
||||
while ((line = in.readLine()) != null) {
|
||||
if (line.contains("#"))
|
||||
continue;
|
||||
if (line.contains("["))
|
||||
break;
|
||||
}
|
||||
|
||||
while ((line = in.readLine()) != null) {
|
||||
if (line.contains("#"))
|
||||
continue;
|
||||
if (line.contains("["))
|
||||
break;
|
||||
String s[] = line.split("\\|");
|
||||
mapDuration.put(Integer.parseInt(s[0].trim()),
|
||||
Integer.parseInt(s[1].trim()));
|
||||
}
|
||||
|
||||
while ((line = in.readLine()) != null) {
|
||||
if (line.contains("#"))
|
||||
continue;
|
||||
if (line.contains("["))
|
||||
break;
|
||||
mapMnemonicProducts.add(line.trim());
|
||||
}
|
||||
|
||||
} catch (IOException e) {
|
||||
Log.errorf(": watchdog: Error while loading config file %s",
|
||||
filename, e);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,139 @@
|
|||
/**
|
||||
* This software was developed and / or modified by Raytheon Company,
|
||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
*
|
||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
* This software product contains export-restricted data whose
|
||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
* to non-U.S. persons whether in the United States or abroad requires
|
||||
* an export license or other authorization.
|
||||
*
|
||||
* Contractor Name: Raytheon Company
|
||||
* Contractor Address: 6825 Pine Street, Suite 340
|
||||
* Mail Stop B8
|
||||
* Omaha, NE 68106
|
||||
* 402.291.0100
|
||||
*
|
||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.rcm.server;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import com.raytheon.rcm.config.Configuration;
|
||||
import com.raytheon.rcm.event.RadarEvent;
|
||||
import com.raytheon.rcm.event.RadarEventAdapter;
|
||||
import com.raytheon.rcm.message.GSM;
|
||||
import com.raytheon.rcm.message.GraphicProduct;
|
||||
import com.raytheon.rcm.message.Message;
|
||||
import com.raytheon.rcm.message.GraphicProduct.PDB;
|
||||
import com.raytheon.rcm.products.ProductInfo;
|
||||
import com.raytheon.rcm.products.RadarProduct;
|
||||
import com.raytheon.rcm.server.RadarWatchdog;
|
||||
|
||||
/**
|
||||
*
|
||||
* This class listens to messages sent to the RadarServer, that the watchdog has
|
||||
* an interest in.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------- ---------- ----------- --------------------------
|
||||
* May 12, 2014 DR 16319 dhuffman Initial creation.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author dhuffman
|
||||
* @version 1.0
|
||||
*/
|
||||
public class RadarWatchdogListener extends RadarEventAdapter {
|
||||
|
||||
protected static RadarWatchdog radarWatchdog;
|
||||
|
||||
private static HashMap<String, String> mnemonicMap = new HashMap<String, String>();
|
||||
{
|
||||
mnemonicMap.put("HZ", "Z");
|
||||
mnemonicMap.put("HV", "V");
|
||||
mnemonicMap.put("HSW", "SW");
|
||||
}
|
||||
|
||||
public RadarWatchdogListener(Configuration configuration) {
|
||||
radarWatchdog = new RadarWatchdog(configuration);
|
||||
radarWatchdog.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleRadarEvent(RadarEvent event) {
|
||||
if (event.getType() == RadarEvent.MESSAGE_RECEIVED) {
|
||||
byte[] msg = event.getMessageData();
|
||||
int messageCode = Message.messageCodeOf(msg);
|
||||
if (messageCode == Message.GSM) {
|
||||
GSM gsm = null;
|
||||
try {
|
||||
gsm = GSM.decode(msg);
|
||||
} catch (Exception e) {
|
||||
// This message error will be reported by EventLogger.
|
||||
return;
|
||||
}
|
||||
|
||||
if (gsm != null) {
|
||||
RadarWatchdog.GsmItem gi = new RadarWatchdog.GsmItem();
|
||||
gi.radarID = event.getRadarID();
|
||||
gi.vcp = gsm.vcp;
|
||||
gi.time = gsm.time.getTimeInMillis();
|
||||
|
||||
RadarWatchdog.GsmItem oldgi = radarWatchdog
|
||||
.getGSMItem(gi.radarID);
|
||||
if (oldgi == null
|
||||
|| (oldgi != null && oldgi.time <= gi.time)) {
|
||||
radarWatchdog.putGSMItem(gi);
|
||||
}
|
||||
}
|
||||
|
||||
} else if (16 <= messageCode) {
|
||||
int mcode = 0;
|
||||
PDB pdb = null;
|
||||
RadarWatchdog.RadarItem ri = new RadarWatchdog.RadarItem();
|
||||
mcode = Message.messageCodeOf(msg);
|
||||
ri.messageTime = (Message.decodeHeader(msg).time)
|
||||
.getTimeInMillis();
|
||||
|
||||
RadarProduct rp = ProductInfo.getInstance().getPoductForCode(
|
||||
mcode);
|
||||
if (rp == null)
|
||||
return;
|
||||
|
||||
ri.mnemonic = rp.mnemonic;
|
||||
String newMnemonic = mnemonicMap.get(ri.mnemonic);
|
||||
if (newMnemonic != null)
|
||||
ri.mnemonic = newMnemonic;
|
||||
|
||||
try {
|
||||
pdb = GraphicProduct.pdbOfMessage(msg);
|
||||
} catch (Exception e) {
|
||||
// This message error will be reported by EventLogger.
|
||||
return;
|
||||
}
|
||||
|
||||
if (pdb != null) {
|
||||
ri.radarID = event.getRadarID();
|
||||
ri.time = System.currentTimeMillis();
|
||||
|
||||
RadarWatchdog.RadarItem oldri = radarWatchdog.getRadarItem(
|
||||
ri.mnemonic, ri.radarID);
|
||||
|
||||
if (oldri == null
|
||||
|| (oldri != null && oldri.messageTime <= ri.messageTime)) {
|
||||
radarWatchdog.putRadarItem(ri);
|
||||
radarWatchdog.notifyWatchdog();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -170,6 +170,7 @@ import com.vividsolutions.jts.geom.Envelope;
|
|||
* paint using the time in paintProps and
|
||||
* remove dead code in paintInternal
|
||||
* Apr 03, 2014 2737 randerso Uncommented out listers for iscParm inventory changed
|
||||
* May 20, 2014 15814 zhao Make image display for model Parm not affected by ISC mode
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -519,6 +520,8 @@ public class GFEResource extends
|
|||
.getValidPeriod());
|
||||
|
||||
boolean iscParm = this.parm.isIscParm();
|
||||
boolean modelParm = isModelParm();
|
||||
|
||||
if ((gd.length == 0) && !dataManager.getParmManager().iscMode()) {
|
||||
return;
|
||||
}
|
||||
|
@ -605,7 +608,7 @@ public class GFEResource extends
|
|||
VectorGridSlice vectorSlice = (VectorGridSlice) gs;
|
||||
Grid2DBit mask = parm.getDisplayAttributes().getDisplayMask();
|
||||
|
||||
if (dataManager.getParmManager().iscMode() || iscParm) {
|
||||
if ( (dataManager.getParmManager().iscMode() || iscParm) && !modelParm ) {
|
||||
vectorSlice = new VectorGridSlice();
|
||||
mask = dataManager.getIscDataAccess().getCompositeGrid(
|
||||
new GridID(this.parm, this.curTime.getRefTime()),
|
||||
|
@ -692,7 +695,7 @@ public class GFEResource extends
|
|||
ScalarGridSlice scalarSlice = (ScalarGridSlice) gs;
|
||||
Grid2DBit mask = parm.getDisplayAttributes().getDisplayMask();
|
||||
|
||||
if (dataManager.getParmManager().iscMode() || iscParm) {
|
||||
if ( (dataManager.getParmManager().iscMode() || iscParm) && !modelParm ) {
|
||||
scalarSlice = new ScalarGridSlice();
|
||||
mask = dataManager.getIscDataAccess().getCompositeGrid(
|
||||
new GridID(this.parm, this.curTime.getRefTime()),
|
||||
|
@ -736,7 +739,7 @@ public class GFEResource extends
|
|||
|
||||
Grid2DBit mask = parm.getDisplayAttributes().getDisplayMask();
|
||||
|
||||
if (dataManager.getParmManager().iscMode() || iscParm) {
|
||||
if ( (dataManager.getParmManager().iscMode() || iscParm) && !modelParm ) {
|
||||
slice = new DiscreteGridSlice();
|
||||
GridID gid = new GridID(parm, this.curTime.getRefTime());
|
||||
mask = dataManager.getIscDataAccess().getCompositeGrid(gid,
|
||||
|
@ -813,7 +816,7 @@ public class GFEResource extends
|
|||
|
||||
Grid2DBit mask = parm.getDisplayAttributes().getDisplayMask();
|
||||
|
||||
if (dataManager.getParmManager().iscMode() || iscParm) {
|
||||
if ( (dataManager.getParmManager().iscMode() || iscParm) && !modelParm ) {
|
||||
slice = new WeatherGridSlice();
|
||||
GridID gid = new GridID(parm, this.curTime.getRefTime());
|
||||
mask = dataManager.getIscDataAccess().getCompositeGrid(gid,
|
||||
|
@ -1592,4 +1595,14 @@ public class GFEResource extends
|
|||
}
|
||||
}
|
||||
|
||||
private boolean isModelParm() {
|
||||
String parmId = parm.getParmID().toString();
|
||||
if ( parmId.contains("__Fcst_") ||
|
||||
parmId.contains("__ISC_") ||
|
||||
parmId.contains("__Official_") ||
|
||||
parmId.contains("__Restore_")) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
##### Evan Bookbinder 05-05-2013 handleClosesPoints and 3rd bullet changes (OVER & now)
|
||||
##### Evan Bookbinder 09-20-2013 Fixed rural area otherPoints in pathcast section, added rural phrase
|
||||
##### Qinglu Lin 03-17-2014 DR 16309. Updated inserttorwatches and insertsvrwatches.
|
||||
##### Qinglu Lin 05-13-2014 DR 17177. Updated secondBullet.
|
||||
####################################################################################################
|
||||
#*
|
||||
Mile Marker Test Code
|
||||
|
@ -203,7 +202,7 @@ ${dateUtil.period(${watches.getLatestTorTime()},${timeFormat.plain}, 15, ${local
|
|||
#if(${secondtimezone})
|
||||
/${dateUtil.format(${watch.getEndTime()}, ${timeFormat.plain}, 15, ${secondtimezone})}/##
|
||||
#end
|
||||
FOR##
|
||||
FOR ##
|
||||
#set($numPortions = ${list.size(${watch.getPortions()})})
|
||||
#set($count = 0)
|
||||
#foreach(${portion} in ${watch.getPortions()})
|
||||
|
@ -237,7 +236,7 @@ ${dateUtil.period(${watches.getLatestSvrTime()},${timeFormat.plain}, 15, ${local
|
|||
#if(${secondtimezone})
|
||||
/${dateUtil.format(${watch.getEndTime()}, ${timeFormat.plain}, 15, ${secondtimezone})}/##
|
||||
#end
|
||||
FOR##
|
||||
FOR ##
|
||||
#set($numPortions = ${list.size(${watch.getPortions()})})
|
||||
#set($count = 0)
|
||||
#foreach(${portion} in ${watch.getPortions()})
|
||||
|
@ -1143,13 +1142,10 @@ ${partOfArea}${area.name}...
|
|||
######### MACRO TO GENERATE SECOND BULLET (UNTIL XXXX AMPM TZ (DAY) IN WARNINGS ##########
|
||||
#macro(secondBullet $dateUtil $expire $timeFormat $localtimezone $secondtimezone $duration)
|
||||
#if(${duration} >= 360)
|
||||
#set($text = "UNTIL ${dateUtil.format(${expire}, ${timeFormat.plain}, 15, ${localtimezone})}")
|
||||
UNTIL ${dateUtil.format(${expire}, ${timeFormat.plain}, 15, ${localtimezone})}##
|
||||
#else
|
||||
#set($text = "UNTIL ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})}")
|
||||
UNTIL ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})}##
|
||||
#end
|
||||
#set($text = $text.replace("1200 PM", "NOON"))
|
||||
#set($text = $text.replace("1200 AM", "MIDNIGHT"))
|
||||
${text}##
|
||||
#if(${secondtimezone})
|
||||
#if(${duration} >= 360)
|
||||
/${dateUtil.format(${expire}, ${timeFormat.plain}, 15, ${secondtimezone})}/##
|
||||
|
|
|
@ -381,9 +381,19 @@ DENSE FOG WAS REDUCING VISIBILITIES TO BELOW ${visibility}. REDUCE YOUR SPEED...
|
|||
&&
|
||||
#end
|
||||
|
||||
#############
|
||||
## WATCHES ##
|
||||
#############
|
||||
#if(${list.contains($includedWatches, "torWatches")} && ${list.contains(${bullets}, "includeTorWatches")})
|
||||
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
|
||||
#end
|
||||
#if(${list.contains(${includedWatches}, "svrWatches")} && ${list.contains(${bullets}, "includeSvrWatches")})
|
||||
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
|
||||
#end
|
||||
####################################
|
||||
#if(${productClass}=="T")
|
||||
THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
|
||||
|
||||
####################################
|
||||
#end
|
||||
|
||||
#printcoords(${areaPoly}, ${list})
|
||||
|
|
|
@ -124,6 +124,8 @@ turned on unless the corresponding .vm file is turned on in a given template's .
|
|||
<bullet bulletName="lightningCTA" bulletText="Intense lightning" parseString="INTENSE LIGHTNING IS OCCURRING WITH THIS STORM"/>
|
||||
<bullet bulletName="reportCTA" bulletText="Report severe weather to coast guard" parseString="REPORT SEVERE WEATHER TO THE COAST GUARD"/>
|
||||
<bullet bulletName="fogCTA" bulletText="Dense fog" parseString="DENSE FOG WAS REDUCING VISIBILITIES TO"/>
|
||||
<bullet bulletName="includeTorWatches" bulletText="Include Tornado Watches" bulletDefault="true" parseString=""/>
|
||||
<bullet bulletName="includeSvrWatches" bulletText="Include Severe Thunderstorm Watches" bulletDefault="true" parseString=""/>
|
||||
</bullets>
|
||||
</bulletActionGroup>
|
||||
<bulletActionGroup action="COR" phen="MA" sig="S">
|
||||
|
@ -164,6 +166,8 @@ turned on unless the corresponding .vm file is turned on in a given template's .
|
|||
<bullet bulletName="lightningCTA" bulletText="Intense lightning" parseString="INTENSE LIGHTNING IS OCCURRING WITH THIS STORM"/>
|
||||
<bullet bulletName="reportCTA" bulletText="Report severe weather to coast guard" parseString="REPORT SEVERE WEATHER TO THE COAST GUARD"/>
|
||||
<bullet bulletName="fogCTA" bulletText="Dense fog" parseString="DENSE FOG WAS REDUCING VISIBILITIES TO"/>
|
||||
<bullet bulletName="includeTorWatches" bulletText="Include Tornado Watches" bulletDefault="true" parseString=""/>
|
||||
<bullet bulletName="includeSvrWatches" bulletText="Include Severe Thunderstorm Watches" bulletDefault="true" parseString=""/>
|
||||
</bullets>
|
||||
</bulletActionGroup>
|
||||
</bulletActionGroups>
|
||||
|
|
|
@ -109,6 +109,8 @@ turned on unless the corresponding .vm file is turned on in a given template's .
|
|||
<bullet bulletName="frontalPassage" bulletText="cold frontal passage"/>
|
||||
<bullet bulletName="heavySnow" bulletText="heavy snow/low visibility"/>
|
||||
<bullet bulletName="snowAmt" bulletText="snowfall amounts"/>
|
||||
<bullet bulletName="includeTorWatches" bulletText="Include Tornado Watches" bulletDefault="true" parseString=""/>
|
||||
<bullet bulletName="includeSvrWatches" bulletText="Include Severe Thunderstorm Watches" bulletDefault="true" parseString=""/>
|
||||
</bullets>
|
||||
</bulletActionGroup>
|
||||
<bulletActionGroup action="COR">
|
||||
|
@ -144,6 +146,8 @@ turned on unless the corresponding .vm file is turned on in a given template's .
|
|||
<bullet bulletName="frontalPassage" bulletText="cold frontal passage"/>
|
||||
<bullet bulletName="heavySnow" bulletText="heavy snow/low visibility"/>
|
||||
<bullet bulletName="snowAmt" bulletText="snowfall amounts"/>
|
||||
<bullet bulletName="includeTorWatches" bulletText="Include Tornado Watches" bulletDefault="true" parseString=""/>
|
||||
<bullet bulletName="includeSvrWatches" bulletText="Include Severe Thunderstorm Watches" bulletDefault="true" parseString=""/>
|
||||
</bullets>
|
||||
</bulletActionGroup>
|
||||
</bulletActionGroups>
|
||||
|
|
|
@ -349,9 +349,10 @@ CONDITIONS CAN DETERIORATE RAPIDLY IN WINTER WEATHER SITUATIONS. BE PREPARED FOR
|
|||
#############
|
||||
## WATCHES ##
|
||||
#############
|
||||
#if(${list.contains($includedWatches, "includeSvrWatches")})
|
||||
#if(${list.contains($includedWatches, "torWatches")} && ${list.contains(${bullets}, "includeTorWatches")})
|
||||
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
|
||||
|
||||
#end
|
||||
#if(${list.contains(${includedWatches}, "svrWatches")} && ${list.contains(${bullets}, "includeSvrWatches")})
|
||||
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
|
||||
#end
|
||||
####################################
|
||||
|
|
|
@ -116,7 +116,8 @@ turned on unless the corresponding .vm file is turned on in a given template's .
|
|||
<bullet bulletName="torrentialRainfallCTA" bulletText="Torrential rainfall" parseString="TORRENTIAL RAINFALL IS ALSO OCCURRING"/>
|
||||
<bullet bulletName="lawEnforcementCTA" bulletText="Report Svr Wx to Law Enforcement Agency" parseString="CONTACT YOUR NEAREST LAW ENFORCEMENT"/>
|
||||
<bullet bulletName="boatersCTA" bulletText="Over Lake - Boaters seek shelter" parseString="GET OUT OF THE WATER AND MOVE INDOORS"/>
|
||||
<bullet bulletName="includeSvrWatches" bulletText="Include Severe Thunderstorm Watches" bulletGroup="toggle2" bulletDefault="true" parseString=""/>
|
||||
<bullet bulletName="includeTorWatches" bulletText="Include Tornado Watches" bulletDefault="true" parseString=""/>
|
||||
<bullet bulletName="includeSvrWatches" bulletText="Include Severe Thunderstorm Watches" bulletDefault="true" parseString=""/>
|
||||
<bullet bulletText="******** WINTER WX CALLS TO ACTION (CHOOSE 1 OR MORE) *********" bulletType="title"/>
|
||||
<bullet bulletName="advisoryCTA" bulletText="Advisory may be required" bulletGroup="toggle3" parseString="STORMS MAY INTENSIFY...MONITOR TV"/>
|
||||
<bullet bulletName="advisoryEffectCTA" bulletText="Advisory in effect" bulletGroup="toggle3" parseString="FREQUENT CLOUD TO GROUND LIGHTNING IS OCCURRING"/>
|
||||
|
@ -172,7 +173,8 @@ turned on unless the corresponding .vm file is turned on in a given template's .
|
|||
<bullet bulletName="torrentialRainfallCTA" bulletText="Torrential rainfall" parseString="TORRENTIAL RAINFALL IS ALSO OCCURRING"/>
|
||||
<bullet bulletName="lawEnforcementCTA" bulletText="Report Svr Wx to Law Enforcement Agency" parseString="CONTACT YOUR NEAREST LAW ENFORCEMENT"/>
|
||||
<bullet bulletName="boatersCTA" bulletText="Over Lake - Boaters seek shelter" parseString="GET OUT OF THE WATER AND MOVE INDOORS"/>
|
||||
<bullet bulletName="includeSvrWatches" bulletText="Include Severe Thunderstorm Watches" bulletGroup="toggle2" bulletDefault="true" parseString=""/>
|
||||
<bullet bulletName="includeTorWatches" bulletText="Include Tornado Watches" bulletDefault="true" parseString=""/>
|
||||
<bullet bulletName="includeSvrWatches" bulletText="Include Severe Thunderstorm Watches" bulletDefault="true" parseString=""/>
|
||||
<bullet bulletText="******** WINTER WX CALLS TO ACTION (CHOOSE 1 OR MORE) *********" bulletType="title"/>
|
||||
<bullet bulletName="advisoryCTA" bulletText="Advisory may be required" bulletGroup="toggle3" parseString="STORMS MAY INTENSIFY...MONITOR TV"/>
|
||||
<bullet bulletName="advisoryEffectCTA" bulletText="Advisory in effect" bulletGroup="toggle3" parseString="FREQUENT CLOUD TO GROUND LIGHTNING IS OCCURRING"/>
|
||||
|
|
|
@ -118,28 +118,6 @@ function captureQpidStat() {
|
|||
numQpidConnections=$( qpid-stat -c | wc -l )
|
||||
(( numQpidConnections-=3 ))
|
||||
echo -e "Total Number of QPID Connections: ${numQpidConnections}" >> ${logDirectory}/${nowTimeDate}-qpid-stat.out
|
||||
if [[ ${numQpidConnections} -ge $(( qpidConnLimit - qpidConnMedAlarm )) && ${numQpidConnections} -lt $(( qpidConnLimit - qpidConnHighAlarm )) ]] ; then
|
||||
echo -e "\tNOTE: Sending Warning ITO to NCF because number of connections is between $(( qpidConnLimit - qpidConnMedAlarm )) and $(( qpidConnLimit - qpidConnHighAlarm ))" >> ${logDirectory}/${nowTimeDate}-qpid-stat.out
|
||||
if [[ -f /opt/OV/bin/OpC/opcmsg ]] ; then
|
||||
/opt/OV/bin/OpC/opcmsg application=QPIDD object=QPIDD msg_text="Number Of Connections To QPID is between $(( qpidConnLimit - qpidConnMedAlarm )) and $(( qpidConnLimit - qpidConnHighAlarm )) : Please check for deadlock condition" severity=Warning msg_grp=AWIPS
|
||||
else
|
||||
echo -e "\tERROR - can not find /opt/OV/bin/OpC/opcmsg on $( hostname )" >> ${logDirectory}/${nowTimeDate}-qpid-stat.out
|
||||
fi
|
||||
elif [[ ${numQpidConnections} -ge $(( qpidConnLimit - qpidConnHighAlarm )) && ${numQpidConnections} -lt $(( qpidConnLimit - qpidConnCritAlarm )) ]] ; then
|
||||
echo -e "\tNOTE: Sending Major ITO to NCF because number of connections is between $(( qpidConnLimit - qpidConnHighAlarm )) and $(( qpidConnLimit - qpidConnCritAlarm ))" >> ${logDirectory}/${nowTimeDate}-qpid-stat.out
|
||||
if [[ -f /opt/OV/bin/OpC/opcmsg ]] ; then
|
||||
/opt/OV/bin/OpC/opcmsg application=QPIDD object=QPIDD msg_text="Number Of Connections To QPID is between $(( qpidConnLimit - qpidConnMedAlarm )) and $(( qpidConnLimit - qpidConnHighAlarm )) : Please check for deadlock condition" severity=Major msg_grp=AWIPS
|
||||
else
|
||||
echo -e "\tERROR - can not find /opt/OV/bin/OpC/opcmsg on $( hostname )" >> ${logDirectory}/${nowTimeDate}-qpid-stat.out
|
||||
fi
|
||||
elif [[ ${numQpidConnections} -ge $(( qpidConnLimit - qpidConnCritAlarm )) ]] ; then
|
||||
echo -e "\tNOTE: Sending CRITIAL ITO to NCF because number of connections is >= $(( qpidConnLimit - qpidConnCritAlarm ))" >> ${logDirectory}/${nowTimeDate}-qpid-stat.out
|
||||
if [[ -f /opt/OV/bin/OpC/opcmsg ]] ; then
|
||||
/opt/OV/bin/OpC/opcmsg application=QPIDD object=QPIDD msg_text="Number Of Connections To QPID is >= $(( qpidConnLimit - qpidConnCritAlarm )) -- Take IMMEDIATE action to prevent system failure" severity=Critical msg_grp=AWIPS
|
||||
else
|
||||
echo -e "\tERROR - can not find /opt/OV/bin/OpC/opcmsg on $( hostname )" >> ${logDirectory}/${nowTimeDate}-qpid-stat.out
|
||||
fi
|
||||
fi
|
||||
|
||||
echo >> ${logDirectory}/${nowTimeDate}-qpid-stat.out
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@ listen_addresses = '*' # what IP address(es) to listen on;
|
|||
# defaults to 'localhost'; use '*' for all
|
||||
# (change requires restart)
|
||||
port = 5432 # (change requires restart)
|
||||
max_connections = 300 # (change requires restart)
|
||||
max_connections = 400 # (change requires restart)
|
||||
# Note: Increasing max_connections costs ~400 bytes of shared memory per
|
||||
# connection slot, plus lock space (see max_locks_per_transaction).
|
||||
#superuser_reserved_connections = 3 # (change requires restart)
|
||||
|
|
|
@ -24,12 +24,12 @@ BuildRequires: awips2-postgresql = 9.2.3-1.el6
|
|||
BuildRequires: postgresql = 8.4.13-1.el6_3
|
||||
BuildRequires: postgresql-devel = 8.4.13-1.el6_3
|
||||
BuildRequires: postgresql-libs = 8.4.13-1.el6_3
|
||||
BuildRequires: wxGTK = 2.8.12-1.el6.rf
|
||||
BuildRequires: wxGTK-devel = 2.8.12-1.el6.rf
|
||||
BuildRequires: wxGTK = 2.8.12-1
|
||||
BuildRequires: wxGTK-devel = 2.8.12-1
|
||||
|
||||
provides: awips2-pgadmin3
|
||||
requires: awips2-psql = 9.2.3-1
|
||||
requires: wxGTK = 2.8.12-1.el6.rf
|
||||
requires: wxGTK = 2.8.12-1
|
||||
|
||||
%description
|
||||
AWIPS II pgadmin3 Distribution - A custom compilation of the pgadmin3 client compatible with
|
||||
|
|
Loading…
Add table
Reference in a new issue