13.4.1-12 baseline

Former-commit-id: 6a97b4325a [formerly 6a97b4325a [formerly 398b25dee65cd6154c467b657ced5c9d2bada11a]]
Former-commit-id: e53ada66b8
Former-commit-id: bd4f93e859
This commit is contained in:
Steve Harris 2013-05-22 16:42:39 -04:00
parent 2767fd893c
commit 0d9e71aee2
30 changed files with 618 additions and 192 deletions

View file

@ -104,6 +104,7 @@ import com.raytheon.viz.gfe.core.parm.vcparm.VCModuleJobPool;
* 04/11/2013 16028 ryu Fixed setParmsRemoveISCDeps() to not remove * 04/11/2013 16028 ryu Fixed setParmsRemoveISCDeps() to not remove
* modified parms. * modified parms.
* 05/02/2013 #1969 randerso Cleaned up and optimized processing of DBInvChangedNotification * 05/02/2013 #1969 randerso Cleaned up and optimized processing of DBInvChangedNotification
* 05/14/2013 #2004 randerso Improved error handling
* *
* </pre> * </pre>
* *
@ -1073,9 +1074,9 @@ public abstract class AbstractParmManager implements IParmManager {
parmsToAdd.add(p); parmsToAdd.add(p);
} }
} catch (GFEServerException e) { } catch (GFEServerException e) {
statusHandler.handle(Priority.EVENTA, statusHandler.handle(Priority.PROBLEM,
"Failure to instantiate parm in createParmInternal: " "Failure to instantiate parm in createParmInternal: "
+ addParm.getParmID().toString()); + addParm.getParmID().toString(), e);
} }
} }

View file

@ -76,6 +76,7 @@ import com.raytheon.viz.gfe.types.MutableInteger;
* 05/02/13 #1969 randerso Added code to explicitly create the mutable database * 05/02/13 #1969 randerso Added code to explicitly create the mutable database
* if it doesn't exist. Used to just happen by accident * if it doesn't exist. Used to just happen by accident
* when getParmList was called. * when getParmList was called.
* 05/14/13 #2004 randerso Corrected logging levels
* </pre> * </pre>
* *
* @author bphillip * @author bphillip
@ -185,7 +186,7 @@ public class ParmManager extends AbstractParmManager {
@Override @Override
public Parm addParm(ParmID pid, boolean mutableParm, boolean displayable) { public Parm addParm(ParmID pid, boolean mutableParm, boolean displayable) {
if (!isParmInDatabase(pid)) { if (!isParmInDatabase(pid)) {
statusHandler.handle(Priority.EVENTA, statusHandler.handle(Priority.PROBLEM,
"Attempt to load a nonexistent parm: " + pid); "Attempt to load a nonexistent parm: " + pid);
return null; return null;
} }
@ -251,7 +252,7 @@ public class ParmManager extends AbstractParmManager {
for (int i = 0; i < parms.length; i++) { for (int i = 0; i < parms.length; i++) {
if (!this.parms.contains(parms[i])) { if (!this.parms.contains(parms[i])) {
statusHandler.handle( statusHandler.handle(
Priority.EVENTA, Priority.DEBUG,
"Attempt to delete unknown parm:" "Attempt to delete unknown parm:"
+ parms[i].getParmID()); + parms[i].getParmID());
continue; continue;
@ -1170,7 +1171,7 @@ public class ParmManager extends AbstractParmManager {
return createParmInternal(pid, mutableParm, displayable); return createParmInternal(pid, mutableParm, displayable);
} catch (GFEServerException e) { } catch (GFEServerException e) {
statusHandler statusHandler
.handle(Priority.EVENTA, .handle(Priority.PROBLEM,
"Failure to instantiate parm in createParmInternal: " "Failure to instantiate parm in createParmInternal: "
+ pid, e); + pid, e);
return null; return null;

View file

@ -49,6 +49,7 @@ import com.raytheon.uf.viz.core.IDisplayPaneContainer;
import com.raytheon.viz.mpe.core.MPEDataManager; import com.raytheon.viz.mpe.core.MPEDataManager;
import com.raytheon.viz.mpe.core.MPEDataManager.MPEDateInfo; import com.raytheon.viz.mpe.core.MPEDataManager.MPEDateInfo;
import com.raytheon.viz.mpe.ui.MPEDisplayManager; import com.raytheon.viz.mpe.ui.MPEDisplayManager;
import com.raytheon.viz.mpe.ui.TransmitRFCBiasProvider;
import com.raytheon.viz.ui.EditorUtil; import com.raytheon.viz.ui.EditorUtil;
import com.raytheon.viz.ui.dialogs.CaveJFACEDialog; import com.raytheon.viz.ui.dialogs.CaveJFACEDialog;
import com.raytheon.viz.ui.editor.IMultiPaneEditor; import com.raytheon.viz.ui.editor.IMultiPaneEditor;
@ -299,6 +300,7 @@ public class ChooseDataPeriodDialog extends CaveJFACEDialog {
} else { } else {
restore(); restore();
} }
TransmitRFCBiasProvider.setEnabled(true);
} }
}); });

View file

@ -16,6 +16,7 @@ import com.raytheon.uf.common.dataquery.requests.RequestConstraint;
import com.raytheon.uf.common.geospatial.SpatialQueryResult; import com.raytheon.uf.common.geospatial.SpatialQueryResult;
import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.viz.warngen.PreferenceUtil; import com.raytheon.viz.warngen.PreferenceUtil;
import com.raytheon.viz.warngen.gis.Area;
import com.raytheon.viz.warngen.gis.ClosestPoint; import com.raytheon.viz.warngen.gis.ClosestPoint;
import com.raytheon.viz.warngen.gis.GisUtil; import com.raytheon.viz.warngen.gis.GisUtil;
import com.raytheon.viz.warngen.gis.GisUtil.Direction; import com.raytheon.viz.warngen.gis.GisUtil.Direction;
@ -38,7 +39,7 @@ import com.vividsolutions.jts.geom.prep.PreparedGeometryFactory;
* Mar 25, 2013 1810 jsanchez Allowed other values to be accepted as a true value for useDirs. * Mar 25, 2013 1810 jsanchez Allowed other values to be accepted as a true value for useDirs.
* Mar 25, 2013 1605 jsanchez Set ClosestPoint's prepGeom. * Mar 25, 2013 1605 jsanchez Set ClosestPoint's prepGeom.
* Apr 24, 2013 1944 jsanchez Updated calculateLocationPortion visibility to public. * Apr 24, 2013 1944 jsanchez Updated calculateLocationPortion visibility to public.
* May 2, 2013 1963 jsanchez Referenced calculatePortion from GisUtil. * May 2, 2013 1963 jsanchez Referenced calculatePortion from GisUtil if intersection less than DEFAULT_PORTION_TOLERANCE.
* *
* </pre> * </pre>
* *
@ -177,10 +178,17 @@ public class DbAreaSourceDataAdaptor extends AbstractDbSourceDataAdaptor {
PreparedGeometry prepGeom = PreparedGeometryFactory.prepare(geom); PreparedGeometry prepGeom = PreparedGeometryFactory.prepare(geom);
if (prepGeom.intersects(searchArea) && !prepGeom.within(searchArea)) { if (prepGeom.intersects(searchArea) && !prepGeom.within(searchArea)) {
Geometry intersection = searchArea.intersection(geom); Geometry intersection = searchArea.intersection(geom);
partOfArea = GisUtil.asStringList(GisUtil.calculatePortion(
geom, intersection, false, false));
if (attributes.get(suppressedDirectionsField) != null) { double areaIntersection = intersection.getArea();
double tolerCheck = geom.getArea()
* Area.DEFAULT_PORTION_TOLERANCE;
if (areaIntersection < tolerCheck) {
partOfArea = GisUtil.asStringList(GisUtil.calculatePortion(
geom, intersection, false, false));
}
if ((partOfArea != null)
&& (attributes.get(suppressedDirectionsField) != null)) {
String suppressedDirections = String.valueOf( String suppressedDirections = String.valueOf(
attributes.get(suppressedDirectionsField)) attributes.get(suppressedDirectionsField))
.toLowerCase(); .toLowerCase();

View file

@ -50,7 +50,7 @@ import com.vividsolutions.jts.geom.Geometry;
* Feb 29, 2012 #13596 Qinglu Lin Added restoreAlaskaLon(). * Feb 29, 2012 #13596 Qinglu Lin Added restoreAlaskaLon().
* May 9, 2012 #14887 Qinglu Lin Change 0.1 to 0.16875f for PORTION_OF_CENTER; * May 9, 2012 #14887 Qinglu Lin Change 0.1 to 0.16875f for PORTION_OF_CENTER;
* 0.10 to 0.0625 for EXTREME_DELTA; Added/modified code. * 0.10 to 0.0625 for EXTREME_DELTA; Added/modified code.
* May 1, 2013 1963 jsanchez Refactored calculatePortion to match A1. * May 1, 2013 1963 jsanchez Refactored calculatePortion to match A1. Do not allow 'Central' to be included if East and West is included.
* </pre> * </pre>
* *
* @author chammack * @author chammack
@ -100,7 +100,8 @@ public class GisUtil {
} }
// Test for central by not being near adjacent borders. // Test for central by not being near adjacent borders.
if (iQuad.centralGeom != null && iQuad.centralGeom.contains(warnedArea)) { if (useCentral && iQuad.centralGeom != null
&& iQuad.centralGeom.contains(warnedArea)) {
portions.add(Direction.CENTRAL); portions.add(Direction.CENTRAL);
return portions; return portions;
} }
@ -146,7 +147,7 @@ public class GisUtil {
} }
// Three typical quadrants in use. // Three typical quadrants in use.
if (iQuad.q == 3 && iQuad.q != 3) { if (iQuad.q == 3 && iQuad.qq != 3) {
if (iQuad.ne != 1 && (iQuad.ssw || iQuad.wsw)) { if (iQuad.ne != 1 && (iQuad.ssw || iQuad.wsw)) {
portions.add(Direction.SOUTH); portions.add(Direction.SOUTH);
portions.add(Direction.WEST); portions.add(Direction.WEST);
@ -240,9 +241,7 @@ public class GisUtil {
portions.add(Direction.EAST); portions.add(Direction.EAST);
} else if (iQuad.wnw || iQuad.wsw) { } else if (iQuad.wnw || iQuad.wsw) {
portions.add(Direction.WEST); portions.add(Direction.WEST);
} } else if (iQuad.cc) {
if (iQuad.cc) {
portions.add(Direction.CENTRAL); portions.add(Direction.CENTRAL);
} }

View file

@ -78,15 +78,34 @@ public class ImpactedQuadrants {
protected int sw; protected int sw;
/** /**
* q is the accumulation of the quadrants, qq is the accumulation of the sub * q is the accumulation of the quadrants,
* quadrants
*/ */
protected int q, qq; protected int q;
/** /**
* Extreme portions for north, south, east, and west. * qq is the accumulation of the sub quadrants
*/ */
protected int nnx, ssx, eex, wwx; protected int qq;
/**
* Extreme portions for north.
*/
protected int nnx;
/**
* Extreme portions for south.
*/
protected int ssx;
/**
* Extreme portions for east.
*/
protected int eex;
/**
* Extreme portions for west.
*/
protected int wwx;
/** /**
* Accumulation of extreme portions. * Accumulation of extreme portions.

View file

@ -137,6 +137,8 @@ import com.vividsolutions.jts.geom.Polygon;
* Mar 28, 2013 DR 15974 D. Friedman Do not track removed GIDs. * Mar 28, 2013 DR 15974 D. Friedman Do not track removed GIDs.
* Apr 11, 2013 1894 jsanchez Removed the ability to load/unload maps via bullet selection. This will be resolved in a follow on ticket. * Apr 11, 2013 1894 jsanchez Removed the ability to load/unload maps via bullet selection. This will be resolved in a follow on ticket.
* Apr 30, 2013 DR 16118 Qinglu Lin For reissue (followup NEW), called redrawFromWarned() in okPressed(). * Apr 30, 2013 DR 16118 Qinglu Lin For reissue (followup NEW), called redrawFromWarned() in okPressed().
* May 17, 2013 DR 16118 Qinglu Lin Copied the fix from 13.4.1.
* May 17, 2013 2012 jsanchez Preserved the warned area if the hatched area source is the same when changing templates.
* </pre> * </pre>
* *
* @author chammack * @author chammack
@ -1406,7 +1408,7 @@ public class WarngenDialog extends CaveSWTDialog implements
return; return;
String lastAreaSource = warngenLayer.getConfiguration() String lastAreaSource = warngenLayer.getConfiguration()
.getGeospatialConfig().getAreaSource(); .getHatchedAreaSource().getAreaSource();
// reset values // reset values
setPolygonLocked(false); setPolygonLocked(false);
@ -1468,12 +1470,17 @@ public class WarngenDialog extends CaveSWTDialog implements
warngenLayer.clearWarningGeometries(); warngenLayer.clearWarningGeometries();
} }
boolean snapHatchedAreaToPolygon = !warngenLayer.getConfiguration() boolean isDifferentAreaSources = !warngenLayer.getConfiguration()
.getGeospatialConfig().getAreaSource() .getHatchedAreaSource().getAreaSource()
.equalsIgnoreCase(lastAreaSource); .equalsIgnoreCase(lastAreaSource);
boolean snapHatchedAreaToPolygon = isDifferentAreaSources;
boolean preservedSelection = !isDifferentAreaSources;
// If template has a different hatched area source from the previous
// template, then the warned area would be based on the polygon and not
// preserved.
try { try {
warngenLayer.updateWarnedAreas(snapHatchedAreaToPolygon); warngenLayer.updateWarnedAreas(snapHatchedAreaToPolygon,
preservedSelection);
} catch (VizException e1) { } catch (VizException e1) {
statusHandler.handle(Priority.PROBLEM, "WarnGen Error", e1); statusHandler.handle(Priority.PROBLEM, "WarnGen Error", e1);
} }

View file

@ -174,6 +174,8 @@ import com.vividsolutions.jts.io.WKTReader;
* 04/12/1013 DR 16045 Qinglu Lin Updated AreaHatcher's run() by calling removeDuplicateCoordinate(). * 04/12/1013 DR 16045 Qinglu Lin Updated AreaHatcher's run() by calling removeDuplicateCoordinate().
* 04/23/1013 DR 16064 Qinglu Lin Added removeDuplicateGid() and applies it in populateStrings(). * 04/23/1013 DR 16064 Qinglu Lin Added removeDuplicateGid() and applies it in populateStrings().
* 04/24/2013 1943 jsanchez Replaced used of areaConfig with areaSource. * 04/24/2013 1943 jsanchez Replaced used of areaConfig with areaSource.
* 05/16/2013 2008 jsanchez Allowed warned areas for follow ups to be resized to less than 10%
* 05/17/2013 DR 16064 Qinglu Lin Merged the fix done in 13.4.1.
* </pre> * </pre>
* *
* @author mschenke * @author mschenke
@ -1505,11 +1507,12 @@ public class WarngenLayer extends AbstractStormTrackResource {
// Snap back to polygon // Snap back to polygon
state.setWarningPolygon(localToLatLon((Polygon) oldWarningPolygon)); state.setWarningPolygon(localToLatLon((Polygon) oldWarningPolygon));
newHatchedArea = (Geometry) oldWarningArea.clone(); newHatchedArea = (Geometry) oldWarningArea.clone();
} else if (areaPercent < 10 && state.isMarked()) { } else if (oldWarningPolygon.intersects(warningPolygon) == false
&& areaPercent < 10 && state.isMarked()) {
// snap back to last valid user selected area // snap back to last valid user selected area
state.setWarningPolygon((Polygon) state state.setWarningPolygon((Polygon) state
.getMarkedWarningPolygon().clone()); .getMarkedWarningPolygon().clone());
newHatchedArea = latLonToLocal(state.getMarkedWarningArea()); newHatchedArea = state.getMarkedWarningArea();
state.resetMarked(); state.resetMarked();
} else if (warningPolygon != null) { } else if (warningPolygon != null) {
// want intersection of warningPolygon and oldWarningArea // want intersection of warningPolygon and oldWarningArea
@ -2959,11 +2962,12 @@ public class WarngenLayer extends AbstractStormTrackResource {
} }
/** /**
* Some counties/forecast zones have two GIDs, one is for the large portion of that * Some counties/forecast zones have two GIDs, one is for the large portion
* county and the other is for the small portion, e.g., inlets of a bay. Prince William * of that county and the other is for the small portion, e.g., inlets of a
* County, Virginia is such an example. As WarnGen needs to mark a hatched county with * bay. Prince William County, Virginia is such an example. As WarnGen needs
* only one W, one of the GIDs needs to be filtered out. The approach in the method is * to mark a hatched county with only one W, one of the GIDs needs to be
* to remove the GID for the area of smaller size. * filtered out. The approach in the method is to remove the GID for the
* area of smaller size.
*/ */
private Set<String> removeDuplicateGid(Set<String> prefixes) { private Set<String> removeDuplicateGid(Set<String> prefixes) {
@ -2981,7 +2985,7 @@ public class WarngenLayer extends AbstractStormTrackResource {
for (GeospatialData f : geoData.features) { for (GeospatialData f : geoData.features) {
fips = getFips(f); fips = getFips(f);
Geometry geom = f.geometry; Geometry geom = f.geometry;
if(prefix.equals(GeometryUtil.getPrefix(geom.getUserData()))) { if (prefix.equals(GeometryUtil.getPrefix(geom.getUserData()))) {
size = geom.getArea(); size = geom.getArea();
if (fipsSize.containsKey(fips)) { if (fipsSize.containsKey(fips)) {
if (fipsSize.get(fips) < size) { if (fipsSize.get(fips) < size) {
@ -2998,5 +3002,4 @@ public class WarngenLayer extends AbstractStormTrackResource {
} }
return new HashSet<String>(namePrefix.values()); return new HashSet<String>(namePrefix.values());
} }
} }

View file

@ -49,6 +49,9 @@
class="com.raytheon.edex.plugin.gfe.cache.d2dparms.D2DParmIdCache" class="com.raytheon.edex.plugin.gfe.cache.d2dparms.D2DParmIdCache"
factory-method="getInstance" /> factory-method="getInstance" />
<bean id="gridParmManager"
class="com.raytheon.edex.plugin.gfe.server.GridParmManager" />
<camelContext id="gfe-common-camel" xmlns="http://camel.apache.org/schema/spring" <camelContext id="gfe-common-camel" xmlns="http://camel.apache.org/schema/spring"
errorHandlerRef="errorHandler"> errorHandlerRef="errorHandler">
@ -94,5 +97,17 @@
</doCatch> </doCatch>
</doTry> </doTry>
</route> </route>
<route id="notifyGridParmManager">
<from uri="jms-generic:topic:edex.alerts.gfe" />
<doTry>
<bean ref="serializationUtil" method="transformFromThrift" />
<bean ref="gridParmManager" method="processNotification" />
<doCatch>
<exception>java.lang.Throwable</exception>
<to uri="log:gridParmManager?level=ERROR&amp;showBody=false&amp;showCaughtException=true&amp;showStackTrace=true"/>
</doCatch>
</doTry>
</route>
</camelContext> </camelContext>
</beans> </beans>

View file

@ -21,6 +21,7 @@
package com.raytheon.edex.plugin.gfe.cache.d2dparms; package com.raytheon.edex.plugin.gfe.cache.d2dparms;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
@ -40,11 +41,13 @@ import com.raytheon.edex.plugin.gfe.server.database.D2DSatDatabase;
import com.raytheon.edex.plugin.gfe.server.database.D2DSatDatabaseManager; import com.raytheon.edex.plugin.gfe.server.database.D2DSatDatabaseManager;
import com.raytheon.edex.plugin.gfe.server.database.GridDatabase; import com.raytheon.edex.plugin.gfe.server.database.GridDatabase;
import com.raytheon.edex.plugin.gfe.server.notify.GfeIngestNotificationFilter; import com.raytheon.edex.plugin.gfe.server.notify.GfeIngestNotificationFilter;
import com.raytheon.edex.plugin.gfe.util.SendNotifications;
import com.raytheon.uf.common.dataplugin.PluginException; import com.raytheon.uf.common.dataplugin.PluginException;
import com.raytheon.uf.common.dataplugin.gfe.db.objects.DatabaseID; import com.raytheon.uf.common.dataplugin.gfe.db.objects.DatabaseID;
import com.raytheon.uf.common.dataplugin.gfe.db.objects.ParmID; import com.raytheon.uf.common.dataplugin.gfe.db.objects.ParmID;
import com.raytheon.uf.common.dataplugin.gfe.exception.GfeException; import com.raytheon.uf.common.dataplugin.gfe.exception.GfeException;
import com.raytheon.uf.common.dataplugin.gfe.server.message.ServerResponse; import com.raytheon.uf.common.dataplugin.gfe.server.message.ServerResponse;
import com.raytheon.uf.common.dataplugin.gfe.server.notify.DBInvChangeNotification;
import com.raytheon.uf.common.dataplugin.gfe.server.notify.GridUpdateNotification; import com.raytheon.uf.common.dataplugin.gfe.server.notify.GridUpdateNotification;
import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus;
@ -68,6 +71,7 @@ import com.raytheon.uf.edex.site.SiteAwareRegistry;
* GridUpdateNotifications. * GridUpdateNotifications.
* Mar 20, 2013 #1774 randerso Changed to use GFDD2DDao * Mar 20, 2013 #1774 randerso Changed to use GFDD2DDao
* Apr 01, 2013 #1774 randerso Moved wind component checking to GfeIngestNotificaionFilter * Apr 01, 2013 #1774 randerso Moved wind component checking to GfeIngestNotificaionFilter
* May 14, 2013 #2004 randerso Added DBInvChangeNotifications when D2D data is purged
* *
* </pre> * </pre>
* *
@ -342,9 +346,13 @@ public class D2DParmIdCache {
putParmIDList(parmIds); putParmIDList(parmIds);
List<DatabaseID> currentDbInventory = this.getDatabaseIDs(); List<DatabaseID> currentDbInventory = this.getDatabaseIDs();
dbsToRemove.removeAll(currentDbInventory); dbsToRemove.removeAll(currentDbInventory);
List<DBInvChangeNotification> invChgList = new ArrayList<DBInvChangeNotification>(
dbsToRemove.size());
for (DatabaseID dbId : dbsToRemove) { for (DatabaseID dbId : dbsToRemove) {
GridParmManager.removeDbFromMap(dbId); invChgList.add(new DBInvChangeNotification(null, Arrays
.asList(dbId), siteID));
} }
SendNotifications.send(invChgList);
// inform GfeIngestNotificationFilter of removed dbs // inform GfeIngestNotificationFilter of removed dbs
GfeIngestNotificationFilter.purgeDbs(dbsToRemove); GfeIngestNotificationFilter.purgeDbs(dbsToRemove);

View file

@ -92,12 +92,13 @@ import com.raytheon.uf.edex.database.purge.PurgeLogger;
* smartInit hdf5 data * smartInit hdf5 data
* 03/07/13 #1773 njensen Logged commitGrid() times * 03/07/13 #1773 njensen Logged commitGrid() times
* 03/15/13 #1795 njensen Sped up commitGrid() * 03/15/13 #1795 njensen Sped up commitGrid()
* 03/20/2013 #1774 randerso Removed dead method, changed to use new * 03/20/13 #1774 randerso Removed dead method, changed to use new
* D2DGridDatabase constructor * D2DGridDatabase constructor
* 04/23/2013 #1949 rjpeter Added inventory retrieval for a given time range. * 04/23/13 #1949 rjpeter Added inventory retrieval for a given time range.
* 05/02/13 #1969 randerso Fixed possible null pointer in getParmList * 05/02/13 #1969 randerso Fixed possible null pointer in getParmList
* Removed inventory from DBInvChangedNotification * Removed inventory from DBInvChangedNotification
* 05/03/13 #1974 randerso Fixed error logging to include stack trace * 05/03/13 #1974 randerso Fixed error logging to include stack trace
* 05/14/13 #2004 randerso Added methods to synch GridParmManager across JVMs
* </pre> * </pre>
* *
* @author bphillip * @author bphillip
@ -1189,7 +1190,7 @@ public class GridParmManager {
* *
* @param dbId * @param dbId
* The database ID of the database to retrieve * The database ID of the database to retrieve
* @return The Grid Database * @return The Grid Database or null if database not available
* @throws GfeException * @throws GfeException
*/ */
public static GridDatabase getDb(DatabaseID dbId) throws GfeException { public static GridDatabase getDb(DatabaseID dbId) throws GfeException {
@ -1398,4 +1399,34 @@ public class GridParmManager {
dbMap.remove(id); dbMap.remove(id);
} }
public static void processNotification(Object msg) {
if (msg instanceof List) {
for (Object obj : (List<?>) msg) {
if (obj instanceof GfeNotification) {
handleGfeNotification((GfeNotification) obj);
}
}
} else if (msg instanceof GfeNotification) {
handleGfeNotification((GfeNotification) msg);
}
}
private static void handleGfeNotification(GfeNotification notif) {
if (notif instanceof DBInvChangeNotification) {
DBInvChangeNotification invChanged = (DBInvChangeNotification) notif;
for (DatabaseID dbId : invChanged.getAdditions()) {
try {
getDb(dbId);
} catch (GfeException e) {
statusHandler.handle(Priority.PROBLEM,
e.getLocalizedMessage(), e);
}
}
for (DatabaseID dbId : invChanged.getDeletions()) {
removeDbFromMap(dbId);
}
}
}
} }

View file

@ -26,6 +26,7 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import javax.xml.bind.JAXB; import javax.xml.bind.JAXB;
@ -50,8 +51,11 @@ import com.raytheon.uf.common.status.UFStatus.Priority;
* 11/16/2009 #3120 rjpeter Initial version * 11/16/2009 #3120 rjpeter Initial version
* 11/21/2009 #3576 rjpeter Added group capability * 11/21/2009 #3576 rjpeter Added group capability
* 04/17/2013 #1913 randerso Moved to common * 04/17/2013 #1913 randerso Moved to common
* 05/16/2013 #2010 randerso Added read/write locking to mutable maps
* *
* &#064;author rjpeter * </pre>
*
* @author rjpeter
* @version 1.0 * @version 1.0
*/ */
public class LevelMappingFactory { public class LevelMappingFactory {
@ -65,11 +69,15 @@ public class LevelMappingFactory {
private Map<String, LevelMapping> keyToLevelMappings = new HashMap<String, LevelMapping>(); private Map<String, LevelMapping> keyToLevelMappings = new HashMap<String, LevelMapping>();
private boolean levelToLevelMappingsInitialized = false; private volatile boolean levelToLevelMappingsInitialized = false;
private ReentrantReadWriteLock levelToLevelLock = new ReentrantReadWriteLock();
private Map<Level, LevelMapping> levelToLevelMappings = new HashMap<Level, LevelMapping>(); private Map<Level, LevelMapping> levelToLevelMappings = new HashMap<Level, LevelMapping>();
private boolean groupToMasterLevelsInitialized = false; private volatile boolean groupToMasterLevelsInitialized = false;
private ReentrantReadWriteLock groupToMasterLevelsLock = new ReentrantReadWriteLock();
private Map<String, Map<MasterLevel, Set<Level>>> groupToMasterLevels = new HashMap<String, Map<MasterLevel, Set<Level>>>(); private Map<String, Map<MasterLevel, Set<Level>>> groupToMasterLevels = new HashMap<String, Map<MasterLevel, Set<Level>>>();
@ -110,6 +118,14 @@ public class LevelMappingFactory {
} }
} }
try {
initializeLevelToLevelMappings();
initializeGroupToMasterLevels();
} catch (CommunicationException e) {
statusHandler.error("Error initializing LevelMappingFactory for: "
+ filePath, e);
}
long finish = System.currentTimeMillis(); long finish = System.currentTimeMillis();
System.out.println("LevelMappingFactory initialization took [" System.out.println("LevelMappingFactory initialization took ["
+ (finish - start) + "] ms"); + (finish - start) + "] ms");
@ -124,7 +140,14 @@ public class LevelMappingFactory {
if (!levelToLevelMappingsInitialized) { if (!levelToLevelMappingsInitialized) {
initializeLevelToLevelMappings(); initializeLevelToLevelMappings();
} }
return levelToLevelMappings.get(level);
levelToLevelLock.readLock().lock();
try {
LevelMapping retVal = levelToLevelMappings.get(level);
return retVal;
} finally {
levelToLevelLock.readLock().unlock();
}
} }
public Collection<LevelMapping> getAllLevelMappings() { public Collection<LevelMapping> getAllLevelMappings() {
@ -135,7 +158,14 @@ public class LevelMappingFactory {
if (!levelToLevelMappingsInitialized) { if (!levelToLevelMappingsInitialized) {
initializeLevelToLevelMappings(); initializeLevelToLevelMappings();
} }
return levelToLevelMappings.keySet();
levelToLevelLock.readLock().lock();
try {
Set<Level> retVal = levelToLevelMappings.keySet();
return retVal;
} finally {
levelToLevelLock.readLock().unlock();
}
} }
public Map<MasterLevel, Set<Level>> getLevelMapForGroup(String group) public Map<MasterLevel, Set<Level>> getLevelMapForGroup(String group)
@ -143,61 +173,85 @@ public class LevelMappingFactory {
if (!groupToMasterLevelsInitialized) { if (!groupToMasterLevelsInitialized) {
initializeGroupToMasterLevels(); initializeGroupToMasterLevels();
} }
return groupToMasterLevels.get(group);
groupToMasterLevelsLock.readLock().lock();
try {
Map<MasterLevel, Set<Level>> retVal = groupToMasterLevels
.get(group);
return retVal;
} finally {
groupToMasterLevelsLock.readLock().unlock();
}
} }
private void initializeLevelToLevelMappings() throws CommunicationException { private void initializeLevelToLevelMappings() throws CommunicationException {
for (LevelMapping mapping : keyToLevelMappings.values()) { // acquire the write lock
String group = mapping.getGroup(); levelToLevelLock.writeLock().lock();
try {
for (Level l : mapping.getLevels()) { // verify some other thread hasn't already initialized
if (levelToLevelMappings.containsKey(l)) { if (!levelToLevelMappingsInitialized) {
LevelMapping oldMapping = levelToLevelMappings.get(l); for (LevelMapping mapping : keyToLevelMappings.values()) {
// Only replace the old level mapping if we have less for (Level l : mapping.getLevels()) {
// levels than the old mapping // Only replace the old level mapping if we have
// This should cause the most specific mapping to be // less levels than the old mapping
// used // This should cause the most specific mapping to be
if (mapping.getLevels().size() < oldMapping.getLevels() // used
.size()) { LevelMapping oldMapping = levelToLevelMappings.get(l);
levelToLevelMappings.put(l, mapping); if (oldMapping == null
|| mapping.getLevels().size() < oldMapping
.getLevels().size()) {
levelToLevelMappings.put(l, mapping);
}
} }
} else {
levelToLevelMappings.put(l, mapping);
} }
levelToLevelMappingsInitialized = true;
} }
} finally {
// release the write lock
levelToLevelLock.writeLock().unlock();
} }
levelToLevelMappingsInitialized = true;
} }
private void initializeGroupToMasterLevels() throws CommunicationException { private void initializeGroupToMasterLevels() throws CommunicationException {
for (LevelMapping mapping : keyToLevelMappings.values()) { // acquire the write lock
String group = mapping.getGroup(); groupToMasterLevelsLock.writeLock().lock();
Map<MasterLevel, Set<Level>> masterLevels = null; try {
// verify some other thread hasn't already initialized
if (!groupToMasterLevelsInitialized) {
for (LevelMapping mapping : keyToLevelMappings.values()) {
String group = mapping.getGroup();
Map<MasterLevel, Set<Level>> masterLevels = null;
if (group != null) { if (group != null) {
masterLevels = groupToMasterLevels.get(mapping.getGroup()); masterLevels = groupToMasterLevels.get(mapping
if (masterLevels == null) { .getGroup());
masterLevels = new HashMap<MasterLevel, Set<Level>>(); if (masterLevels == null) {
groupToMasterLevels.put(group, masterLevels); masterLevels = new HashMap<MasterLevel, Set<Level>>();
} groupToMasterLevels.put(group, masterLevels);
} }
for (Level l : mapping.getLevels()) {
// populate grouping map
if (masterLevels != null) {
MasterLevel ml = l.getMasterLevel();
Set<Level> levels = masterLevels.get(ml);
if (levels == null) {
levels = new HashSet<Level>();
masterLevels.put(ml, levels);
} }
levels.add(l); for (Level l : mapping.getLevels()) {
// populate grouping map
if (masterLevels != null) {
MasterLevel ml = l.getMasterLevel();
Set<Level> levels = masterLevels.get(ml);
if (levels == null) {
levels = new HashSet<Level>();
masterLevels.put(ml, levels);
}
levels.add(l);
}
}
} }
groupToMasterLevelsInitialized = true;
} }
} finally {
// release the write lock
groupToMasterLevelsLock.writeLock().unlock();
} }
groupToMasterLevelsInitialized = true;
} }
} }

View file

@ -21,7 +21,9 @@
package gov.noaa.nws.ncep.ui.nsharp.background; package gov.noaa.nws.ncep.ui.nsharp.background;
import gov.noaa.nws.ncep.edex.common.sounding.NcSoundingLayer; import gov.noaa.nws.ncep.edex.common.sounding.NcSoundingLayer;
import gov.noaa.nws.ncep.ui.nsharp.NsharpConfigManager;
import gov.noaa.nws.ncep.ui.nsharp.NsharpConstants; import gov.noaa.nws.ncep.ui.nsharp.NsharpConstants;
import gov.noaa.nws.ncep.ui.nsharp.NsharpGraphProperty;
import gov.noaa.nws.ncep.ui.nsharp.NsharpLineProperty; import gov.noaa.nws.ncep.ui.nsharp.NsharpLineProperty;
import gov.noaa.nws.ncep.ui.nsharp.display.NsharpSkewTPaneDescriptor; import gov.noaa.nws.ncep.ui.nsharp.display.NsharpSkewTPaneDescriptor;
@ -58,6 +60,7 @@ public class NsharpIcingPaneBackground extends NsharpGenericPaneBackground {
private int paneHeight = NsharpConstants.SKEWT_HEIGHT; private int paneHeight = NsharpConstants.SKEWT_HEIGHT;
private float yMagFactor=1; private float yMagFactor=1;
private float xMagFactor=1; private float xMagFactor=1;
private NsharpGraphProperty graphConfigProperty;
public NsharpIcingPaneBackground(NsharpSkewTPaneDescriptor desc) { public NsharpIcingPaneBackground(NsharpSkewTPaneDescriptor desc) {
super(); super();
@ -66,7 +69,8 @@ public class NsharpIcingPaneBackground extends NsharpGenericPaneBackground {
pe = new PixelExtent(this.rectangle); pe = new PixelExtent(this.rectangle);
world = new WGraphics(this.rectangle); world = new WGraphics(this.rectangle);
NsharpConfigManager configMgr = NsharpConfigManager.getInstance();
graphConfigProperty = configMgr.retrieveNsharpConfigStoreFromFs().getGraphProperty();
//System.out.println("NsharpIcingPaneBackground created"); //System.out.println("NsharpIcingPaneBackground created");
this.desc = desc; this.desc = desc;
} }
@ -372,7 +376,11 @@ public class NsharpIcingPaneBackground extends NsharpGenericPaneBackground {
double pX= world.mapX( NsharpConstants.ICING_RELATIVE_HUMIDITY_RIGHT); double pX= world.mapX( NsharpConstants.ICING_RELATIVE_HUMIDITY_RIGHT);
if(pX < xmax) if(pX < xmax)
xmax = pX; xmax = pX;
double dispX = xmax - 30 * currentZoomLevel * xMagFactor;
double windBarbSizfactor = graphConfigProperty.getWindBarbSize()/2.2f;
if(windBarbSizfactor < 1)
windBarbSizfactor=1;
double dispX = xmax - 50 * currentZoomLevel * xMagFactor* windBarbSizfactor;
Coordinate cumap = world.unMap(dispX,ymax); Coordinate cumap = world.unMap(dispX,ymax);

View file

@ -68,6 +68,8 @@ public class NsharpSkewTPaneBackground extends NsharpGenericPaneBackground {
private double currentZoomLevel=1; private double currentZoomLevel=1;
private int skewtWidth=NsharpConstants.SKEWT_WIDTH; private int skewtWidth=NsharpConstants.SKEWT_WIDTH;
private float xRatio=1; private float xRatio=1;
private NsharpGraphProperty graphConfigProperty;
private Float[]mainMixingRatios = private Float[]mainMixingRatios =
{ .5f, 1f, 2f, 5f, 10f, 20f}; { .5f, 1f, 2f, 5f, 10f, 20f};
private float[]mixingRatios = private float[]mixingRatios =
@ -80,7 +82,7 @@ public class NsharpSkewTPaneBackground extends NsharpGenericPaneBackground {
1000, 100, 10, -40, 273, 20); 1000, 100, 10, -40, 273, 20);
private static final double Rd = 0.2870586d; private static final double Rd = 0.2870586d;
private NsharpGraphProperty graphConfigProperty;
private int tempOffset = 0; private int tempOffset = 0;
public NsharpSkewTPaneBackground(NsharpSkewTPaneDescriptor desc) { public NsharpSkewTPaneBackground(NsharpSkewTPaneDescriptor desc) {
super(); super();
@ -96,8 +98,9 @@ public class NsharpSkewTPaneBackground extends NsharpGenericPaneBackground {
NsharpConstants.right, NsharpConstants.bottom); NsharpConstants.right, NsharpConstants.bottom);
//System.out.println("NsharpSkewTPaneBackground created"); //System.out.println("NsharpSkewTPaneBackground created");
this.desc = desc; this.desc = desc;
NsharpConfigManager configMgr = NsharpConfigManager.getInstance(); NsharpConfigManager configMgr = NsharpConfigManager.getInstance();
graphConfigProperty = configMgr.retrieveNsharpConfigStoreFromFs().getGraphProperty(); graphConfigProperty = configMgr.retrieveNsharpConfigStoreFromFs().getGraphProperty();
pressureMainList = Arrays.asList(NsharpConstants.PRESSURE_MAIN_LEVELS); pressureMainList = Arrays.asList(NsharpConstants.PRESSURE_MAIN_LEVELS);
mixRatioMainList = Arrays.asList(mainMixingRatios); mixRatioMainList = Arrays.asList(mainMixingRatios);
} }
@ -363,7 +366,7 @@ public class NsharpSkewTPaneBackground extends NsharpGenericPaneBackground {
VerticalAlignment.MIDDLE, null); VerticalAlignment.MIDDLE, null);
} }
else{ else{
// only mark pressure line to a small length // only mark pressure line to a small lengthprivate NsharpGraphProperty graphConfigProperty;
xend = xmin+15* currentZoomLevel*xRatio; xend = xmin+15* currentZoomLevel*xRatio;
} }
target.drawLine(xmin, world.mapY(coor.y), 0.0, xend, target.drawLine(xmin, world.mapY(coor.y), 0.0, xend,
@ -825,7 +828,10 @@ public class NsharpSkewTPaneBackground extends NsharpGenericPaneBackground {
double pX= world.mapX( NsharpConstants.right); double pX= world.mapX( NsharpConstants.right);
if(pX < xmax) if(pX < xmax)
xmax = pX; xmax = pX;
double dispX = xmax - 20 * currentZoomLevel * xRatio; double windBarbSizfactor = graphConfigProperty.getWindBarbSize()/1.6f;
if(windBarbSizfactor < 1)
windBarbSizfactor=1;
double dispX = xmax - 40 * currentZoomLevel * xRatio * windBarbSizfactor;
Coordinate cumap = world.unMap(dispX,ymax); Coordinate cumap = world.unMap(dispX,ymax);
return cumap.x; return cumap.x;

View file

@ -20,7 +20,9 @@
*/ */
package gov.noaa.nws.ncep.ui.nsharp.background; package gov.noaa.nws.ncep.ui.nsharp.background;
import gov.noaa.nws.ncep.edex.common.sounding.NcSoundingLayer; import gov.noaa.nws.ncep.edex.common.sounding.NcSoundingLayer;
import gov.noaa.nws.ncep.ui.nsharp.NsharpConfigManager;
import gov.noaa.nws.ncep.ui.nsharp.NsharpConstants; import gov.noaa.nws.ncep.ui.nsharp.NsharpConstants;
import gov.noaa.nws.ncep.ui.nsharp.NsharpGraphProperty;
import gov.noaa.nws.ncep.ui.nsharp.NsharpLineProperty; import gov.noaa.nws.ncep.ui.nsharp.NsharpLineProperty;
import gov.noaa.nws.ncep.ui.nsharp.display.NsharpSkewTPaneDescriptor; import gov.noaa.nws.ncep.ui.nsharp.display.NsharpSkewTPaneDescriptor;
@ -54,6 +56,7 @@ public class NsharpTurbulencePaneBackground extends NsharpGenericPaneBackground{
private int paneHeight = NsharpConstants.SKEWT_HEIGHT; private int paneHeight = NsharpConstants.SKEWT_HEIGHT;
private float yMagFactor=1; private float yMagFactor=1;
private float xMagFactor=1; private float xMagFactor=1;
private NsharpGraphProperty graphConfigProperty;
public NsharpTurbulencePaneBackground(NsharpSkewTPaneDescriptor desc) { public NsharpTurbulencePaneBackground(NsharpSkewTPaneDescriptor desc) {
super(); super();
@ -61,6 +64,8 @@ public class NsharpTurbulencePaneBackground extends NsharpGenericPaneBackground{
NsharpConstants.TURB_WIDTH, NsharpConstants.TURB_HEIGHT); NsharpConstants.TURB_WIDTH, NsharpConstants.TURB_HEIGHT);
pe = new PixelExtent(this.rectangle); pe = new PixelExtent(this.rectangle);
world = new WGraphics(this.rectangle); world = new WGraphics(this.rectangle);
NsharpConfigManager configMgr = NsharpConfigManager.getInstance();
graphConfigProperty = configMgr.retrieveNsharpConfigStoreFromFs().getGraphProperty();
this.desc = desc; this.desc = desc;
} }
@Override @Override
@ -347,7 +352,10 @@ public class NsharpTurbulencePaneBackground extends NsharpGenericPaneBackground{
double pX= world.mapX( NsharpConstants.TURBULENCE_LN_RICHARDSON_NUMBER_LEFT); double pX= world.mapX( NsharpConstants.TURBULENCE_LN_RICHARDSON_NUMBER_LEFT);
if(pX < xmax) if(pX < xmax)
xmax = pX; xmax = pX;
double dispX = xmax - 50 * currentZoomLevel * xMagFactor; double windBarbSizfactor = graphConfigProperty.getWindBarbSize()/2f;
if(windBarbSizfactor < 1)
windBarbSizfactor=1;
double dispX = xmax - 50 * currentZoomLevel * xMagFactor* windBarbSizfactor;
Coordinate cumap = world.unMap(dispX,ymax); Coordinate cumap = world.unMap(dispX,ymax);

View file

@ -784,7 +784,7 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource{
WGraphics world, RGB iicolor, List<NcSoundingLayer> sndLys, double xPosition, double botPress)throws VizException { WGraphics world, RGB iicolor, List<NcSoundingLayer> sndLys, double xPosition, double botPress)throws VizException {
if(sndLys.size()< 4) if(sndLys.size()< 4)
return; return;
ArrayList<List<LineStroke>> windList = new ArrayList<List<LineStroke>>(); //ArrayList<List<LineStroke>> windList = new ArrayList<List<LineStroke>>();
List<windPickedElement> layerStateList = new ArrayList<windPickedElement>(); List<windPickedElement> layerStateList = new ArrayList<windPickedElement>();
float lastHeight = -9999; float lastHeight = -9999;
RGB icolor = iicolor;//graphConfigProperty.getWindBarbColor(); RGB icolor = iicolor;//graphConfigProperty.getWindBarbColor();
@ -843,10 +843,10 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource{
} }
double windX = xPosition; double windX = xPosition;
double windY=0; double windY=0;
double barbScaleFactorx, barbScaleFactory; //double barbScaleFactorx, barbScaleFactory;
barbScaleFactorx = zoomLevel; //barbScaleFactorx = zoomLevel;
barbScaleFactory = zoomLevel; // barbScaleFactory = zoomLevel;
List<double[]> locations = new ArrayList<double[]>(); //List<double[]> locations = new ArrayList<double[]>();
//System.out.println("zoom="+zoomLevel +"world viewYmin="+world.getViewYmin()+" viewYmax="+world.getViewYmax()+" wolrdYmin="+ world.getWorldYmin()+" wolrdYmax="+ world.getWorldYmax() //System.out.println("zoom="+zoomLevel +"world viewYmin="+world.getViewYmin()+" viewYmax="+world.getViewYmax()+" wolrdYmin="+ world.getWorldYmin()+" wolrdYmax="+ world.getWorldYmax()
// +"world viewXmin="+world.getViewXmin()+" viewXmax="+world.getViewXmax()+" wolrdXmin="+ world.getWorldXmin()+" wolrdXmax="+ world.getWorldXmax()); // +"world viewXmin="+world.getViewXmin()+" viewXmax="+world.getViewXmax()+" wolrdXmin="+ world.getWorldXmin()+" wolrdXmax="+ world.getWorldXmax());
//plot wind barbs //plot wind barbs
@ -876,30 +876,30 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource{
// Get the vertical ordinate. // Get the vertical ordinate.
if(currentGraphMode== NsharpConstants.GRAPH_SKEWT){ if(currentGraphMode== NsharpConstants.GRAPH_SKEWT){
windY = NsharpWxMath.getSkewTXY(pressure, 0).y; windY = NsharpWxMath.getSkewTXY(pressure, 0).y;
barbScaleFactorx = 0.6*zoomLevel; //barbScaleFactorx = 0.6*zoomLevel;
barbScaleFactory= zoomLevel; //barbScaleFactory= zoomLevel;
} }
else if(currentGraphMode== NsharpConstants.GRAPH_ICING ){ else if(currentGraphMode== NsharpConstants.GRAPH_ICING ){
//Chin:Y axis (pressure) is scaled using log scale and increaing downward //Chin:Y axis (pressure) is scaled using log scale and increaing downward
//WorldYmin= at pressure 1000,its value actually is 1000 (max), wolrdYmax = at pressure 300, its value is 825 (min) //WorldYmin= at pressure 1000,its value actually is 1000 (max), wolrdYmax = at pressure 300, its value is 825 (min)
windY = world.getWorldYmax() + (world.getWorldYmin()-icingBackground.toLogScale(pressure)); windY = world.getWorldYmax() + (world.getWorldYmin()-icingBackground.toLogScale(pressure));
barbScaleFactorx = 1.3*zoomLevel; //barbScaleFactorx = 1.3*zoomLevel;
barbScaleFactory= 2.5*zoomLevel;//experimental value: depends on the world coordinate size set //barbScaleFactory= 2.5*zoomLevel;//experimental value: depends on the world coordinate size set
}else if( currentGraphMode== NsharpConstants.GRAPH_TURB){ }else if( currentGraphMode== NsharpConstants.GRAPH_TURB){
//Chin:Y axis (pressure) is scaled using log scale and increaing downward //Chin:Y axis (pressure) is scaled using log scale and increaing downward
//WorldYmin= at pressure 1000,its value actually is 1000 (max), wolrdYmax = at pressure 300, its value is 825 (min) //WorldYmin= at pressure 1000,its value actually is 1000 (max), wolrdYmax = at pressure 300, its value is 825 (min)
windY = world.getWorldYmax() + (world.getWorldYmin()-turbBackground.toLogScale(pressure)); windY = world.getWorldYmax() + (world.getWorldYmin()-turbBackground.toLogScale(pressure));
barbScaleFactorx = .12*zoomLevel;//experimental value: depends on the world coordinate size set //barbScaleFactorx = .12*zoomLevel;//experimental value: depends on the world coordinate size set
barbScaleFactory=3.8*zoomLevel; //barbScaleFactory=3.8*zoomLevel;
} }
else else
continue; continue;
if(ele.myState.equals(eleState.UNPICKED)){ if(ele.myState.equals(eleState.UNPICKED)){
double[] loc= {world.mapX(windX), world.mapY(windY)}; //double[] loc= {world.mapX(windX), world.mapY(windY)};
locations.add(loc); //locations.add(loc);
continue; continue;
//spd=0.1f; //spd=0.1f;//Chin::if we want pgen to draw unpicked wind as a circle, then set this.
} }
//System.out.println("spd="+spd+" dir="+dir); //System.out.println("spd="+spd+" dir="+dir);
/* /*
@ -1356,7 +1356,7 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource{
str.verticallAlignment = VerticalAlignment.TOP; str.verticallAlignment = VerticalAlignment.TOP;
Rectangle2D rect = target.getStringsBounds(str); Rectangle2D rect = target.getStringsBounds(str);
PixelExtent boxExt; PixelExtent boxExt;
if(cursorInSkewT== true){ if(cursorInSkewT== true && currentGraphMode == NsharpConstants.GRAPH_SKEWT){
boxExt = new PixelExtent(dispX,dispX+(rect.getWidth()+1)*hRatio,dispY-1*vRatio, dispY+rect.getHeight()*vRatio*4); boxExt = new PixelExtent(dispX,dispX+(rect.getWidth()+1)*hRatio,dispY-1*vRatio, dispY+rect.getHeight()*vRatio*4);
//blank out box, should draw this first and then draw data on top of it //blank out box, should draw this first and then draw data on top of it
target.drawShadedRect(boxExt, NsharpConstants.color_black, 1f, null); target.drawShadedRect(boxExt, NsharpConstants.color_black, 1f, null);
@ -1691,8 +1691,6 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource{
if(curseToggledFontLevel < CURSER_STRING_OFF) if(curseToggledFontLevel < CURSER_STRING_OFF)
drawNsharpSkewtCursorData(target); drawNsharpSkewtCursorData(target);
} }
//}
}// end of currentGraphMode= NsharpConstants.GRAPH_SKEWT }// end of currentGraphMode= NsharpConstants.GRAPH_SKEWT
else if(currentGraphMode == NsharpConstants.GRAPH_ICING){ else if(currentGraphMode == NsharpConstants.GRAPH_ICING){
paintIcing( currentZoomLevel, target); paintIcing( currentZoomLevel, target);

View file

@ -352,6 +352,7 @@ public class NsharpWitoPaneResource extends NsharpAbstractPaneResource{
shapeC.compile(); shapeC.compile();
shapePline.compile(); shapePline.compile();
} }
private static int k=0;
/* /*
* Chin:: NOTE::: * Chin:: NOTE:::
* This plotting function is based on the algorithm of plot_advectionprofile() at xwvid5.c of Bignsharp source code * This plotting function is based on the algorithm of plot_advectionprofile() at xwvid5.c of Bignsharp source code
@ -443,14 +444,23 @@ public class NsharpWitoPaneResource extends NsharpAbstractPaneResource{
* Should be used only when a new resource is becoming Current active resource to be displayed. * Should be used only when a new resource is becoming Current active resource to be displayed.
* *
*/ */
public void createAllWireFrameShapes(){ public synchronized void createAllWireFrameShapes(){
if(target== null || rscHandler== null || inSidePane ) if(target== null || rscHandler== null || inSidePane )
return; return;
//System.out.println("whitoPane="+this.toString()+" createAllWireFrameShapes called"); //System.out.println("whitoPane="+this.toString()+" createAllWireFrameShapes called");
rscHandler.repopulateSndgData(); rscHandler.repopulateSndgData();
disposeAllWireFrameShapes(); disposeAllWireFrameShapes();
createRscWireFrameShapes();; if(soundingLys != null){
NsharpGenericPaneBackground skewtBgd = rscHandler.getSkewtPaneRsc().getActiveBackground();
if(skewtBgd!=null){
vpc = skewtBgd.getViewablePressureContainer(soundingLys);
vplc = skewtBgd.getViewablePressureLinesContainer();
}
createRscOmegaShape();
createRscWindBoxWindShape();
createRscVerticalWindShape();
}
//create static shape //create static shape
createBkgOmegaShape(); createBkgOmegaShape();
createBkgWindBoxShape(); createBkgWindBoxShape();
@ -475,12 +485,15 @@ public class NsharpWitoPaneResource extends NsharpAbstractPaneResource{
public void disposeAllWireFrameShapes(){ public void disposeAllWireFrameShapes(){
disposeRscWireFrameShapes(); disposeRscWireFrameShapes();
//also dispose static background shpae //also dispose static background shpae
if(omegaBkgShape!=null) if(omegaBkgShape!=null){
omegaBkgShape.dispose(); omegaBkgShape.dispose();
omegaBkgShape=null;
}
if(windBoxBkgShape!=null) if(windBoxBkgShape!=null){
windBoxBkgShape.dispose(); windBoxBkgShape.dispose();
windBoxBkgShape=null;
}
} }
public void disposeRscWireFrameShapes(){ public void disposeRscWireFrameShapes(){
if(omegaRscShape!=null){ if(omegaRscShape!=null){

View file

@ -113,7 +113,7 @@ public class NsharpPaneConfigDialog extends Dialog {
paneCfgCombo.add(NsharpConstants.PANE_CONFIGURATION_NAME[i]); paneCfgCombo.add(NsharpConstants.PANE_CONFIGURATION_NAME[i]);
if(paneConfigurationName.equals(NsharpConstants.PANE_CONFIGURATION_NAME[i])){ if(paneConfigurationName.equals(NsharpConstants.PANE_CONFIGURATION_NAME[i])){
selectIndex = i; selectIndex = i;
break; //break;
} }
} }

View file

@ -209,7 +209,7 @@ public class NsharpWindBarbConfigDialog extends Dialog {
mb = new MessageBox(shell, SWT.ICON_WARNING mb = new MessageBox(shell, SWT.ICON_WARNING
| SWT.OK); | SWT.OK);
mb.setMessage( "Input Error! Should be greater than 0"); mb.setMessage( "Input Error! ");
} }
@Override @Override
public Control createDialogArea(Composite parent) { public Control createDialogArea(Composite parent) {
@ -248,9 +248,15 @@ public class NsharpWindBarbConfigDialog extends Dialog {
} }
} }
textStr = windBarbSizeText.getText(); textStr = windBarbSizeText.getText();
if((textStr != null) && !(textStr.isEmpty())){ if((textStr != null) && !(textStr.isEmpty()) ){
curSize = Float.parseFloat(textStr); try{
if(curSize <= 0){ curSize = Float.parseFloat(textStr);
}
catch (NumberFormatException e){
mb.open();
return false;
}
if(curSize <= 0 || curSize > 15){
curSize=1; curSize=1;
windBarbSizeText.setText(Float.toString(curSize)); windBarbSizeText.setText(Float.toString(curSize));
mb.open(); mb.open();
@ -259,8 +265,14 @@ public class NsharpWindBarbConfigDialog extends Dialog {
} }
textStr = windBarbWidthText.getText(); textStr = windBarbWidthText.getText();
if((textStr != null) && !(textStr.isEmpty())){ if((textStr != null) && !(textStr.isEmpty())){
curLineWidth = Float.parseFloat(textStr); try{
if(curLineWidth <=0){ curLineWidth = Float.parseFloat(textStr);
}
catch (NumberFormatException e){
mb.open();
return false;
}
if(curLineWidth <=0 || curLineWidth > 7){
curLineWidth=1; curLineWidth=1;
windBarbWidthText.setText(Float.toString(curLineWidth)); windBarbWidthText.setText(Float.toString(curLineWidth));
mb.open(); mb.open();

View file

@ -1,5 +1,7 @@
%define _ldm_version 6.11.2 %define _ldm_version 6.11.5
%define _ldm_src_tar awips2-ldm.%{_ldm_version}.tar.gz %define _ldm_src_tar ldm-%{_ldm_version}.tar.gz
# ldm-%{_ldm_version}.tar.gz is tarred up ldm-%{_ldm_version}/src dir after
# ISG makes retrans changes
# #
# AWIPS II LDM Spec File # AWIPS II LDM Spec File
# #
@ -18,10 +20,8 @@ Vendor: Raytheon
Packager: Bryan Kowal Packager: Bryan Kowal
AutoReq: no AutoReq: no
Requires: qpid-cpp-client = 0.7.946106-28.el5.centos.1 Requires: awips2-notification
Requires: qpid-cpp-client-devel = 0.7.946106-28.el5.centos.1
Requires: zlib-devel Requires: zlib-devel
Requires: /usr/lib/libz.a
provides: awips2-ldm provides: awips2-ldm
provides: awips2-base-component provides: awips2-base-component
@ -55,6 +55,21 @@ if [ $? -ne 0 ]; then
exit 1 exit 1
fi fi
/bin/mkdir -p %{_build_root}/etc/ld.so.conf.d
if [ $? -ne 0 ]; then
exit 1
fi
/bin/mkdir -p %{_build_root}/etc/logrotate.d
if [ $? -ne 0 ]; then
exit 1
fi
/bin/mkdir -p %{_build_root}/etc/init.d
if [ $? -ne 0 ]; then
exit 1
fi
%build %build
%install %install
@ -118,6 +133,21 @@ if [ $? -ne 0 ]; then
exit 1 exit 1
fi fi
/bin/cp ld.so.conf.d/* %{_build_root}/etc/ld.so.conf.d
if [ $? -ne 0 ]; then
exit 1
fi
/bin/cp logrotate.d/* %{_build_root}/etc/logrotate.d
if [ $? -ne 0 ]; then
exit 1
fi
/bin/cp init.d/* %{_build_root}/etc/init.d
if [ $? -ne 0 ]; then
exit 1
fi
%pre %pre
if [ -d /tmp/ldm ]; then if [ -d /tmp/ldm ]; then
rm -rf /tmp/ldm rm -rf /tmp/ldm
@ -126,7 +156,7 @@ mkdir -p /tmp/ldm
for dir in etc .ssh; for dir in etc .ssh;
do do
if [ -d /usr/local/ldm/${dir} ]; then if [ -d /usr/local/ldm/${dir} ]; then
scp -qrp /usr/local/${dir} /tmp/ldm scp -qrp /usr/local/ldm/${dir} /tmp/ldm
fi fi
done done
@ -139,12 +169,12 @@ _myHost=`echo ${_myHost} | cut -f1 -d'-'`
pushd . > /dev/null 2>&1 pushd . > /dev/null 2>&1
cd ${_ldm_dir}/SOURCES cd ${_ldm_dir}/SOURCES
# unpack the ldm source # unpack the ldm source
/bin/tar -xf awips2-ldm.%{_ldm_version}.tar.gz \ /bin/tar -xf %{_ldm_src_tar} \
-C ${_ldm_dir} -C ${_ldm_dir}
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
exit 1 exit 1
fi fi
rm -f awips2-ldm.%{_ldm_version}.tar.gz rm -f %{_ldm_src_tar}
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
exit 1 exit 1
fi fi
@ -401,3 +431,6 @@ rm -rf ${RPM_BUILD_ROOT}
/usr/local/ldm/SOURCES/* /usr/local/ldm/SOURCES/*
%attr(755,root,root) /etc/profile.d/awipsLDM.csh %attr(755,root,root) /etc/profile.d/awipsLDM.csh
%attr(755,root,root) /etc/ld.so.conf.d/awips2-ldm-i386.conf
%attr(755,root,root) /etc/ld.so.conf.d/ldm.log
%attr(755,root,root) /etc/init.d/ldmcp

View file

@ -0,0 +1,59 @@
#!/bin/bash
# Check for necessary named pipes (FIFOs)
myhost=`hostname | awk -F'-' '{ print substr($1,1,length($1)-1)}'`
# Check for the host type nad perform operations accordingly
if [ "$myhost" = "cpsbn" ]; then
echo "Checking for availability of named pipes"
if [ -p /dev/p_LOG ];then
echo "Pipe /dev/p_LOG exists"
else
mknod /dev/p_LOG p
fi
chmod 664 /dev/p_LOG && chgrp fxalpha /dev/p_LOG
if [ -p /dev/p_LOST ];then
echo "Pipe /dev/p_LOST exists"
else
mknod /dev/p_LOST p
fi
chmod 664 /dev/p_LOST && chgrp fxalpha /dev/p_LOST
if [ -f /etc/rc.config.d/AWIPS ];then
. /etc/rc.config.d/AWIPS
else
echo "AWIPS file not found.Install AWIPS and proceed."
echo "Exiting."
exit $?
fi
# Start AWIPS-I retransmission process
# Move to a2cp1apps to prevent duplicate retransmission request from both CPs
# $PROJECT/bin/start_sbn_retransmit
# Setup shared memory for LDM to store retransmission params
su - ldm -c "acq_ldm_getshm -m0"
else
echo "It seems like host(`hostname`) is NOT a downlink CP."
echo "Do you still want to start LDM (y/n) [default=n]?"
read ch
if [ $ch != 'y' -o $ch != 'Y' ];then
echo "Exiting."
exit 1
fi
fi
# Start LDM
su - ldm -c "ldmadmin start"
echo "Done."

View file

@ -0,0 +1,21 @@
#!/bin/bash
if [ -f /etc/rc.config.d/AWIPS ];then
. /etc/rc.config.d/AWIPS
fi
#echo "Halting retransmission process"
#pid=`ps -ef |grep start_sbn_retransmit|grep -v grep | awk '{print $2}'`
#kill -s SIGKILL $pid
echo "Stopping ldm service"
su - ldm -c "ldmadmin stop"
echo "Releasing shared memory resources"
su - ldm -c "acq_ldm_freeshm -m0"
echo "Done."

View file

@ -53,20 +53,11 @@
# are started by the "exec" command and are in the same process group. # are started by the "exec" command and are in the same process group.
# #
#EXEC "pqact" #EXEC "pqact"
# dvbs shared memory ingest processes EXEC "noaaportIngester -m 224.0.1.1 -n -u 3 -t mhs -r 1 -s NMC"
EXEC "noaaportIngester -m 224.0.1.2 -n -u 4 -t mhs -r 1 -s GOES"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.1" EXEC "noaaportIngester -m 224.0.1.3 -n -u 5 -t mhs -r 1 -s NMC2"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.2" EXEC "noaaportIngester -m 224.0.1.4 -n -u 6 -t mhs -r 1 -s NOAAPORT_OPT"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.3" EXEC "noaaportIngester -m 224.0.1.5 -n -u 7 -t mhs -r 1 -s NMC3"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.4"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.5"
#
# readnoaaport shared memory readers
EXEC "readnoaaport -m 224.0.1.1 -n -u 3 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.2 -n -u 4 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.3 -n -u 5 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.4 -n -u 6 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.5 -n -u 7 -t mhs -r 1"
# #
# rtstats uses the LDM to send product latency statistics to the UPC. # rtstats uses the LDM to send product latency statistics to the UPC.
# For more info on rtstats please see the man page. # For more info on rtstats please see the man page.

View file

@ -53,20 +53,11 @@
# are started by the "exec" command and are in the same process group. # are started by the "exec" command and are in the same process group.
# #
#EXEC "pqact" #EXEC "pqact"
# dvbs shared memory ingest processes EXEC "noaaportIngester -m 224.0.1.1 -n -u 3 -t mhs -r 1 -s NMC"
EXEC "noaaportIngester -m 224.0.1.2 -n -u 4 -t mhs -r 1 -s GOES"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.1" EXEC "noaaportIngester -m 224.0.1.3 -n -u 5 -t mhs -r 1 -s NMC2"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.2" EXEC "noaaportIngester -m 224.0.1.4 -n -u 6 -t mhs -r 1 -s NOAAPORT_OPT"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.3" EXEC "noaaportIngester -m 224.0.1.5 -n -u 7 -t mhs -r 1 -s NMC3"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.4"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.5"
#
# readnoaaport shared memory readers
EXEC "readnoaaport -m 224.0.1.1 -n -u 3 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.2 -n -u 4 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.3 -n -u 5 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.4 -n -u 6 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.5 -n -u 7 -t mhs -r 1"
# #
# rtstats uses the LDM to send product latency statistics to the UPC. # rtstats uses the LDM to send product latency statistics to the UPC.
# For more info on rtstats please see the man page. # For more info on rtstats please see the man page.

View file

@ -53,20 +53,11 @@
# are started by the "exec" command and are in the same process group. # are started by the "exec" command and are in the same process group.
# #
#EXEC "pqact" #EXEC "pqact"
# dvbs shared memory ingest processes EXEC "noaaportIngester -m 224.0.1.1 -n -u 3 -t mhs -r 1 -s NMC"
EXEC "noaaportIngester -m 224.0.1.2 -n -u 4 -t mhs -r 1 -s GOES"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.1" EXEC "noaaportIngester -m 224.0.1.3 -n -u 5 -t mhs -r 1 -s NMC2"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.2" EXEC "noaaportIngester -m 224.0.1.4 -n -u 6 -t mhs -r 1 -s NOAAPORT_OPT"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.3" EXEC "noaaportIngester -m 224.0.1.5 -n -u 7 -t mhs -r 1 -s NMC3"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.4"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.5"
#
# readnoaaport shared memory readers
EXEC "readnoaaport -m 224.0.1.1 -n -u 3 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.2 -n -u 4 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.3 -n -u 5 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.4 -n -u 6 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.5 -n -u 7 -t mhs -r 1"
# #
# rtstats uses the LDM to send product latency statistics to the UPC. # rtstats uses the LDM to send product latency statistics to the UPC.
# For more info on rtstats please see the man page. # For more info on rtstats please see the man page.

View file

@ -53,20 +53,11 @@
# are started by the "exec" command and are in the same process group. # are started by the "exec" command and are in the same process group.
# #
#EXEC "pqact" #EXEC "pqact"
# dvbs shared memory ingest processes EXEC "noaaportIngester -m 224.0.1.1 -n -u 3 -t mhs -r 1 -s NMC"
EXEC "noaaportIngester -m 224.0.1.2 -n -u 4 -t mhs -r 1 -s GOES"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.1" EXEC "noaaportIngester -m 224.0.1.3 -n -u 5 -t mhs -r 1 -s NMC2"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.2" EXEC "noaaportIngester -m 224.0.1.4 -n -u 6 -t mhs -r 1 -s NOAAPORT_OPT"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.3" EXEC "noaaportIngester -m 224.0.1.5 -n -u 7 -t mhs -r 1 -s NMC3"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.4"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.5"
#
# readnoaaport shared memory readers
EXEC "readnoaaport -m 224.0.1.1 -n -u 3 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.2 -n -u 4 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.3 -n -u 5 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.4 -n -u 6 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.5 -n -u 7 -t mhs -r 1"
# #
# rtstats uses the LDM to send product latency statistics to the UPC. # rtstats uses the LDM to send product latency statistics to the UPC.
# For more info on rtstats please see the man page. # For more info on rtstats please see the man page.

View file

@ -0,0 +1,143 @@
#!/bin/bash
#
# ldmcp: This starts and stops the SBN LDMCP software at the sites
#
# chkconfig: 345 99 0
# description: ldmcp starts/stops SBN LDM software on the CP at the site
#
#
PATH=/sbin:/bin:/usr/bin:/usr/sbin
# Source function library.
. /etc/init.d/functions
RETVAL=0
LDM_PROJECT="/usr/local/ldm"
AWIPS_PROJECT="/awips"
LOGFILE=`basename $0`
if [ -f /etc/rc.config.d/AWIPS ];then
. /etc/rc.config.d/AWIPS
else
echo "AWIPS file not found. Exiting.."
exit -1
fi
function handle_ramdisk() {
# check if ramdisk is mounted:
if ! mount | grep ram0 > /dev/null
then
echo -ne "Creating RAMDISK:\t"
if mkfs -t ext2 -m 0 -q /dev/ramdisk 1500000 && success || failure
then
echo
# mount to /data/ldm/data
echo -ne "Mounting to /data/ldm/data:\t"
if ! mount /dev/ramdisk /data/ldm/data && failure
then
echo
return 1
else
success
fi
echo
sleep 2
else
echo
return 1
fi
fi
echo -ne "Fixing Permissions:\t"
if ! chown -R ldm:fxalpha /data/ldm/data && failure
then
echo
return 1
fi
success
echo
return 0
}
function clean_ldm() {
echo -ne "Cleaning LDM:\t"
su ldm -lc "ldmadmin clean" > /dev/null 2>&1 && success || failure
myRetVal=$?
if [[ ${myRetVal} -ne 0 ]]
then
return ${myRetVal}
fi
echo
if [[ -f /data/ldm/data/ldm.pq ]]
then
echo -ne "\nDeleting the ldm queue:\t"
su ldm -lc "ldmadmin delqueue" > /dev/null 2>&1 && success || failure
echo
fi
echo -ne "\nCreating the ldm queue:\t"
su ldm -lc "ldmadmin mkqueue" > /dev/null 2>&1 && success || failure
myRetVal=$?
echo
return ${myRetVal}
}
case $1 in
'start')
if ! handle_ramdisk; then exit 1 ; fi
if ! clean_ldm; then exit 1 ; fi
echo -n "Starting AWIPS SBN CP (LDM) processes:"
$LDM_PROJECT/bin/start_ldm > /data/ldm/logs/$LOGFILE 2>&1
if [ $? -eq 0 ]
then
RETVAL=0
touch /var/lock/subsys/ldmcp
success && echo
$AWIPS_PROJECT/bin/ErrorLogADS -p ldmcp -t c -s ma -g 60 -n 2 -m "SBN CP (LDM) Start OK"
echo "$AWIPS_PROJECT/bin/ErrorLogADS -p ldmcp -t c -s ma -g 60 -n 2 -m 'SBN CP (LDM) Start OK' "
else
RETVAL=1
failure && echo
$AWIPS_PROJECT/bin/ErrorLogADS -p ldmcp -t c -s ma -g 60 -n 2 -m "SBN CP (LDM) Start FAIL"
echo "$AWIPS_PROJECT/bin/ErrorLogADS -p ldmcp -t c -s ma -g 60 -n 2 -m 'SBN CP (LDM) Start FAIL'"
fi
mc_sbn_S300_dvb
;;
'stop')
echo -n "Stopping AWIPS SBN CP (LDM) processes:"
$LDM_PROJECT/bin/stop_ldm >> /data/ldm/logs/$LOGFILE 2>&1
if [ $? -eq 0 ]
then
RETVAL=0
rm -f /var/lock/subsys/ldmcp
success && echo
$AWIPS_PROJECT/bin/ErrorLogADS -p ldmcp -t c -s ma -g 60 -n 2 -m "SBN CP (LDM) Stop OK"
echo "$AWIPS_PROJECT/bin/ErrorLogADS -p ldmcp -t c -s ma -g 60 -n 2 -m 'SBN CP (LDM) Stop OK'"
else
RETVAL=1
failure && echo
$AWIPS_PROJECT/bin/ErrorLogADS -p ldmcp -t c -s ma -g 60 -n 2 -m "SBN CP (LDM) Stop FAIL"
echo "$AWIPS_PROJECT/bin/ErrorLogADS -p ldmcp -t c -s ma -g 60 -n 2 -m 'SBN CP (LDM) Stop FAIL'"
fi
for pid in `ps -C mc_sbn_S300_dvb --no-headings -o pid`
do
echo "Sending SIGTERM to the mc_sbn_S300_dvb pid $pid"
kill -s SIGTERM $pid
sleep 1
done
;;
*)
echo "usage: $0 {start|stop}"
RETVAL=1
;;
esac
exit $RETVAL

View file

@ -0,0 +1 @@
/usr/local/ldm/lib

View file

@ -0,0 +1,12 @@
/data/ldm/logs/ldmd.log /data/ldm/logs/nwstg.log /data/ldm/logs/goes.log /data/ldm/logs/nwstg2.log /data/ldm/logs/oconus.log /data/ldm/logs/polarsat.log {
missingok
compress
notifempty
daily
rotate 5
create 0660 root fxalpha
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}

Binary file not shown.