Merge tag 'OB_14.4.1-20m' into omaha_15.1.1
14.4.1-20m Conflicts: cave/com.raytheon.uf.viz.monitor/src/com/raytheon/uf/viz/monitor/ui/dialogs/MonitoringAreaConfigDlg.java edexOsgi/build.edex/esb/conf/logback.xml (moved to build/deploy.edex.awips2/esb/conf/logback.xml; also removed edexOsgi/build.edex/esb/conf) rpms/awips2.core/Installer.ldm/patch/etc/pqact.conf.template Former-commit-id:165971a4f6
[formerly 0db97a3cefc6f709d336883202e51f1d5255ad75] Former-commit-id:25bd3ee930
This commit is contained in:
commit
663bf8c2f9
281 changed files with 1825 additions and 73279 deletions
|
@ -5,6 +5,31 @@
|
|||
<include file="${edex.home}/conf/logback-edex-loggers.xml" />
|
||||
<include file="${edex.home}/conf/logback-edex-hibernate-logger.xml" />
|
||||
|
||||
<!-- activeTableChange log -->
|
||||
<!-- When migrating this change to 15.1.1 it will need to be split up properly.
|
||||
See Roger Ferrel for instruction
|
||||
-->
|
||||
<appender name="activeTableChangeLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-activeTableChange-%d{yyyyMMdd}.log</fileNamePattern>
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<encoder>
|
||||
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<appender name="activeTableChangeLogAsync" class="ch.qos.logback.classic.AsyncAppender">
|
||||
<appender-ref ref="activeTableChangeLog" />
|
||||
</appender>
|
||||
|
||||
<logger name="ActiveTableChange" additivity="false">
|
||||
<level value="DEBUG"/>
|
||||
<appender-ref ref="activeTableChangeLogAsync" />
|
||||
</logger>
|
||||
|
||||
|
||||
<!-- default logging -->
|
||||
<root>
|
||||
<level value="INFO"/>
|
||||
|
|
|
@ -14,6 +14,7 @@ truststore=truststore.jks
|
|||
|
||||
keystorePw=
|
||||
keyPw=
|
||||
cn=
|
||||
encryptionKey=encrypt
|
||||
truststorePw=password
|
||||
|
||||
|
@ -96,21 +97,36 @@ do
|
|||
fi
|
||||
done
|
||||
|
||||
cn=$(hostname)
|
||||
while [ -z $cn ];
|
||||
do
|
||||
echo -n "Enter canonical name/IP or blank for default [$(hostname)]: "
|
||||
read cn
|
||||
if [ -z $cn ];
|
||||
then
|
||||
echo "Canonical Name defaulting to [$(hostname)];"
|
||||
cn=$(hostname)
|
||||
fi
|
||||
done
|
||||
|
||||
echo "Generating keystore..."
|
||||
keytool -genkeypair -alias $keyAlias -keypass $keyPw -keystore $keystore -storepass $keystorePw -validity 360 -dname "CN=$cn, OU=AWIPS, O=Raytheon, L=Omaha, ST=NE, C=US" -keyalg RSA
|
||||
# get rid of an existing key with same name
|
||||
echo "Check to see if a key with this alias exists.....[$keyAlias]!"
|
||||
keytool -delete -alias $keyAlias -keystore $securityDir/$keystore
|
||||
# create and add key
|
||||
keytool -genkeypair -alias $keyAlias -keypass $keyPw -keystore $keystore -storepass $keystorePw -validity 360 -dname "CN=$cn, OU=AWIPS, O=Raytheon, L=Silver Spring, ST=MD, C=US" -keyalg RSA
|
||||
echo -n "Exporting public key..."
|
||||
exportOutput=`keytool -exportcert -alias $keyAlias -keystore $keystore -file $keyAlias$publicKeyFile -storepass $keystorePw 2>&1`
|
||||
echo "Done!"
|
||||
obfuscatedKeystorePassword=`$JAVA_BIN -cp /awips2/edex/lib/dependencies/org.apache.commons.codec/commons-codec-1.4.jar:/awips2/edex/lib/plugins/com.raytheon.uf.common.security.jar com.raytheon.uf.common.security.encryption.AESEncryptor encrypt $encryptionKey $keystorePw 2>&1`
|
||||
echo "Generating trust store..."
|
||||
|
||||
echo "Check to see if a trusted CA with this alias exists.....[$keyAlias]!"
|
||||
keytool -delete -alias $keyAlias -keystore $securityDir/$truststore
|
||||
keytool -genkey -alias tmp -keypass tempPass -dname CN=foo -keystore $truststore -storepass $truststorePw
|
||||
keytool -delete -alias tmp -keystore $truststore -storepass $truststorePw
|
||||
keytool -import -trustcacerts -file $keyAlias$publicKeyFile -alias $keyAlias -keystore $truststore -storepass $truststorePw
|
||||
|
||||
jettyObscuredPassword=`$JAVA_BIN -cp /awips2/edex/lib/dependencies/org.eclipse.jetty/jetty-http-7.6.14.v20131031.jar:/awips2/edex/lib/dependencies/org.eclipse.jetty/jetty-util-7.6.14.v20131031.jar org.eclipse.jetty.util.security.Password $keystorePw 2>&1 | grep OBF`
|
||||
jettyObscuredPassword=`$JAVA_BIN -cp /awips2/edex/lib/dependencies/org.eclipse.jetty/jetty-http-8.1.15.v20140411.jar:/awips2/edex/lib/dependencies/org.eclipse.jetty/jetty-util-8.1.15.v20140411.jar org.eclipse.jetty.util.security.Password $keystorePw 2>&1 | grep OBF`
|
||||
|
||||
obfuscatedTruststorePassword=`$JAVA_BIN -cp /awips2/edex/lib/dependencies/org.apache.commons.codec/commons-codec-1.4.jar:/awips2/edex/lib/plugins/com.raytheon.uf.common.security.jar com.raytheon.uf.common.security.encryption.AESEncryptor encrypt $encryptionKey $truststorePw 2>&1`
|
||||
|
||||
|
@ -167,6 +183,11 @@ do
|
|||
echo "Alias cannot be empty!"
|
||||
fi
|
||||
done
|
||||
|
||||
# delete any existing cert in the truststore for this alias
|
||||
echo "Check to see if a certificate with this alias exists.....[$userAlias]!"
|
||||
keytool -delete -alias $userAlias -keystore $securityDir/$truststore
|
||||
# add the cert as a Self Signed CA to truststore
|
||||
keytool -import -trustcacerts -file $keyfile -alias $userAlias -keystore $securityDir/$truststore
|
||||
|
||||
}
|
||||
|
|
|
@ -72,6 +72,7 @@ import com.raytheon.viz.ui.views.CaveWorkbenchPageManager;
|
|||
* to display messages.
|
||||
* Jun 16, 2014 3288 bclement feed venue configuration changes
|
||||
* Oct 08, 2014 3705 bclement moved venue joining code to CollaborationConnection
|
||||
* Mar 10, 2015 4238 njensen null check in getSessionId()
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -109,12 +110,15 @@ public class DisplayFeedAction extends Action {
|
|||
CollaborationConnection connection = CollaborationConnection
|
||||
.getConnection();
|
||||
String sessionId = null;
|
||||
for (ISession session : connection.getSessions()) {
|
||||
if (session instanceof IVenueSession) {
|
||||
FeedVenueConfig config = FeedVenueConfigManager.getConfig();
|
||||
if (((IVenueSession) session).getVenueName().equalsIgnoreCase(
|
||||
config.getName())) {
|
||||
sessionId = session.getSessionId();
|
||||
// connection can be null in rare cases
|
||||
if (connection != null) {
|
||||
for (ISession session : connection.getSessions()) {
|
||||
if (session instanceof IVenueSession) {
|
||||
FeedVenueConfig config = FeedVenueConfigManager.getConfig();
|
||||
if (((IVenueSession) session).getVenueName()
|
||||
.equalsIgnoreCase(config.getName())) {
|
||||
sessionId = session.getSessionId();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -90,6 +90,7 @@ import com.vividsolutions.jts.geom.Geometry;
|
|||
* Apr 28, 2014 3086 skorolev Removed local getMonitorAreaConfig method.
|
||||
* Sep 04, 2014 3220 skorolev Updated configUpdate method and added updateMonitoringArea.
|
||||
* Sep 23, 2014 3356 njensen Remove unnecessary import
|
||||
* Mar 09, 2014 3888 dhladky Stopped processing when dialogs are null or disposed.
|
||||
*
|
||||
*
|
||||
* </pre>
|
||||
|
@ -366,14 +367,20 @@ public class FogMonitor extends ObsMonitor implements IFogResourceListener {
|
|||
*/
|
||||
@Override
|
||||
protected void process(ObReport result) throws Exception {
|
||||
obData.addReport(result);
|
||||
String zone = findZone(result.getPlatformId());
|
||||
if (zone != null) {
|
||||
AreaContainer ac = getTableData().getArea(zone);
|
||||
if (ac != null) {
|
||||
ac.addReport(result.getObservationTime(), result);
|
||||
fireMonitorEvent(this);
|
||||
|
||||
if (zoneDialog != null && !zoneDialog.isDisposed()) {
|
||||
|
||||
obData.addReport(result);
|
||||
String zone = findZone(result.getPlatformId());
|
||||
if (zone != null) {
|
||||
AreaContainer ac = getTableData().getArea(zone);
|
||||
if (ac != null) {
|
||||
ac.addReport(result.getObservationTime(), result);
|
||||
fireMonitorEvent(this);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
monitor.nullifyMonitor();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,7 +23,6 @@ import java.util.Date;
|
|||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
import com.raytheon.uf.common.monitor.data.CommonConfig;
|
||||
|
@ -47,6 +46,7 @@ import com.raytheon.uf.viz.monitor.thresholds.AbstractThresholdMgr;
|
|||
* Oct.29, 2012 1297 skorolev Changed HashMap to Map
|
||||
* Oct.31 2012 1297 skorolev Cleaned code.
|
||||
* Sep 04 2014 3220 skorolev Added updateZones method.
|
||||
* Mar 17 2015 3888 dhladky check for nulls
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -227,8 +227,11 @@ public class ObHourReports {
|
|||
List<String> stations = new CopyOnWriteArrayList<String>(
|
||||
hourReports.get(zone).getZoneHourReports().keySet());
|
||||
for (String stn : stations) {
|
||||
if (!zoneStationMap.get(zone).contains(stn)) {
|
||||
hourReports.get(zone).getZoneHourReports().remove(stn);
|
||||
if (zoneStationMap.get(zone) != null) {
|
||||
if (!zoneStationMap.get(zone).contains(stn)) {
|
||||
hourReports.get(zone).getZoneHourReports()
|
||||
.remove(stn);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!zoneStationMap.keySet().contains(zone)) {
|
||||
|
@ -241,14 +244,16 @@ public class ObHourReports {
|
|||
List<String> stations = new CopyOnWriteArrayList<String>(
|
||||
zoneStationMap.get(zone));
|
||||
for (String stn : stations) {
|
||||
if (!hourReports.get(zone).getZoneHourReports()
|
||||
.containsKey(stn)) {
|
||||
hourReports
|
||||
.get(zone)
|
||||
.getZoneHourReports()
|
||||
.put(stn,
|
||||
new ObStnHourReports(nominalTime, zone,
|
||||
stn, appName, thresholdMgr));
|
||||
if (hourReports.get(zone) != null) {
|
||||
if (!hourReports.get(zone).getZoneHourReports()
|
||||
.containsKey(stn)) {
|
||||
hourReports
|
||||
.get(zone)
|
||||
.getZoneHourReports()
|
||||
.put(stn,
|
||||
new ObStnHourReports(nominalTime, zone,
|
||||
stn, appName, thresholdMgr));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!hourReports.containsKey(zone)) {
|
||||
|
|
|
@ -78,6 +78,7 @@ import com.raytheon.viz.ui.dialogs.ICloseCallback;
|
|||
* Sep 24, 2014 2757 skorolev Fixed problem with adding and removing zones.
|
||||
* Oct 27, 2014 3667 skorolev Corrected functionality of dialog. Cleaned code.
|
||||
* Nov 12, 2014 3650 skorolev Added confirmation box for unsaved changes in the dialog.
|
||||
* Mar 08, 2015 3888 dhladky Restored threshold pop-up when adding new stations/zones.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -1481,12 +1482,7 @@ public abstract class MonitoringAreaConfigDlg extends CaveSWTDialog implements
|
|||
* Reset data status.
|
||||
*/
|
||||
protected void resetStatus() {
|
||||
if (!configMgr.getAddedZones().isEmpty()) {
|
||||
configMgr.getAddedZones().clear();
|
||||
}
|
||||
if (!configMgr.getAddedStations().isEmpty()) {
|
||||
configMgr.getAddedStations().clear();
|
||||
}
|
||||
|
||||
this.timeWindowChanged = false;
|
||||
this.maZonesRemoved = false;
|
||||
this.maStationsRemoved = false;
|
||||
|
|
|
@ -55,6 +55,7 @@ Definition = {
|
|||
|
||||
## General Set-Up
|
||||
|
||||
"fullStationID": "KXXX",
|
||||
"type": "table",
|
||||
"displayName": "${itemName}", # for Product Generation Menu
|
||||
# if displayName == None or "None", this product will NOT
|
||||
|
|
|
@ -53,6 +53,7 @@ import com.raytheon.viz.ui.dialogs.CaveJFACEDialog;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Sept 25, 2008 1562 askripsky Initial creation.
|
||||
* Nov 12, 2012 1298 rferrel Changes for non-blocking dialog.
|
||||
* Mar 17, 2015 17217 ryu Set smart product as the default type.
|
||||
* </pre>
|
||||
*
|
||||
* @author askripsky
|
||||
|
@ -267,13 +268,13 @@ public class NewTextProductDialog extends CaveJFACEDialog {
|
|||
buttonComp.setLayout(new GridLayout());
|
||||
buttonComp.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));
|
||||
|
||||
tableTypeButton = new Button(buttonComp, SWT.RADIO);
|
||||
tableTypeButton.setText("Table");
|
||||
smartTypeButton = new Button(buttonComp, SWT.RADIO);
|
||||
smartTypeButton.setText("Smart");
|
||||
tableTypeButton = new Button(buttonComp, SWT.RADIO);
|
||||
tableTypeButton.setText("Table");
|
||||
|
||||
// Default to table type
|
||||
tableTypeButton.setSelection(true);
|
||||
// Default to smart type
|
||||
smartTypeButton.setSelection(true);
|
||||
}
|
||||
|
||||
private void initNameSelection() {
|
||||
|
|
|
@ -42,48 +42,6 @@
|
|||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingCloudFlashes="true">
|
||||
<binOffset posOffset="0" negOffset="900" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="false" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingPulses="true">
|
||||
<binOffset posOffset="0" negOffset="900" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
</descriptor>
|
||||
</displays>
|
||||
</displayList>
|
||||
|
|
|
@ -64,48 +64,6 @@
|
|||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true"/>
|
||||
<properties isSystemResource="false" isBlinking="false"
|
||||
isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingCloudFlashes="true">
|
||||
<binOffset posOffset="0" negOffset="900" virtualOffset="0" />
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning"
|
||||
constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="false" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingPulses="true">
|
||||
<binOffset posOffset="0" negOffset="900" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
</descriptor>
|
||||
</displays>
|
||||
</displayList>
|
||||
|
|
|
@ -42,48 +42,6 @@
|
|||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingCloudFlashes="true">
|
||||
<binOffset posOffset="0" negOffset="300" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="false" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingPulses="true">
|
||||
<binOffset posOffset="0" negOffset="300" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
</descriptor>
|
||||
</displays>
|
||||
</displayList>
|
||||
|
|
|
@ -41,48 +41,6 @@
|
|||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingCloudFlashes="true">
|
||||
<binOffset posOffset="0" negOffset="3600" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="false" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingPulses="true">
|
||||
<binOffset posOffset="0" negOffset="3600" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
</descriptor>
|
||||
</displays>
|
||||
|
|
|
@ -0,0 +1,90 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
<bundle>
|
||||
<displayList>
|
||||
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<descriptor xsi:type="mapDescriptor">
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="true" handlingNegativeStrikes="true">
|
||||
<binOffset posOffset="0" negOffset="900" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingCloudFlashes="true">
|
||||
<binOffset posOffset="0" negOffset="900" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="false" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingPulses="true">
|
||||
<binOffset posOffset="0" negOffset="900" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
</descriptor>
|
||||
</displays>
|
||||
</displayList>
|
||||
</bundle>
|
|
@ -0,0 +1,112 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
<bundle>
|
||||
<displayList>
|
||||
<displays xsi:type="d2DMapRenderableDisplay"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<descriptor xsi:type="mapDescriptor">
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false" isBlinking="false"
|
||||
isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="true" handlingNegativeStrikes="false">
|
||||
<binOffset posOffset="0" negOffset="900" virtualOffset="0" />
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning"
|
||||
constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true"/>
|
||||
<properties isSystemResource="false" isBlinking="false"
|
||||
isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="true">
|
||||
<binOffset posOffset="0" negOffset="900" virtualOffset="0" />
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning"
|
||||
constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true"/>
|
||||
<properties isSystemResource="false" isBlinking="false"
|
||||
isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingCloudFlashes="true">
|
||||
<binOffset posOffset="0" negOffset="900" virtualOffset="0" />
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning"
|
||||
constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="false" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingPulses="true">
|
||||
<binOffset posOffset="0" negOffset="900" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
</descriptor>
|
||||
</displays>
|
||||
</displayList>
|
||||
</bundle>
|
|
@ -0,0 +1,90 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
<bundle>
|
||||
<displayList>
|
||||
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<descriptor xsi:type="mapDescriptor">
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="true" handlingNegativeStrikes="true">
|
||||
<binOffset posOffset="0" negOffset="300" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingCloudFlashes="true">
|
||||
<binOffset posOffset="0" negOffset="300" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="false" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingPulses="true">
|
||||
<binOffset posOffset="0" negOffset="300" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
</descriptor>
|
||||
</displays>
|
||||
</displayList>
|
||||
</bundle>
|
|
@ -0,0 +1,90 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
<bundle>
|
||||
<displayList>
|
||||
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<descriptor xsi:type="mapDescriptor">
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="true" handlingNegativeStrikes="true">
|
||||
<binOffset posOffset="0" negOffset="3600" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingCloudFlashes="true">
|
||||
<binOffset posOffset="0" negOffset="3600" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="false" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingPulses="true">
|
||||
<binOffset posOffset="0" negOffset="3600" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
</descriptor>
|
||||
</displays>
|
||||
</displayList>
|
||||
</bundle>
|
|
@ -19,16 +19,16 @@
|
|||
further_licensing_information.
|
||||
-->
|
||||
<menuTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<contribute xsi:type="bundleItem" file="bundles/LightningPlot60Min.xml"
|
||||
<contribute xsi:type="bundleItem" file="bundles/TotalLightningPlot60Min.xml"
|
||||
menuText="1hr plot" id="1HrLightningFlashPlot">
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/LightningPlot15Min.xml"
|
||||
<contribute xsi:type="bundleItem" file="bundles/TotalLightningPlot15Min.xml"
|
||||
menuText="15min plot" id="15MinLightningFlashPlot">
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/LightningPlot15MinPN.xml"
|
||||
<contribute xsi:type="bundleItem" file="bundles/TotalLightningPlot15MinPN.xml"
|
||||
menuText="15min Pos/Neg plot" id="15MinPNLightningFlashPlot">
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/LightningPlot5Min.xml"
|
||||
<contribute xsi:type="bundleItem" file="bundles/TotalLightningPlot5Min.xml"
|
||||
menuText="5min plot" id="5MinLightningFlashPlot">
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/LightningSeq.xml"
|
||||
|
|
|
@ -24,51 +24,13 @@
|
|||
menuText="60min cloud to ground density" id="1HrGridLightningCGPlot">
|
||||
<substitute key="negOffset" value="3600"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningCloudFlashPlot.xml"
|
||||
menuText="60min cloud flash density" id="1HrGridLightningCloudFlashPlot">
|
||||
<substitute key="negOffset" value="3600"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningTotalFlashPlot.xml"
|
||||
menuText="60min total flash density" id="1HrGridLightningFlashPlot">
|
||||
<substitute key="negOffset" value="3600"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningPulsePlot.xml"
|
||||
menuText="60min pulse density" id="1HrGridLightningPulsePlot">
|
||||
<substitute key="negOffset" value="3600"/>
|
||||
</contribute>
|
||||
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningCGPlot.xml"
|
||||
menuText="15min cloud to ground density" id="1HrGridLightningCGPlot">
|
||||
<substitute key="negOffset" value="900"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningCloudFlashPlot.xml"
|
||||
menuText="15min cloud flash density" id="1HrGridLightningCloudFlashPlot">
|
||||
<substitute key="negOffset" value="900"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningTotalFlashPlot.xml"
|
||||
menuText="15min total flash density" id="1HrGridLightningFlashPlot">
|
||||
<substitute key="negOffset" value="900"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningPulsePlot.xml"
|
||||
menuText="15min pulse density" id="1HrGridLightningPulsePlot">
|
||||
<substitute key="negOffset" value="900"/>
|
||||
</contribute>
|
||||
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningCGPlot.xml"
|
||||
menuText="5min cloud to ground density" id="1HrGridLightningCGPlot">
|
||||
<substitute key="negOffset" value="300"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningCloudFlashPlot.xml"
|
||||
menuText="5min cloud flash density" id="1HrGridLightningCloudFlashPlot">
|
||||
<substitute key="negOffset" value="300"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningTotalFlashPlot.xml"
|
||||
menuText="5min total flash density" id="1HrGridLightningFlashPlot">
|
||||
<substitute key="negOffset" value="300"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningPulsePlot.xml"
|
||||
menuText="5min pulse density" id="1HrGridLightningPulsePlot">
|
||||
<substitute key="negOffset" value="300"/>
|
||||
</contribute>
|
||||
|
||||
</menuTemplate>
|
|
@ -0,0 +1,74 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
<menuTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningCGPlot.xml"
|
||||
menuText="60min cloud to ground density" id="1HrGridLightningCGPlot">
|
||||
<substitute key="negOffset" value="3600"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningCloudFlashPlot.xml"
|
||||
menuText="60min cloud flash density" id="1HrGridLightningCloudFlashPlot">
|
||||
<substitute key="negOffset" value="3600"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningTotalFlashPlot.xml"
|
||||
menuText="60min total flash density" id="1HrGridLightningFlashPlot">
|
||||
<substitute key="negOffset" value="3600"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningPulsePlot.xml"
|
||||
menuText="60min pulse density" id="1HrGridLightningPulsePlot">
|
||||
<substitute key="negOffset" value="3600"/>
|
||||
</contribute>
|
||||
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningCGPlot.xml"
|
||||
menuText="15min cloud to ground density" id="1HrGridLightningCGPlot">
|
||||
<substitute key="negOffset" value="900"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningCloudFlashPlot.xml"
|
||||
menuText="15min cloud flash density" id="1HrGridLightningCloudFlashPlot">
|
||||
<substitute key="negOffset" value="900"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningTotalFlashPlot.xml"
|
||||
menuText="15min total flash density" id="1HrGridLightningFlashPlot">
|
||||
<substitute key="negOffset" value="900"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningPulsePlot.xml"
|
||||
menuText="15min pulse density" id="1HrGridLightningPulsePlot">
|
||||
<substitute key="negOffset" value="900"/>
|
||||
</contribute>
|
||||
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningCGPlot.xml"
|
||||
menuText="5min cloud to ground density" id="1HrGridLightningCGPlot">
|
||||
<substitute key="negOffset" value="300"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningCloudFlashPlot.xml"
|
||||
menuText="5min cloud flash density" id="1HrGridLightningCloudFlashPlot">
|
||||
<substitute key="negOffset" value="300"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningTotalFlashPlot.xml"
|
||||
menuText="5min total flash density" id="1HrGridLightningFlashPlot">
|
||||
<substitute key="negOffset" value="300"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningPulsePlot.xml"
|
||||
menuText="5min pulse density" id="1HrGridLightningPulsePlot">
|
||||
<substitute key="negOffset" value="300"/>
|
||||
</contribute>
|
||||
|
||||
</menuTemplate>
|
|
@ -0,0 +1,52 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
<menuTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<contribute xsi:type="subMenu" menuText="1km" id="${source}1kmLightningGridSubmenu">
|
||||
<contribute xsi:type="subinclude" fileName="menus/lightning/gridTotalLightningBundleItems.xml">
|
||||
<substitute key="resolution" value="1" />
|
||||
</contribute>
|
||||
</contribute>
|
||||
<contribute xsi:type="subMenu" menuText="3km" id="${source}3kmLightningGridSubmenu">
|
||||
<contribute xsi:type="subinclude" fileName="menus/lightning/gridTotalLightningBundleItems.xml">
|
||||
<substitute key="resolution" value="3" />
|
||||
</contribute>
|
||||
</contribute>
|
||||
<contribute xsi:type="subMenu" menuText="5km" id="${source}5kmLightningGridSubmenu">
|
||||
<contribute xsi:type="subinclude" fileName="menus/lightning/gridTotalLightningBundleItems.xml">
|
||||
<substitute key="resolution" value="5" />
|
||||
</contribute>
|
||||
</contribute>
|
||||
<contribute xsi:type="subMenu" menuText="8km" id="${source}8kmLightningGridSubmenu">
|
||||
<contribute xsi:type="subinclude" fileName="menus/lightning/gridTotalLightningBundleItems.xml">
|
||||
<substitute key="resolution" value="8" />
|
||||
</contribute>
|
||||
</contribute>
|
||||
<contribute xsi:type="subMenu" menuText="20km" id="${source}20kmLightningGridSubmenu">
|
||||
<contribute xsi:type="subinclude" fileName="menus/lightning/gridTotalLightningBundleItems.xml">
|
||||
<substitute key="resolution" value="20" />
|
||||
</contribute>
|
||||
</contribute>
|
||||
<contribute xsi:type="subMenu" menuText="40km" id="${source}40kmLightningGridSubmenu">
|
||||
<contribute xsi:type="subinclude" fileName="menus/lightning/gridTotalLightningBundleItems.xml">
|
||||
<substitute key="resolution" value="40" />
|
||||
</contribute>
|
||||
</contribute>
|
||||
</menuTemplate>
|
|
@ -45,8 +45,9 @@
|
|||
</contribute>
|
||||
</contribute>
|
||||
<contribute xsi:type="subMenu" menuText="Total Lightning Grid" id="entlnGridSubmenu">
|
||||
<contribute xsi:type="subinclude" fileName="menus/lightning/gridLightningMenuItems.xml">
|
||||
<contribute xsi:type="subinclude" fileName="menus/lightning/gridTotalLightningMenuItems.xml">
|
||||
<substitute key="source" value="ENTLN"/>
|
||||
</contribute>
|
||||
</contribute>
|
||||
<contribute xsi:type="separator" id="LMATotalLightning" visible="false" />
|
||||
</menuTemplate>
|
|
@ -34,7 +34,4 @@
|
|||
<contribute xsi:type="bundleItem" file="bundles/LightningSeq.xml"
|
||||
menuText="1min Lgtng Seq Plot" id="1MinLightningFlashSeq">
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/LightningCloudSeq.xml"
|
||||
menuText="1min Cloud Flash Seq Plot" id="1MinLightningCloudFlashSeq">
|
||||
</contribute>
|
||||
</menuTemplate>
|
|
@ -75,6 +75,7 @@ import com.raytheon.viz.lightning.cache.LightningFrameRetriever;
|
|||
* Jul 22, 2014 3333 bclement ignores strikes that aren't on map
|
||||
* Jul 28, 2014 3451 bclement uses intended range min
|
||||
* Jul 29, 2014 3463 bclement uses sparse data source
|
||||
* Mar 05, 2015 4233 bsteffen include source in cache key.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -274,7 +275,8 @@ public class GridLightningResource extends
|
|||
* no local reference to cache object, create key and get cache
|
||||
* object which may be new or from another resource
|
||||
*/
|
||||
LightningFrameMetadata key = new LightningFrameMetadata(time,
|
||||
LightningFrameMetadata key = new LightningFrameMetadata(
|
||||
resourceData.getSource(), time,
|
||||
resourceData.getBinOffset());
|
||||
co = CacheObject.newCacheObject(key, retriever);
|
||||
cacheObjectMap.put(time, co);
|
||||
|
|
|
@ -32,8 +32,6 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
|
|||
|
||||
import com.raytheon.uf.common.dataplugin.PluginDataObject;
|
||||
import com.raytheon.uf.common.dataplugin.binlightning.BinLightningRecord;
|
||||
import com.raytheon.uf.common.dataplugin.binlightning.LightningConstants;
|
||||
import com.raytheon.uf.common.dataquery.requests.RequestConstraint;
|
||||
import com.raytheon.uf.common.time.DataTime;
|
||||
import com.raytheon.uf.common.time.TimeRange;
|
||||
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||
|
@ -92,6 +90,7 @@ import com.raytheon.viz.lightning.cache.LightningFrameRetriever;
|
|||
* moved name formatting to static method
|
||||
* Aug 04, 2014 3488 bclement added sanity check for record bin range
|
||||
* Aug 19, 2014 3542 bclement fixed strike count clipping issue
|
||||
* Mar 05, 2015 4233 bsteffen include source in cache key.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -111,7 +110,7 @@ public class LightningResource extends
|
|||
private boolean needsUpdate;
|
||||
|
||||
private String resourceName;
|
||||
|
||||
|
||||
private int posAdj;
|
||||
|
||||
private IFont font;
|
||||
|
@ -222,11 +221,9 @@ public class LightningResource extends
|
|||
rval += modifier;
|
||||
}
|
||||
|
||||
HashMap<String, RequestConstraint> metadata = resourceData
|
||||
.getMetadataMap();
|
||||
if (metadata != null && metadata.containsKey(LightningConstants.SOURCE)) {
|
||||
rval += metadata.get(LightningConstants.SOURCE)
|
||||
.getConstraintValue() + " ";
|
||||
String source = resourceData.getSource();
|
||||
if (source != null) {
|
||||
rval += source + " ";
|
||||
}
|
||||
return rval;
|
||||
}
|
||||
|
@ -283,9 +280,10 @@ public class LightningResource extends
|
|||
int negCount = 0;
|
||||
int cloudCount = 0;
|
||||
int pulseCount = 0;
|
||||
|
||||
if (magnification == 0.0) magnification=(float) 0.01;
|
||||
|
||||
|
||||
if (magnification == 0.0)
|
||||
magnification = (float) 0.01;
|
||||
|
||||
/*
|
||||
* we only want strikes that are visible so we have to filter any
|
||||
* strikes that aren't in both the clipping pane and the view
|
||||
|
@ -448,7 +446,8 @@ public class LightningResource extends
|
|||
* we know about, return without removing the time.
|
||||
*/
|
||||
if (dataTimes.indexOf(dataTime) == dataTimes.size() - 1) {
|
||||
CacheObject<LightningFrameMetadata, LightningFrame> co = cacheObjectMap.get(dataTime);
|
||||
CacheObject<LightningFrameMetadata, LightningFrame> co = cacheObjectMap
|
||||
.get(dataTime);
|
||||
if (co != null) {
|
||||
LightningFrameMetadata metadata = co.getMetadata();
|
||||
synchronized (metadata) {
|
||||
|
@ -468,13 +467,12 @@ public class LightningResource extends
|
|||
Map<DataTime, List<BinLightningRecord>> recordMap = new HashMap<DataTime, List<BinLightningRecord>>();
|
||||
|
||||
for (BinLightningRecord obj : objs) {
|
||||
long duration = obj.getDataTime().getValidPeriod()
|
||||
.getDuration();
|
||||
if (duration > MAX_RECORD_BIN_MILLIS) {
|
||||
statusHandler.error("Record bin time larger than maximum "
|
||||
+ "supported period. Skipping record: " + obj);
|
||||
continue;
|
||||
}
|
||||
long duration = obj.getDataTime().getValidPeriod().getDuration();
|
||||
if (duration > MAX_RECORD_BIN_MILLIS) {
|
||||
statusHandler.error("Record bin time larger than maximum "
|
||||
+ "supported period. Skipping record: " + obj);
|
||||
continue;
|
||||
}
|
||||
DataTime time = new DataTime(obj.getStartTime());
|
||||
DataTime end = new DataTime(obj.getStopTime());
|
||||
time = this.getResourceData().getBinOffset()
|
||||
|
@ -518,7 +516,8 @@ public class LightningResource extends
|
|||
* no local reference to cache object, create key and get
|
||||
* cache object which may be new or from another resource
|
||||
*/
|
||||
LightningFrameMetadata key = new LightningFrameMetadata(dt,
|
||||
LightningFrameMetadata key = new LightningFrameMetadata(
|
||||
resourceData.getSource(), dt,
|
||||
resourceData.getBinOffset());
|
||||
co = CacheObject.newCacheObject(key, retriever);
|
||||
cacheObjectMap.put(dt, co);
|
||||
|
|
|
@ -28,6 +28,7 @@ import javax.xml.bind.annotation.XmlAttribute;
|
|||
|
||||
import com.raytheon.uf.common.dataplugin.PluginDataObject;
|
||||
import com.raytheon.uf.common.dataplugin.binlightning.BinLightningRecord;
|
||||
import com.raytheon.uf.common.dataplugin.binlightning.LightningConstants;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
|
@ -47,7 +48,7 @@ import com.raytheon.uf.viz.core.rsc.LoadProperties;
|
|||
* Feb 27, 2013 DCS 152 jgerth Support for WWLLN and multiple sources
|
||||
* Jun 19, 2014 3214 bclement added pulse and cloud flash support
|
||||
* Jul 07, 2014 3333 bclement removed plotLightSource field
|
||||
*
|
||||
* Mar 05, 2015 4233 bsteffen include source in cache key.
|
||||
* </pre>
|
||||
*
|
||||
* @author chammack
|
||||
|
@ -208,6 +209,15 @@ public class LightningResourceData extends AbstractRequestableResourceData {
|
|||
this.countPosition = countPosition;
|
||||
}
|
||||
|
||||
public String getSource() {
|
||||
if (metadataMap != null
|
||||
&& metadataMap.containsKey(LightningConstants.SOURCE)) {
|
||||
return metadataMap.get(LightningConstants.SOURCE)
|
||||
.getConstraintValue();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
|
|
|
@ -36,6 +36,7 @@ import com.raytheon.uf.common.time.DataTime;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jul 9, 2014 3333 bclement moved from LightningResource
|
||||
* Mar 05, 2015 4233 bsteffen include source in cache key.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -44,6 +45,8 @@ import com.raytheon.uf.common.time.DataTime;
|
|||
*/
|
||||
public class LightningFrameMetadata {
|
||||
|
||||
private final String source;
|
||||
|
||||
private final BinOffset offset;
|
||||
|
||||
private final DataTime frameTime;
|
||||
|
@ -52,7 +55,9 @@ public class LightningFrameMetadata {
|
|||
|
||||
private final List<BinLightningRecord> processed = new ArrayList<BinLightningRecord>();
|
||||
|
||||
public LightningFrameMetadata(DataTime frameTime, BinOffset offset) {
|
||||
public LightningFrameMetadata(String source, DataTime frameTime,
|
||||
BinOffset offset) {
|
||||
this.source = source;
|
||||
this.frameTime = frameTime;
|
||||
this.offset = offset;
|
||||
}
|
||||
|
@ -92,6 +97,7 @@ public class LightningFrameMetadata {
|
|||
result = prime * result
|
||||
+ ((frameTime == null) ? 0 : frameTime.hashCode());
|
||||
result = prime * result + ((offset == null) ? 0 : offset.hashCode());
|
||||
result = prime * result + ((source == null) ? 0 : source.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -114,6 +120,11 @@ public class LightningFrameMetadata {
|
|||
return false;
|
||||
} else if (!offset.equals(other.offset))
|
||||
return false;
|
||||
if (source == null) {
|
||||
if (other.source != null)
|
||||
return false;
|
||||
} else if (!source.equals(other.source))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -65,7 +65,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
|||
* Feb 2, 2014 16201 snaples Added saved data flag support
|
||||
* Apr 28, 2014 16707 snaples Added code to save and set location of dialog box when moved.
|
||||
* Jan 12, 2015 16993 snaples Restored code for Substitute Field Combo box.
|
||||
*
|
||||
* Feb 26, 2015 17209 cgobs Ensured that there is an initial selection of Substitution field, prevents empty selection.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -387,16 +387,22 @@ public class DrawPolygonDlg extends CaveSWTDialog {
|
|||
// spaceLabel.setText("***** ");
|
||||
|
||||
int selectedFieldIndex = 0;
|
||||
|
||||
boolean found = false;
|
||||
//find the index of the selected field
|
||||
for (selectedFieldIndex = 0; selectedFieldIndex < displayFieldDataArray.length; selectedFieldIndex++)
|
||||
{
|
||||
if (displayFieldDataArray[selectedFieldIndex] == subType)
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found)
|
||||
{
|
||||
selectedFieldIndex = 0;
|
||||
}
|
||||
|
||||
//create and initialize the display field type name array
|
||||
displayTypeNameArray = new String[displayFieldDataArray.length];
|
||||
|
||||
|
@ -411,27 +417,42 @@ public class DrawPolygonDlg extends CaveSWTDialog {
|
|||
fieldTypeCombo.setTextLimit(35);
|
||||
fieldTypeCombo.setLayoutData(gd);
|
||||
fieldTypeCombo.setItems(displayTypeNameArray);
|
||||
fieldTypeCombo.select(selectedFieldIndex);
|
||||
// fieldTypeCombo.select(selectedFieldIndex);
|
||||
|
||||
fieldTypeCombo.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
String selectedFieldString = fieldTypeCombo.getText();
|
||||
|
||||
setSubstitutionField();
|
||||
|
||||
// String selectedFieldString = fieldTypeCombo.getText();
|
||||
|
||||
// System.out.println("DrawPolygon.createFieldCombo(): selectedFieldString = " +
|
||||
// selectedFieldString);
|
||||
|
||||
subType = DisplayFieldData.fromDisplayNameString(selectedFieldString);
|
||||
// subType = DisplayFieldData.fromDisplayNameString(selectedFieldString);
|
||||
|
||||
// if (subType != null)
|
||||
// {
|
||||
// System.out.println("DrawPolygon.createFieldCombo(): subType = " +
|
||||
// subType.toString());
|
||||
// }
|
||||
// {
|
||||
// System.out.println("DrawPolygon.createFieldCombo(): subType = " +
|
||||
// subType.toString());
|
||||
// }
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//select the substitution field
|
||||
|
||||
fieldTypeCombo.select(selectedFieldIndex);
|
||||
setSubstitutionField();
|
||||
|
||||
}
|
||||
|
||||
private void setSubstitutionField()
|
||||
{
|
||||
String selectedFieldString = fieldTypeCombo.getText();
|
||||
subType = DisplayFieldData.fromDisplayNameString(selectedFieldString);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -160,7 +160,7 @@ public class BestEstimate1HrQpeDlg extends BasePostAnalysisDlg {
|
|||
applyGridAdjustments(adjustedGrid, biasRatioGrid, disaggGrid);
|
||||
|
||||
float[] dataArray = paMgr.convertToSingleArray(adjustedGrid, false, true);
|
||||
short[] shortArray= paMgr.convertToShortArray(dataArray, 100.0f);
|
||||
short[] shortArray= paMgr.convertToShortArray(dataArray, 1.0f);
|
||||
|
||||
XmrgFile file = new XmrgFile();
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* December 2013 DCS 167 C. Gobs Initial version
|
||||
*
|
||||
* February 2015 C. Gobs Fixed issue with parsing unexpected file name formats in xmrg directory
|
||||
* </pre>
|
||||
*
|
||||
*
|
||||
|
@ -156,6 +156,7 @@ public class PostAnalysisManager
|
|||
try
|
||||
{
|
||||
shiftedDate = utcSdf2.parse(timeString);
|
||||
longTime = shiftedDate.getTime();
|
||||
}
|
||||
catch(ParseException e)
|
||||
{
|
||||
|
@ -164,7 +165,7 @@ public class PostAnalysisManager
|
|||
|
||||
}
|
||||
|
||||
longTime = shiftedDate.getTime();
|
||||
|
||||
|
||||
return longTime;
|
||||
}
|
||||
|
|
22
deltaScripts/14.4.1/DR4209/updateSatSpatialDiffTypes.sh
Normal file
22
deltaScripts/14.4.1/DR4209/updateSatSpatialDiffTypes.sh
Normal file
|
@ -0,0 +1,22 @@
|
|||
#!/bin/bash
|
||||
# DR #4209 - this update script will convert the satellite_spatial dx and dy columns to double precision
|
||||
# This is only necessary on sites installed before 14.2 but there is no harm running it everywhere.
|
||||
|
||||
PSQL="/awips2/psql/bin/psql"
|
||||
|
||||
echo "INFO: Updating satellite spatial table"
|
||||
|
||||
${PSQL} -U awips -d metadata -c "ALTER TABLE satellite_spatial ALTER COLUMN dx SET DATA TYPE double precision;"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "ERROR: Failed to update column type for dx column of satellite_spatial table"
|
||||
echo "FATAL: The update has failed."
|
||||
exit 1
|
||||
fi
|
||||
${PSQL} -U awips -d metadata -c "ALTER TABLE satellite_spatial ALTER COLUMN dy SET DATA TYPE double precision;"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "ERROR: Failed to update column type for dy column of satellite_spatial table"
|
||||
echo "FATAL: The update has failed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "INFO: Satellite spatial table successfully updated."
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
<bean id="gfeSiteActivation" class="com.raytheon.edex.plugin.gfe.config.GFESiteActivation"
|
||||
depends-on="commonTimeRegistered, gfeDbRegistered, levelFactoryInitialized">
|
||||
<constructor-arg ref="fetchATSrv" />
|
||||
<constructor-arg ref="iscProvider" />
|
||||
</bean>
|
||||
|
||||
<bean id="gfeSitesActiveRequest" factory-bean="siteAwareRegistry" factory-method="register"
|
||||
|
@ -572,22 +572,32 @@
|
|||
<constructor-arg ref="clusteredGfeIscRoutes"/>
|
||||
</bean>
|
||||
|
||||
<!-- Active Table Sharing Definitions -->
|
||||
<bean id="fetchATSrv" class="com.raytheon.edex.plugin.gfe.isc.FetchActiveTableSrv" />
|
||||
<!-- ISC Services Beans -->
|
||||
<bean id="iscProvider" class="com.raytheon.edex.plugin.gfe.isc.IscServiceProvider" />
|
||||
|
||||
<bean factory-bean="contextManager" factory-method="registerContextStateProcessor">
|
||||
<constructor-arg ref="activeTableSharingRoutes"/>
|
||||
<bean id="fetchATSrv" class="com.raytheon.edex.plugin.gfe.isc.FetchActiveTableSrv" />
|
||||
<bean factory-bean="iscProvider" factory-method="addISCService">
|
||||
<constructor-arg ref="fetchATSrv"/>
|
||||
</bean>
|
||||
|
||||
<camelContext id="activeTableSharingRoutes" xmlns="http://camel.apache.org/schema/spring"
|
||||
<bean id="requestTCVSrv" class="com.raytheon.edex.plugin.gfe.isc.RequestTCVSrv" />
|
||||
<bean factory-bean="iscProvider" factory-method="addISCService">
|
||||
<constructor-arg ref="requestTCVSrv"/>
|
||||
</bean>
|
||||
|
||||
<bean factory-bean="contextManager" factory-method="registerContextStateProcessor">
|
||||
<constructor-arg ref="clusteredIscBeans" />
|
||||
<constructor-arg ref="iscProvider" />
|
||||
</bean>
|
||||
|
||||
<camelContext id="clusteredIscBeans" xmlns="http://camel.apache.org/schema/spring"
|
||||
errorHandlerRef="errorHandler">
|
||||
<route id="activateFetchATSrv">
|
||||
<from uri="timer://activateActiveTableSharing?repeatCount=1"/>
|
||||
<bean ref="fetchATSrv" method="activateService"/>
|
||||
<route id="activateISC">
|
||||
<from uri="timer://activateISCServices?repeatCount=1"/>
|
||||
<bean ref="iscProvider" method="activateInstance"/>
|
||||
</route>
|
||||
</camelContext>
|
||||
<bean factory-bean="contextManager" factory-method="registerClusteredContext">
|
||||
<constructor-arg ref="activeTableSharingRoutes"/>
|
||||
<constructor-arg ref="clusteredIscBeans"/>
|
||||
</bean>
|
||||
</beans>
|
||||
|
|
|
@ -21,41 +21,22 @@ package com.raytheon.edex.plugin.gfe.config;
|
|||
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.net.InetAddress;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
|
||||
import jep.JepException;
|
||||
|
||||
import com.google.common.util.concurrent.MoreExecutors;
|
||||
import com.raytheon.edex.plugin.gfe.exception.GfeConfigurationException;
|
||||
import com.raytheon.edex.plugin.gfe.exception.GfeMissingConfigurationException;
|
||||
import com.raytheon.edex.plugin.gfe.isc.FetchActiveTableSrv;
|
||||
import com.raytheon.edex.plugin.gfe.isc.IRTManager;
|
||||
import com.raytheon.edex.plugin.gfe.isc.IscServiceProvider;
|
||||
import com.raytheon.edex.plugin.gfe.server.IFPServer;
|
||||
import com.raytheon.edex.site.SiteUtil;
|
||||
import com.raytheon.uf.common.dataplugin.PluginException;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.exception.GfeException;
|
||||
import com.raytheon.uf.common.localization.IPathManager;
|
||||
import com.raytheon.uf.common.localization.LocalizationContext;
|
||||
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
|
||||
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType;
|
||||
import com.raytheon.uf.common.localization.PathManagerFactory;
|
||||
import com.raytheon.uf.common.python.PyUtil;
|
||||
import com.raytheon.uf.common.python.PythonScript;
|
||||
import com.raytheon.uf.common.site.notify.SiteActivationNotification;
|
||||
import com.raytheon.uf.common.site.notify.SiteActivationNotification.ACTIVATIONSTATUS;
|
||||
import com.raytheon.uf.common.site.notify.SiteActivationNotification.ACTIVATIONTYPE;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.common.util.FileUtil;
|
||||
import com.raytheon.uf.edex.activetable.ActiveTablePyIncludeUtil;
|
||||
import com.raytheon.uf.edex.core.EDEXUtil;
|
||||
import com.raytheon.uf.edex.core.EdexException;
|
||||
import com.raytheon.uf.edex.database.DataAccessLayerException;
|
||||
|
@ -94,6 +75,7 @@ import com.raytheon.uf.edex.site.notify.SendSiteActivationNotifications;
|
|||
* Oct 07, 2014 #3684 randerso Restructured IFPServer start up
|
||||
* Dec 10, 2014 #4953 randerso Added requestTCVFiles call at site activation
|
||||
* Feb 25, 2015 #4128 dgilling Simplify activation of active table sharing.
|
||||
* Mar 11, 2015 #4128 dgilling Refactor activation and management of ISC services.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -113,9 +95,7 @@ public class GFESiteActivation implements ISiteActivationListener {
|
|||
|
||||
private boolean intialized;
|
||||
|
||||
private final ExecutorService postActivationTaskExecutor;
|
||||
|
||||
private final FetchActiveTableSrv fetchAtSrv;
|
||||
private final IscServiceProvider iscServices;
|
||||
|
||||
/**
|
||||
* Default constructor. Builds a GFESiteActivation instance with no
|
||||
|
@ -127,17 +107,14 @@ public class GFESiteActivation implements ISiteActivationListener {
|
|||
|
||||
/**
|
||||
* Builds a GFESiteActivation instance with an associated
|
||||
* {@code FetchActiveTableSrv} instance. Should only be used on request JVM.
|
||||
* {@code IscServiceProvider} instance. Should only be used on request JVM.
|
||||
*
|
||||
* @param fetchAtSrv
|
||||
* {@code FetchActiveTableSrv} instance
|
||||
* @param iscServices
|
||||
* {@code IscServiceProvider} instance
|
||||
*/
|
||||
public GFESiteActivation(final FetchActiveTableSrv fetchAtSrv) {
|
||||
public GFESiteActivation(final IscServiceProvider iscServices) {
|
||||
this.intialized = false;
|
||||
this.postActivationTaskExecutor = MoreExecutors
|
||||
.getExitingExecutorService((ThreadPoolExecutor) Executors
|
||||
.newCachedThreadPool());
|
||||
this.fetchAtSrv = fetchAtSrv;
|
||||
this.iscServices = iscServices;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -330,63 +307,8 @@ public class GFESiteActivation implements ISiteActivationListener {
|
|||
ClusterLockUtils.unlock(ct, false);
|
||||
}
|
||||
|
||||
// Doesn't need to be cluster locked
|
||||
statusHandler.info("Checking ISC configuration...");
|
||||
if (config.requestISC()) {
|
||||
String host = InetAddress.getLocalHost().getCanonicalHostName();
|
||||
String gfeHost = config.getServerHost();
|
||||
String hostNameToCompare = gfeHost;
|
||||
if (gfeHost.endsWith("f")) {
|
||||
hostNameToCompare = gfeHost.substring(0, gfeHost.length() - 1);
|
||||
}
|
||||
// TODO: specific to a host and jvm type, register it independently,
|
||||
// but don't hard code request
|
||||
if (host.contains(hostNameToCompare)
|
||||
&& System.getProperty("edex.run.mode").equals("request")) {
|
||||
statusHandler.info("Enabling ISC...");
|
||||
try {
|
||||
IRTManager.getInstance().enableISC(siteID, config);
|
||||
|
||||
final IFPServerConfig configRef = config;
|
||||
|
||||
if (configRef.tableFetchTime() > 0) {
|
||||
Runnable activateTableSharing = new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
EDEXUtil.waitForRunning();
|
||||
fetchAtSrv.activateSite(siteID, configRef);
|
||||
}
|
||||
};
|
||||
postActivationTaskExecutor.submit(activateTableSharing);
|
||||
}
|
||||
|
||||
Runnable requestTCV = new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
// wait until EDEX is up and running to request TCV
|
||||
// files
|
||||
EDEXUtil.waitForRunning();
|
||||
|
||||
requestTCVFiles(siteID, configRef);
|
||||
}
|
||||
};
|
||||
|
||||
postActivationTaskExecutor.submit(requestTCV);
|
||||
|
||||
} catch (Exception e) {
|
||||
statusHandler
|
||||
.error("Error starting GFE ISC. ISC functionality will be unavailable!!",
|
||||
e);
|
||||
}
|
||||
} else {
|
||||
statusHandler
|
||||
.info("ISC Enabled but will use another EDEX instance");
|
||||
}
|
||||
|
||||
} else {
|
||||
statusHandler.info("ISC is not enabled.");
|
||||
if (iscServices != null) {
|
||||
iscServices.activateSite(siteID, config);
|
||||
}
|
||||
|
||||
statusHandler.info("Adding " + siteID + " to active sites list.");
|
||||
|
@ -423,6 +345,10 @@ public class GFESiteActivation implements ISiteActivationListener {
|
|||
|
||||
}
|
||||
|
||||
if (iscServices != null) {
|
||||
iscServices.deactivateSite(siteID);
|
||||
}
|
||||
|
||||
IFPServer.deactivateServer(siteID);
|
||||
statusHandler.info(siteID + " successfully deactivated");
|
||||
|
||||
|
@ -488,46 +414,4 @@ public class GFESiteActivation implements ISiteActivationListener {
|
|||
}
|
||||
return retVal;
|
||||
}
|
||||
|
||||
private void requestTCVFiles(String siteId, IFPServerConfig config) {
|
||||
IPathManager pathMgr = PathManagerFactory.getPathManager();
|
||||
LocalizationContext commonBaseCx = pathMgr.getContext(
|
||||
LocalizationType.COMMON_STATIC, LocalizationLevel.BASE);
|
||||
String scriptPath = pathMgr.getFile(commonBaseCx,
|
||||
FileUtil.join(ActiveTablePyIncludeUtil.VTEC, "requestTCV.py"))
|
||||
.getPath();
|
||||
|
||||
String pythonIncludePath = PyUtil.buildJepIncludePath(
|
||||
ActiveTablePyIncludeUtil.getCommonPythonIncludePath(),
|
||||
ActiveTablePyIncludeUtil.getCommonGfeIncludePath(),
|
||||
ActiveTablePyIncludeUtil.getVtecIncludePath(siteId),
|
||||
ActiveTablePyIncludeUtil.getGfeConfigIncludePath(siteId),
|
||||
ActiveTablePyIncludeUtil.getIscScriptsIncludePath());
|
||||
|
||||
PythonScript script = null;
|
||||
try {
|
||||
script = new PythonScript(scriptPath, pythonIncludePath, this
|
||||
.getClass().getClassLoader());
|
||||
|
||||
try {
|
||||
Map<String, Object> argMap = new HashMap<String, Object>();
|
||||
argMap.put("siteID", siteId);
|
||||
argMap.put("config", config);
|
||||
script.execute("runFromJava", argMap);
|
||||
} catch (JepException e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Error executing requestTCV.", e);
|
||||
}
|
||||
} catch (JepException e) {
|
||||
statusHandler
|
||||
.handle(Priority.PROBLEM,
|
||||
"Unable to instantiate requestTCV python script object.",
|
||||
e);
|
||||
} finally {
|
||||
if (script != null) {
|
||||
script.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -30,12 +30,11 @@ import java.util.concurrent.ScheduledFuture;
|
|||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.raytheon.edex.plugin.gfe.config.IFPServerConfig;
|
||||
import com.raytheon.edex.plugin.gfe.server.IFPServer;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.common.util.RunProcess;
|
||||
import com.raytheon.uf.edex.core.IContextStateProcessor;
|
||||
import com.raytheon.uf.edex.core.EDEXUtil;
|
||||
|
||||
/**
|
||||
* Service that fetches neighboring sites' active table entries that are
|
||||
|
@ -53,6 +52,8 @@ import com.raytheon.uf.edex.core.IContextStateProcessor;
|
|||
* fetching when site is deactivated.
|
||||
* Feb 26, 2015 #4128 dgilling Moved to edex.gfe plugin, rewritten as
|
||||
* IContextStateProcessor.
|
||||
* Mar 11, 2015 #4128 dgilling Ensure this service runs on same cluster
|
||||
* node as was registered with IRT.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -60,7 +61,7 @@ import com.raytheon.uf.edex.core.IContextStateProcessor;
|
|||
* @version 1.0
|
||||
*/
|
||||
|
||||
public final class FetchActiveTableSrv implements IContextStateProcessor {
|
||||
public final class FetchActiveTableSrv implements IISCServiceBean {
|
||||
|
||||
private static final class FetchATJobConfig {
|
||||
|
||||
|
@ -165,31 +166,21 @@ public final class FetchActiveTableSrv implements IContextStateProcessor {
|
|||
|
||||
private ScheduledExecutorService jobExecutor;
|
||||
|
||||
private volatile boolean activeServiceInstance;
|
||||
|
||||
/**
|
||||
* Default constructor.
|
||||
*/
|
||||
public FetchActiveTableSrv() {
|
||||
this.activeServiceInstance = false;
|
||||
this.siteJobInstanceMap = new ConcurrentHashMap<String, ScheduledFuture<?>>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Dummy trigger method for the timer in the camel context this bean
|
||||
* monitors. Ensures this bean properly fails over between cluster members
|
||||
* as needed.
|
||||
*/
|
||||
public void activateService() {
|
||||
activeServiceInstance = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a site's active table sharing job from the job pool.
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @param siteID
|
||||
* Site identifier for the site's job to stop.
|
||||
* @see
|
||||
* com.raytheon.edex.plugin.gfe.isc.IISCServiceBean#deactivateSite(java.
|
||||
* lang.String)
|
||||
*/
|
||||
@Override
|
||||
public void deactivateSite(final String siteID) {
|
||||
ScheduledFuture<?> siteJob = siteJobInstanceMap.remove(siteID);
|
||||
if (siteJob != null) {
|
||||
|
@ -198,17 +189,19 @@ public final class FetchActiveTableSrv implements IContextStateProcessor {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a site's active table sharing job to the job pool.
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @param siteID
|
||||
* Site identifier for the site's job to add to job pool.
|
||||
* @param gfeConfig
|
||||
* {@code IFPServerConfig} for the site.
|
||||
* @see
|
||||
* com.raytheon.edex.plugin.gfe.isc.IISCServiceBean#activateSite(java.lang
|
||||
* .String, com.raytheon.edex.plugin.gfe.config.IFPServerConfig)
|
||||
*/
|
||||
@Override
|
||||
public void activateSite(final String siteID,
|
||||
final IFPServerConfig gfeConfig) {
|
||||
if (activeServiceInstance && (!siteJobInstanceMap.containsKey(siteID))) {
|
||||
EDEXUtil.waitForRunning();
|
||||
if ((gfeConfig.tableFetchTime() > 0)
|
||||
&& (!siteJobInstanceMap.containsKey(siteID))) {
|
||||
FetchATJobConfig jobConfig = new FetchATJobConfig(siteID, gfeConfig);
|
||||
|
||||
statusHandler.info("Activating FetchAT for " + siteID);
|
||||
|
@ -226,6 +219,10 @@ public final class FetchActiveTableSrv implements IContextStateProcessor {
|
|||
"Unable to submit fetchAT job for execution:", e);
|
||||
siteJobInstanceMap.remove(siteID);
|
||||
}
|
||||
} else {
|
||||
statusHandler
|
||||
.info("Skipping activation of active table sharing for site "
|
||||
+ siteID);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -282,53 +279,35 @@ public final class FetchActiveTableSrv implements IContextStateProcessor {
|
|||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.uf.edex.core.IContextStateProcessor#preStart()
|
||||
* @see com.raytheon.edex.plugin.gfe.isc.IISCServiceBean#startup()
|
||||
*/
|
||||
@Override
|
||||
public void preStart() {
|
||||
public void startup() {
|
||||
statusHandler.info("Initializing FetchATSrv...");
|
||||
|
||||
activeServiceInstance = true;
|
||||
jobExecutor = Executors.newScheduledThreadPool(1);
|
||||
}
|
||||
|
||||
for (IFPServer ifpServer : IFPServer.getActiveServers()) {
|
||||
IFPServerConfig config = ifpServer.getConfig();
|
||||
if ((config.requestISC()) && (config.tableFetchTime() > 0)) {
|
||||
activateSite(ifpServer.getSiteId(), config);
|
||||
}
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.edex.plugin.gfe.isc.IISCServiceBean#preShutdown()
|
||||
*/
|
||||
@Override
|
||||
public void preShutdown() {
|
||||
statusHandler.info("Shutting down FetchATSrv...");
|
||||
if (jobExecutor != null) {
|
||||
jobExecutor.shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.uf.edex.core.IContextStateProcessor#postStart()
|
||||
* @see com.raytheon.edex.plugin.gfe.isc.IISCServiceBean#postShutdown()
|
||||
*/
|
||||
@Override
|
||||
public void postStart() {
|
||||
// no op
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.uf.edex.core.IContextStateProcessor#preStop()
|
||||
*/
|
||||
@Override
|
||||
public void preStop() {
|
||||
statusHandler.info("Shutting down FetchATSrv...");
|
||||
|
||||
activeServiceInstance = false;
|
||||
jobExecutor.shutdown();
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.uf.edex.core.IContextStateProcessor#postStop()
|
||||
*/
|
||||
@Override
|
||||
public void postStop() {
|
||||
public void postShutdown() {
|
||||
jobExecutor = null;
|
||||
siteJobInstanceMap.clear();
|
||||
}
|
||||
|
|
|
@ -26,15 +26,12 @@ import java.util.ArrayList;
|
|||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import jep.JepException;
|
||||
|
||||
import com.raytheon.edex.plugin.gfe.config.GridDbConfig;
|
||||
import com.raytheon.edex.plugin.gfe.config.IFPServerConfig;
|
||||
import com.raytheon.edex.plugin.gfe.config.IFPServerConfigManager;
|
||||
import com.raytheon.edex.plugin.gfe.server.IFPServer;
|
||||
import com.raytheon.edex.plugin.gfe.exception.GfeConfigurationException;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.DatabaseID;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.GridLocation;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.python.GfePyIncludeUtil;
|
||||
|
@ -57,23 +54,25 @@ import com.raytheon.uf.common.util.FileUtil;
|
|||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* 07/14/09 1995 bphillip Initial creation
|
||||
* Mar 14, 2013 1794 djohnson FileUtil.listFiles now returns List.
|
||||
* 06/13/13 2044 randerso Refactored to use IFPServer
|
||||
* Sep 05, 2013 2307 dgilling Use better PythonScript constructor.
|
||||
* Oct 16, 2013 2475 dgilling Move logic previously in IrtServer.py
|
||||
* into this class to avoid Jep memory leak.
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jul 14, 2009 1995 bphillip Initial creation
|
||||
* Mar 14, 2013 1794 djohnson FileUtil.listFiles now returns List.
|
||||
* Jun 13, 2013 2044 randerso Refactored to use IFPServer
|
||||
* Sep 05, 2013 2307 dgilling Use better PythonScript constructor.
|
||||
* Oct 16, 2013 2475 dgilling Move logic previously in IrtServer.py
|
||||
* into this class to avoid Jep memory leak.
|
||||
* Mar 11, 2015 4128 dgilling Refactored to match refactored IRTManager.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author bphillip
|
||||
* @version 1
|
||||
* @version 1.0
|
||||
*/
|
||||
public class GfeIRT extends Thread {
|
||||
public final class GfeIRT implements Runnable {
|
||||
|
||||
/** The logger */
|
||||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||
private static final IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(GfeIRT.class);
|
||||
|
||||
private static final String PYTHON_INSTANCE = "irt";
|
||||
|
@ -103,30 +102,33 @@ public class GfeIRT extends Thread {
|
|||
/** The Python script object */
|
||||
private PythonScript script;
|
||||
|
||||
/**
|
||||
* Map of threads used to unregister sites from the IRT server upon shutdown
|
||||
*/
|
||||
private static Map<String, Thread> shutdownHooks = new ConcurrentHashMap<String, Thread>();
|
||||
private final IRTManager irtMgr;
|
||||
|
||||
private final String ancfUrl;
|
||||
|
||||
private final String bncfUrl;
|
||||
|
||||
/**
|
||||
* Creates a new GfeIRT object for the provided site ID
|
||||
*
|
||||
* @param siteID
|
||||
* @param siteid
|
||||
* The site ID to create the GfeIRT object for
|
||||
* @throws GfeConfigurationException
|
||||
* If the GFE configuration for the specified site could not be
|
||||
* loaded.
|
||||
* @param config
|
||||
* @param irtMgr
|
||||
*/
|
||||
public GfeIRT(String siteid, IFPServerConfig config)
|
||||
throws GfeConfigurationException {
|
||||
this.setDaemon(true);
|
||||
public GfeIRT(String siteid, IFPServerConfig config, IRTManager irtMgr) {
|
||||
this.siteID = siteid;
|
||||
this.mhsID = config.getMhsid();
|
||||
|
||||
this.irtMgr = irtMgr;
|
||||
|
||||
this.serverHost = config.getServerHost();
|
||||
this.serverPort = config.getRpcPort();
|
||||
this.serverProtocol = config.getProtocolVersion();
|
||||
|
||||
this.ancfUrl = config.iscRoutingTableAddress().get("ANCF");
|
||||
this.bncfUrl = config.iscRoutingTableAddress().get("BNCF");
|
||||
|
||||
GridLocation domain = config.dbDomain();
|
||||
|
||||
this.gridProj = domain.getProjection().getProjectionID().toString();
|
||||
|
@ -188,23 +190,10 @@ public class GfeIRT extends Thread {
|
|||
}
|
||||
config.setRequestedISCsites(this.iscWfosWanted);
|
||||
}
|
||||
|
||||
Thread hook = new Thread() {
|
||||
@Override
|
||||
public void run() {
|
||||
statusHandler.info("Unregistering site [" + siteID
|
||||
+ "] from IRT server...");
|
||||
IRTManager.getInstance().disableISC(mhsID, siteID);
|
||||
statusHandler.info("Site [" + siteID + "] unregistered!");
|
||||
}
|
||||
};
|
||||
java.lang.Runtime.getRuntime().addShutdownHook(hook);
|
||||
shutdownHooks.put(mhsID + siteID, hook);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
try {
|
||||
IPathManager pathMgr = PathManagerFactory.getPathManager();
|
||||
LocalizationContext cx = pathMgr.getContext(
|
||||
|
@ -215,30 +204,29 @@ public class GfeIRT extends Thread {
|
|||
String includePath = PyUtil.buildJepIncludePath(
|
||||
GfePyIncludeUtil.getCommonPythonIncludePath(),
|
||||
GfePyIncludeUtil.getIscScriptsIncludePath(),
|
||||
GfePyIncludeUtil.getGfeConfigIncludePath(this.siteID));
|
||||
this.script = new PythonScript(scriptPath, includePath, getClass()
|
||||
GfePyIncludeUtil.getGfeConfigIncludePath(siteID));
|
||||
script = new PythonScript(scriptPath, includePath, getClass()
|
||||
.getClassLoader());
|
||||
|
||||
IFPServerConfig config = IFPServerConfigManager
|
||||
.getServerConfig(siteID);
|
||||
Map<String, Object> initArgs = new HashMap<String, Object>(2, 1f);
|
||||
initArgs.put("ancfURL", config.iscRoutingTableAddress().get("ANCF"));
|
||||
initArgs.put("bncfURL", config.iscRoutingTableAddress().get("BNCF"));
|
||||
this.script.instantiatePythonClass(PYTHON_INSTANCE, "IrtAccess",
|
||||
initArgs.put("ancfURL", ancfUrl);
|
||||
initArgs.put("bncfURL", bncfUrl);
|
||||
script.instantiatePythonClass(PYTHON_INSTANCE, "IrtAccess",
|
||||
initArgs);
|
||||
} catch (GfeConfigurationException e) {
|
||||
throw new RuntimeException("Could not load GFE configuration", e);
|
||||
} catch (JepException e) {
|
||||
throw new RuntimeException(
|
||||
"Could not instantiate IRT python script instance", e);
|
||||
statusHandler.error(
|
||||
"Could not instantiate IRT python script instance for site "
|
||||
+ siteID, e);
|
||||
statusHandler.error("ISC is disabled for site " + siteID);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// upon any overall failure, start thread over
|
||||
while (IRTManager.getInstance().isRegistered(mhsID, siteID)) {
|
||||
while (irtMgr.shouldRegister(siteID)) {
|
||||
try {
|
||||
// do initial registration, keep trying until successful
|
||||
while (IRTManager.getInstance().isRegistered(mhsID, siteID)) {
|
||||
while (irtMgr.shouldRegister(siteID)) {
|
||||
statusHandler
|
||||
.info("performing initial IRT registration.");
|
||||
|
||||
|
@ -259,11 +247,10 @@ public class GfeIRT extends Thread {
|
|||
|
||||
if (okay) {
|
||||
break;
|
||||
} else if (!IRTManager.getInstance().isRegistered(
|
||||
mhsID, siteID)) {
|
||||
} else if (!irtMgr.shouldRegister(siteID)) {
|
||||
break; // exit processing loop
|
||||
} else {
|
||||
sleep(3 * TimeUtil.MILLIS_PER_SECOND);
|
||||
Thread.sleep(3 * TimeUtil.MILLIS_PER_SECOND);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -271,8 +258,9 @@ public class GfeIRT extends Thread {
|
|||
// for re-register every few seconds, check the StopIRT flag
|
||||
// every few seconds
|
||||
statusHandler.info("initial IRT registration complete.");
|
||||
while (IRTManager.getInstance().isRegistered(mhsID, siteID)) {
|
||||
sleep(3 * TimeUtil.MILLIS_PER_SECOND); // wait 3 seconds
|
||||
while (irtMgr.shouldRegister(siteID)) {
|
||||
Thread.sleep(3 * TimeUtil.MILLIS_PER_SECOND); // wait 3
|
||||
// seconds
|
||||
|
||||
Boolean status1 = (Boolean) script.execute(
|
||||
"checkForReregister", PYTHON_INSTANCE, null);
|
||||
|
@ -302,23 +290,4 @@ public class GfeIRT extends Thread {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the site's entry from the shutdown hook map
|
||||
*
|
||||
* @param mhsid
|
||||
* The MHS ID of the site
|
||||
* @param siteid
|
||||
* The Site ID of the site
|
||||
*/
|
||||
public void removeShutdownHook(String mhsid, String siteid) {
|
||||
if (shutdownHooks.containsKey(mhsid + siteid)) {
|
||||
Thread hook = shutdownHooks.get(mhsid + siteid);
|
||||
try {
|
||||
Runtime.getRuntime().removeShutdownHook(hook);
|
||||
} catch (IllegalStateException e) {
|
||||
// Ignore. Shutdown in progress
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,94 @@
|
|||
/**
|
||||
* 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.edex.plugin.gfe.isc;
|
||||
|
||||
import com.raytheon.edex.plugin.gfe.config.IFPServerConfig;
|
||||
|
||||
/**
|
||||
* An interface for beans that provide ISC services for
|
||||
* {@code IscServiceProvider}. This bean, once registered with
|
||||
* {@code IscServiceProvider} will run on only one of the available EDEX cluster
|
||||
* nodes. The {@code IscServiceProvider} ensures that dependent services all run
|
||||
* together on the same node.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Mar 11, 2015 dgilling Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author dgilling
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public interface IISCServiceBean {
|
||||
|
||||
/**
|
||||
* Called upon activation of a new GFE site. Will only trigger on the
|
||||
* cluster node currently hosting ISC services and if
|
||||
* {@code gfeConfig.requestISC()} returns {@code true}.
|
||||
*
|
||||
* @param siteID
|
||||
* Site identifier to activate ISC services for.
|
||||
* @param gfeConfig
|
||||
* Configuration data for this site.
|
||||
*/
|
||||
void activateSite(final String siteID, final IFPServerConfig gfeConfig);
|
||||
|
||||
/**
|
||||
* Called upon deactivation of a GFE site. Will only trigger on the cluster
|
||||
* node currently hosting ISC services.
|
||||
*
|
||||
* @param siteID
|
||||
* Site identifier to deactivate ISC services for.
|
||||
*/
|
||||
void deactivateSite(final String siteID);
|
||||
|
||||
/**
|
||||
* The startup method for this bean. Should be used to initialize heavy
|
||||
* objects that shouldn't be allowed to run on both cluster nodes to
|
||||
* conserve system resources.
|
||||
*/
|
||||
void startup();
|
||||
|
||||
/**
|
||||
* Called to begin the shutdown process for this bean. Recommend using this
|
||||
* method to cancel any asynchronous tasks this bean may be running.
|
||||
* <p>
|
||||
* Note that this method does not require that the startup method has
|
||||
* previously been called so ensure this code does not rely on any behaviors
|
||||
* of that method.
|
||||
*/
|
||||
void preShutdown();
|
||||
|
||||
/**
|
||||
* Called after {@code IscServiceProvider} has completed its shutdown. One
|
||||
* last chance to cleanup any resources in use by this bean.
|
||||
* <p>
|
||||
* Note that this method does not require that the startup method has
|
||||
* previously been called so ensure this code does not rely on any behaviors
|
||||
* of that method.
|
||||
*/
|
||||
void postShutdown();
|
||||
}
|
|
@ -20,15 +20,21 @@
|
|||
|
||||
package com.raytheon.edex.plugin.gfe.isc;
|
||||
|
||||
import java.lang.Thread.State;
|
||||
import java.util.Map;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import java.util.concurrent.CopyOnWriteArraySet;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.RejectedExecutionException;
|
||||
|
||||
import com.raytheon.edex.plugin.gfe.config.IFPServerConfig;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.exception.GfeException;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
|
||||
/**
|
||||
* Manages interactions for the IRT server used with the GFE ISC capability
|
||||
|
@ -41,89 +47,138 @@ import com.raytheon.uf.common.dataplugin.gfe.exception.GfeException;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* 08/10/09 1995 bphillip Initial creation
|
||||
* 06/13/13 2044 randerso Refactored to use IFPServer
|
||||
* 03/11/15 4128 dgilling Refactored to use ISCServiceProvider.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author bphillip
|
||||
* @version 1
|
||||
*/
|
||||
public class IRTManager {
|
||||
public final class IRTManager {
|
||||
|
||||
/** The logger */
|
||||
protected transient Log logger = LogFactory.getLog(getClass());
|
||||
|
||||
/** The singleton instance */
|
||||
private static IRTManager instance;
|
||||
private final IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(IRTManager.class);
|
||||
|
||||
/** Map of active IRT connections keyed by site */
|
||||
private Map<String, GfeIRT> irtMap;
|
||||
private final ConcurrentMap<String, Future<?>> irtMap;
|
||||
|
||||
/**
|
||||
* Gets the singleton instance of the IRTManager
|
||||
*
|
||||
* @return The singleton instance of the IRTManager
|
||||
*/
|
||||
public static synchronized IRTManager getInstance() {
|
||||
if (instance == null) {
|
||||
instance = new IRTManager();
|
||||
}
|
||||
/** List of valid ISC sites. */
|
||||
private final Set<String> registeredSiteIDs;
|
||||
|
||||
return instance;
|
||||
}
|
||||
private ExecutorService jobExecutor;
|
||||
|
||||
/**
|
||||
* Constructs the singleton instance of the IRT Manager
|
||||
*/
|
||||
private IRTManager() {
|
||||
irtMap = new ConcurrentHashMap<String, GfeIRT>();
|
||||
public IRTManager() {
|
||||
this.irtMap = new ConcurrentHashMap<>();
|
||||
this.registeredSiteIDs = new CopyOnWriteArraySet<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Enables ISC functionality for a site
|
||||
* Determines whether the specified site should continue to (re-) register
|
||||
* with IRT.
|
||||
*
|
||||
* @param siteID
|
||||
* The site to activate ISC functionality for
|
||||
* @param config
|
||||
* server configuration
|
||||
* @throws GfeException
|
||||
* If the ISC functionality cannot be activated
|
||||
* Site identifier to check for.
|
||||
* @return {@code true} if the site should continue registration with IRT.
|
||||
* {@code false} if not.
|
||||
*/
|
||||
public void enableISC(String siteID, IFPServerConfig config)
|
||||
throws GfeException {
|
||||
|
||||
String mhsID = config.getMhsid();
|
||||
if (!irtMap.containsKey(mhsID + "--" + siteID)) {
|
||||
irtMap.put(mhsID + "--" + siteID, new GfeIRT(siteID, config));
|
||||
}
|
||||
|
||||
logger.info("Starting IRT registration thread for site [" + siteID
|
||||
+ "]");
|
||||
irtMap.get(mhsID + "--" + siteID).start();
|
||||
public boolean shouldRegister(final String siteID) {
|
||||
/*
|
||||
* We use this separate Set to hold site IDs to avoid a race condition.
|
||||
* While it would be more convenient to use the keys of the irtMap to
|
||||
* maintain the list of sites that should be attempting to register with
|
||||
* IRT, this will cause a race condition when the Runnable's attempt to
|
||||
* call this method. It's likely the job will hit the shouldRegister()
|
||||
* check before the Future has been added to the Map and thus fail to
|
||||
* ever attempt registration with IRT.
|
||||
*/
|
||||
return registeredSiteIDs.contains(siteID);
|
||||
}
|
||||
|
||||
/**
|
||||
* Disables ISC functionality for a site
|
||||
* Register the given site with the IRT server.
|
||||
*
|
||||
* @param siteID
|
||||
* The site to disable ISC functionality for
|
||||
* Site identifier for the site to register with the IRT server.
|
||||
* @param gfeConfig
|
||||
* The {@code IFPServerConfig} configuration data for the site.
|
||||
*/
|
||||
public void disableISC(String mhsID, String siteID) {
|
||||
GfeIRT gfeIrt = null;
|
||||
String irtKey = mhsID + "--" + siteID;
|
||||
gfeIrt = irtMap.remove(irtKey);
|
||||
if (gfeIrt != null) {
|
||||
if (gfeIrt.getState() != null) {
|
||||
while (!gfeIrt.getState().equals(State.TERMINATED)) {
|
||||
}
|
||||
public void activateSite(String siteID, IFPServerConfig gfeConfig) {
|
||||
if (!irtMap.containsKey(siteID)) {
|
||||
statusHandler.info("Starting IRT registration thread for site ["
|
||||
+ siteID + "]");
|
||||
|
||||
registeredSiteIDs.add(siteID);
|
||||
Runnable job = constructJob(siteID, gfeConfig);
|
||||
|
||||
try {
|
||||
Future<?> future = jobExecutor.submit(job);
|
||||
irtMap.put(siteID, future);
|
||||
} catch (RejectedExecutionException e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Unable to submit fetchAT job for execution:", e);
|
||||
irtMap.remove(siteID);
|
||||
}
|
||||
// Remove the shutdown hook so an unregister is not attempted upon
|
||||
// shutdown
|
||||
gfeIrt.removeShutdownHook(mhsID, siteID);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isRegistered(String mhsID, String siteID) {
|
||||
boolean registered = irtMap.containsKey(mhsID + "--" + siteID);
|
||||
return registered;
|
||||
private GfeIRT constructJob(final String siteID,
|
||||
final IFPServerConfig config) {
|
||||
return new GfeIRT(siteID, config, this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unregisters the given site with the IRT server.
|
||||
*
|
||||
* @param siteID
|
||||
* Site identifier of the site to unregister.
|
||||
*/
|
||||
public void deactivateSite(String siteID) {
|
||||
registeredSiteIDs.remove(siteID);
|
||||
Future<?> job = irtMap.remove(siteID);
|
||||
if (job != null) {
|
||||
statusHandler.info("Deactivating IRT registration thread for "
|
||||
+ siteID);
|
||||
job.cancel(false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Startup hook for this bean. Initializes job pool.
|
||||
*/
|
||||
public void preStart() {
|
||||
statusHandler.info("Initializing IRTManager...");
|
||||
|
||||
jobExecutor = Executors.newCachedThreadPool();
|
||||
}
|
||||
|
||||
/**
|
||||
* Preliminary shutdown hook for this bean. Stops all running IRT
|
||||
* registration jobs and initiates shutdown of the job pool.
|
||||
*/
|
||||
public void preStop() {
|
||||
statusHandler.info("Shutting down IRTManager...");
|
||||
|
||||
Collection<String> siteIds = new ArrayList<>(registeredSiteIDs);
|
||||
for (String siteId : siteIds) {
|
||||
deactivateSite(siteId);
|
||||
}
|
||||
|
||||
if (jobExecutor != null) {
|
||||
jobExecutor.shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Shutdown completion hook for this bean. Clears all saved state for this
|
||||
* bean.
|
||||
*/
|
||||
public void postStop() {
|
||||
jobExecutor = null;
|
||||
irtMap.clear();
|
||||
registeredSiteIDs.clear();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,230 @@
|
|||
/**
|
||||
* 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.edex.plugin.gfe.isc;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
import com.raytheon.edex.plugin.gfe.config.IFPServerConfig;
|
||||
import com.raytheon.edex.plugin.gfe.server.IFPServer;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.edex.core.IContextStateProcessor;
|
||||
|
||||
/**
|
||||
* An {@code IContextStateProcessor} implementation for ISC beans. Ensures that
|
||||
* all ISC services are running on the same cluster node together.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Mar 11, 2015 #4128 dgilling Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author dgilling
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public final class IscServiceProvider implements IContextStateProcessor {
|
||||
|
||||
private final IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(IscServiceProvider.class);
|
||||
|
||||
private volatile boolean activeInstance;
|
||||
|
||||
private final Collection<IISCServiceBean> iscBeans;
|
||||
|
||||
private final ExecutorService jobThreads;
|
||||
|
||||
private final IRTManager irtManager;
|
||||
|
||||
/**
|
||||
* Default constructor.
|
||||
*/
|
||||
public IscServiceProvider() {
|
||||
this.iscBeans = new ArrayList<>();
|
||||
this.activeInstance = false;
|
||||
this.jobThreads = Executors.newCachedThreadPool();
|
||||
this.irtManager = new IRTManager();
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a new {@code IISCServiceBean} instance with this class. Beans
|
||||
* can only be added and never removed.
|
||||
*
|
||||
* @param iscServiceBean
|
||||
* The bean to register.
|
||||
* @return The bean that was registered.
|
||||
*/
|
||||
public IISCServiceBean addISCService(final IISCServiceBean iscServiceBean) {
|
||||
iscBeans.add(iscServiceBean);
|
||||
return iscServiceBean;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.uf.edex.core.IContextStateProcessor#preStart()
|
||||
*/
|
||||
@Override
|
||||
public void preStart() {
|
||||
activeInstance = true;
|
||||
|
||||
irtManager.preStart();
|
||||
for (IISCServiceBean iscBean : iscBeans) {
|
||||
iscBean.startup();
|
||||
}
|
||||
|
||||
for (IFPServer ifpServer : IFPServer.getActiveServers()) {
|
||||
activateSite(ifpServer.getSiteId(), ifpServer.getConfig());
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.uf.edex.core.IContextStateProcessor#postStart()
|
||||
*/
|
||||
@Override
|
||||
public void postStart() {
|
||||
// no-op
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.uf.edex.core.IContextStateProcessor#preStop()
|
||||
*/
|
||||
@Override
|
||||
public void preStop() {
|
||||
irtManager.preStop();
|
||||
for (IISCServiceBean iscBean : iscBeans) {
|
||||
iscBean.preShutdown();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.uf.edex.core.IContextStateProcessor#postStop()
|
||||
*/
|
||||
@Override
|
||||
public void postStop() {
|
||||
irtManager.postStop();
|
||||
for (IISCServiceBean iscBean : iscBeans) {
|
||||
iscBean.postShutdown();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Dummy trigger method for the timer in the camel context this bean
|
||||
* monitors. Ensures this bean properly fails over between cluster members
|
||||
* as needed.
|
||||
*/
|
||||
public void activateInstance() {
|
||||
activeInstance = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Activate the ISC services for the given site. All registered beans will
|
||||
* have their {@code activateSite} method called if this instance is running
|
||||
* on the designated ISC cluster node.
|
||||
*
|
||||
* @param siteID
|
||||
* Site identifier to activate ISC services for.
|
||||
* @param config
|
||||
* Configuration data for this site.
|
||||
*/
|
||||
public void activateSite(final String siteID, final IFPServerConfig config) {
|
||||
statusHandler.info("Checking ISC configuration for site " + siteID);
|
||||
|
||||
if (config.requestISC()) {
|
||||
if (activeInstance) {
|
||||
statusHandler.info("Enabling ISC for site " + siteID);
|
||||
|
||||
irtManager.activateSite(siteID, config);
|
||||
|
||||
for (final IISCServiceBean bean : iscBeans) {
|
||||
Runnable activationJob = new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
bean.activateSite(siteID, config);
|
||||
} catch (Throwable t) {
|
||||
statusHandler.error(
|
||||
"Unhandled RuntimeException thrown while activating service "
|
||||
+ bean.getClass()
|
||||
+ " for site " + siteID, t);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
jobThreads.submit(activationJob);
|
||||
}
|
||||
|
||||
} else {
|
||||
statusHandler
|
||||
.info("ISC Enabled but will use another EDEX instance");
|
||||
}
|
||||
} else {
|
||||
statusHandler.info("ISC is not enabled.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Deactivates the ISC services for the given site. All registered beans
|
||||
* will have their {@code deactivateSite} method called if this instance is
|
||||
* running on the designated ISC cluster node.
|
||||
*
|
||||
* @param siteID
|
||||
* Site identifier to deactivate ISC services for.
|
||||
*/
|
||||
public void deactivateSite(final String siteID) {
|
||||
if (activeInstance) {
|
||||
irtManager.deactivateSite(siteID);
|
||||
|
||||
for (final IISCServiceBean bean : iscBeans) {
|
||||
Runnable deactivationJob = new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
bean.deactivateSite(siteID);
|
||||
} catch (Throwable t) {
|
||||
statusHandler.error(
|
||||
"Unhandled RuntimeException thrown while deactivating service "
|
||||
+ bean.getClass() + " for site "
|
||||
+ siteID, t);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
jobThreads.submit(deactivationJob);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,158 @@
|
|||
/**
|
||||
* 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.edex.plugin.gfe.isc;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import jep.JepException;
|
||||
|
||||
import com.raytheon.edex.plugin.gfe.config.IFPServerConfig;
|
||||
import com.raytheon.uf.common.localization.IPathManager;
|
||||
import com.raytheon.uf.common.localization.LocalizationContext;
|
||||
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
|
||||
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType;
|
||||
import com.raytheon.uf.common.localization.PathManagerFactory;
|
||||
import com.raytheon.uf.common.python.PyUtil;
|
||||
import com.raytheon.uf.common.python.PythonScript;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.util.FileUtil;
|
||||
import com.raytheon.uf.edex.activetable.ActiveTablePyIncludeUtil;
|
||||
import com.raytheon.uf.edex.core.EDEXUtil;
|
||||
|
||||
/**
|
||||
* Bean to run requestTCV at GFE site activation time.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Mar 11, 2015 #4128 dgilling Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author dgilling
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public final class RequestTCVSrv implements IISCServiceBean {
|
||||
|
||||
private final IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(RequestTCVSrv.class);
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* com.raytheon.edex.plugin.gfe.isc.IISCServiceBean#activateSite(java.lang
|
||||
* .String, com.raytheon.edex.plugin.gfe.config.IFPServerConfig)
|
||||
*/
|
||||
@Override
|
||||
public void activateSite(String siteID, IFPServerConfig gfeConfig) {
|
||||
EDEXUtil.waitForRunning();
|
||||
requestTCVFiles(siteID, gfeConfig);
|
||||
}
|
||||
|
||||
private void requestTCVFiles(String siteId, IFPServerConfig config) {
|
||||
statusHandler.info("Running requestTCV for site " + siteId);
|
||||
|
||||
IPathManager pathMgr = PathManagerFactory.getPathManager();
|
||||
LocalizationContext commonBaseCx = pathMgr.getContext(
|
||||
LocalizationType.COMMON_STATIC, LocalizationLevel.BASE);
|
||||
String scriptPath = pathMgr.getFile(commonBaseCx,
|
||||
FileUtil.join(ActiveTablePyIncludeUtil.VTEC, "requestTCV.py"))
|
||||
.getPath();
|
||||
|
||||
String pythonIncludePath = PyUtil.buildJepIncludePath(
|
||||
ActiveTablePyIncludeUtil.getCommonPythonIncludePath(),
|
||||
ActiveTablePyIncludeUtil.getCommonGfeIncludePath(),
|
||||
ActiveTablePyIncludeUtil.getVtecIncludePath(siteId),
|
||||
ActiveTablePyIncludeUtil.getGfeConfigIncludePath(siteId),
|
||||
ActiveTablePyIncludeUtil.getIscScriptsIncludePath());
|
||||
|
||||
PythonScript script = null;
|
||||
try {
|
||||
script = new PythonScript(scriptPath, pythonIncludePath, this
|
||||
.getClass().getClassLoader());
|
||||
|
||||
try {
|
||||
Map<String, Object> argMap = new HashMap<String, Object>();
|
||||
argMap.put("siteID", siteId);
|
||||
argMap.put("config", config);
|
||||
script.execute("runFromJava", argMap);
|
||||
} catch (JepException e) {
|
||||
statusHandler.error("Error executing requestTCV.", e);
|
||||
}
|
||||
} catch (JepException e) {
|
||||
statusHandler
|
||||
.error("Unable to instantiate requestTCV python script object.",
|
||||
e);
|
||||
} finally {
|
||||
if (script != null) {
|
||||
script.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* com.raytheon.edex.plugin.gfe.isc.IISCServiceBean#deactivateSite(java.
|
||||
* lang.String)
|
||||
*/
|
||||
@Override
|
||||
public void deactivateSite(String siteID) {
|
||||
// no-op
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.edex.plugin.gfe.isc.IISCServiceBean#startup()
|
||||
*/
|
||||
@Override
|
||||
public void startup() {
|
||||
// no-op
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.edex.plugin.gfe.isc.IISCServiceBean#preShutdown()
|
||||
*/
|
||||
@Override
|
||||
public void preShutdown() {
|
||||
// no-op
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.edex.plugin.gfe.isc.IISCServiceBean#postShutdown()
|
||||
*/
|
||||
@Override
|
||||
public void postShutdown() {
|
||||
// no-op
|
||||
}
|
||||
}
|
|
@ -30,7 +30,6 @@ import java.util.Set;
|
|||
import com.raytheon.edex.plugin.gfe.cache.gridlocations.GridLocationCache;
|
||||
import com.raytheon.edex.plugin.gfe.config.IFPServerConfig;
|
||||
import com.raytheon.edex.plugin.gfe.db.dao.IscSendRecordDao;
|
||||
import com.raytheon.edex.plugin.gfe.isc.IRTManager;
|
||||
import com.raytheon.edex.plugin.gfe.reference.MapManager;
|
||||
import com.raytheon.edex.plugin.gfe.server.database.NetCDFDatabaseManager;
|
||||
import com.raytheon.edex.plugin.gfe.server.database.TopoDatabaseManager;
|
||||
|
@ -46,7 +45,6 @@ import com.raytheon.uf.common.dataplugin.message.DataURINotificationMessage;
|
|||
import com.raytheon.uf.common.dataplugin.satellite.SatelliteRecord;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.edex.database.DataAccessLayerException;
|
||||
|
||||
/**
|
||||
|
@ -63,6 +61,7 @@ import com.raytheon.uf.edex.database.DataAccessLayerException;
|
|||
* May 30, 2013 #2044 randerso Initial creation
|
||||
* Nov 20, 2013 #2331 randerso Added getTopoData method
|
||||
* Oct 07, 2014 #3684 randerso Restructured IFPServer start up
|
||||
* Mar 11, 2015 #4128 dgilling Remove unregister from IRT to IRTManager.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -210,16 +209,11 @@ public class IFPServer {
|
|||
}
|
||||
|
||||
private void dispose() {
|
||||
if (config.requestISC()) {
|
||||
IRTManager.getInstance().disableISC(config.getMhsid(), siteId);
|
||||
}
|
||||
|
||||
try {
|
||||
new IscSendRecordDao().deleteForSite(siteId);
|
||||
} catch (DataAccessLayerException e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Could not clear IscSendRecords for site " + siteId
|
||||
+ " from queue.", e);
|
||||
statusHandler.error("Could not clear IscSendRecords for site "
|
||||
+ siteId + " from queue.", e);
|
||||
}
|
||||
|
||||
// TODO necessary?
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
# Date Ticket# Engineer Description
|
||||
# ------------ ---------- ----------- --------------------------
|
||||
# 12/05/14 4953 randerso Changed to use LocalizationSupport
|
||||
# 03/10/2015 #4129 randerso Fixed error logging
|
||||
#
|
||||
##
|
||||
|
||||
|
@ -225,7 +226,7 @@ def createAreaDictionary(outputDir, mapDict):
|
|||
|
||||
|
||||
if areadict.has_key(ean) and d != areadict[ean]:
|
||||
LogStream.logDiag("Mismatch of definitions in " +\
|
||||
LogStream.logProblem("Mismatch of definitions in " +\
|
||||
"AreaDictionary creation. EditAreaName=", ean,
|
||||
"AreaDict=\n", areadict[ean], "\nIgnored=\n", d)
|
||||
else:
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
# ------------ ---------- ----------- --------------------------
|
||||
# 12/10/14 #4953 randerso Cleaned up imports,
|
||||
# improved spawning of shell cmd
|
||||
# 03/10/2015 #4129 randerso Refactored server selection code into a reusable method
|
||||
#
|
||||
##
|
||||
|
||||
|
@ -49,12 +50,15 @@ import iscUtil
|
|||
class IrtAccess():
|
||||
|
||||
#Constructor taking the web URL for the ISC Routing Table
|
||||
def __init__(self, ancfURL=None, bncfURL=None):
|
||||
def __init__(self, ancfURL=None, bncfURL=None, logger=None):
|
||||
self.__addrs = {}
|
||||
self.__addrs['ANCF'] = ancfURL
|
||||
self.__addrs['BNCF'] = bncfURL
|
||||
self.__registered = None #flag to indicate whether we registered
|
||||
self.__logger=iscUtil.getLogger("irtAccess","irtServer.log")
|
||||
if logger is not None:
|
||||
self.__logger=logger
|
||||
else:
|
||||
self.__logger=iscUtil.getLogger("irtAccess","irtServer.log")
|
||||
|
||||
def logEvent(self,*msg):
|
||||
self.__logger.info(iscUtil.tupleToString(*msg))
|
||||
|
@ -527,3 +531,118 @@ class IrtAccess():
|
|||
s = "mhs=" + mhsid + ",host=" + host + ",port=" + port +\
|
||||
",proto=" + protocol + ",site=" + site
|
||||
return s
|
||||
|
||||
def createDestinationXML(self, destSites, requestingServer):
|
||||
#--------------------------------------------------------------------
|
||||
# Assemble XML source/destination document
|
||||
#--------------------------------------------------------------------
|
||||
iscE = ElementTree.Element('isc')
|
||||
self.addSourceXML(iscE, requestingServer)
|
||||
self.logEvent("Requesting Server:", self.printServerInfo(requestingServer))
|
||||
|
||||
# who is running the domains requested?
|
||||
status, xml = self.getServers(destSites)
|
||||
if not status:
|
||||
raise Exception('Failure to getServers from IRT')
|
||||
|
||||
# decode the XML
|
||||
try:
|
||||
serverTree = ElementTree.ElementTree(ElementTree.XML(xml))
|
||||
serversE = serverTree.getroot()
|
||||
except:
|
||||
self.logException("Malformed XML from getServers()")
|
||||
raise
|
||||
|
||||
if serversE.tag != "servers":
|
||||
raise Exception("Servers packet missing from web server")
|
||||
|
||||
# process each requested domain returned to us
|
||||
msgSendDest = []
|
||||
chosenServers = []
|
||||
matchingServers = []
|
||||
for domainE in serversE:
|
||||
if domainE.tag != "domain":
|
||||
continue
|
||||
|
||||
domain = domainE.get('site')
|
||||
servers = [] #list of servers for this domain
|
||||
|
||||
# decode each server in the domain
|
||||
for addressE in domainE.getchildren():
|
||||
info = self.decodeXMLAddress(addressE)
|
||||
if info is None:
|
||||
continue #not address tag
|
||||
servers.append(info)
|
||||
matchingServers.append(info)
|
||||
|
||||
# server search list in priority. The px3 entries are used for
|
||||
# dual domain for AFC.
|
||||
hp = [('dx4','98000000'),('px3', '98000000'), ('dx4','98000001'),
|
||||
('px3', '98000001')]
|
||||
|
||||
# choose one server from this domain, find first dx4, 98000000
|
||||
# try to use one with the same mhsidDest as the site, which
|
||||
# would be the primary operational GFE. Note that the px3 entries
|
||||
# are for AFC.
|
||||
found = False
|
||||
for matchServer, matchPort in hp:
|
||||
if found:
|
||||
break
|
||||
for server in servers:
|
||||
if server['host'][0:3] == matchServer and \
|
||||
server['port'] == matchPort and server['mhsid'] == domain:
|
||||
chosenServers.append(server)
|
||||
if server['mhsid'] not in msgSendDest:
|
||||
msgSendDest.append(server['mhsid'])
|
||||
found = True
|
||||
break
|
||||
|
||||
# find first dx4, 98000000, but perhaps a different mhsid
|
||||
# this is probably not the primary operational GFE
|
||||
for matchServer, matchPort in hp:
|
||||
if found:
|
||||
break
|
||||
for server in servers:
|
||||
if server['host'][0:3] == matchServer and \
|
||||
server['port'] == matchPort:
|
||||
chosenServers.append(server)
|
||||
if server['mhsid'] not in msgSendDest:
|
||||
msgSendDest.append(server['mhsid'])
|
||||
found = True
|
||||
break
|
||||
|
||||
# if didn't find standard one, then take the first one, but don't
|
||||
# take ourselves unless we are the only one.
|
||||
if not found and servers:
|
||||
for server in servers:
|
||||
if server['mhsid'] != requestingServer['mhsid'] \
|
||||
and server['host'] != requestingServer['host'] \
|
||||
and server['port'] != requestingServer['port'] \
|
||||
and server['site'] != requestingServer['site']:
|
||||
chosenServers.append(server)
|
||||
if server['mhsid'] not in msgSendDest:
|
||||
msgSendDest.append(server['mhsid'])
|
||||
found = True
|
||||
break;
|
||||
|
||||
if not found:
|
||||
chosenServers.append(servers[0])
|
||||
if servers[0]['mhsid'] not in msgSendDest:
|
||||
msgSendDest.append(servers[0]['mhsid'])
|
||||
|
||||
|
||||
# Display the set of matching servers
|
||||
s = "Matching Servers:"
|
||||
for x in matchingServers:
|
||||
s += "\n" + self.printServerInfo(x)
|
||||
self.logEvent(s)
|
||||
|
||||
# Display the chosen set of servers
|
||||
s = "Chosen Servers:"
|
||||
for x in chosenServers:
|
||||
s += "\n" + self.printServerInfo(x)
|
||||
self.logEvent(s)
|
||||
|
||||
self.addDestinationXML(iscE, chosenServers)
|
||||
|
||||
return msgSendDest, iscE
|
||||
|
|
|
@ -24,6 +24,7 @@ import LogStream, tempfile, os, sys, JUtil, subprocess, traceback, errno
|
|||
import time, copy, string, iscUtil
|
||||
|
||||
from com.raytheon.edex.plugin.gfe.isc import IRTManager
|
||||
from subprocess import CalledProcessError
|
||||
|
||||
|
||||
#
|
||||
|
@ -47,6 +48,8 @@ from com.raytheon.edex.plugin.gfe.isc import IRTManager
|
|||
# registration with IRT.
|
||||
# 12/08/2014 4953 randerso Added support for sending/receiving TCV files
|
||||
# Additional code clean up
|
||||
# 03/05/2015 4129 randerso Fix exception handling on subprocess calls
|
||||
# Fixed error when no TCV files were found
|
||||
#
|
||||
##
|
||||
PURGE_AGE = 30 * 24 * 60 * 60 # 30 days in seconds
|
||||
|
@ -157,9 +160,11 @@ def getVTECActiveTable(dataFile, xmlPacket):
|
|||
args.append(fnameXML)
|
||||
try:
|
||||
output = subprocess.check_output(args, stderr=subprocess.STDOUT)
|
||||
logEvent("sendAT command output: ", output)
|
||||
except subprocess.CalledProcessError as e:
|
||||
logProblem("sendAT returned error code: ", e.returncode, e.output)
|
||||
except:
|
||||
logProblem("Error executing sendAT: ", traceback.format_exc())
|
||||
logEvent("sendAT command output: ", output)
|
||||
|
||||
#when we receive a requested active table from another site, this function
|
||||
#is called from iscDataRec
|
||||
|
@ -191,9 +196,11 @@ def putVTECActiveTable(dataFile, xmlPacket):
|
|||
args.append(fnameXML)
|
||||
try:
|
||||
output = subprocess.check_output(args, stderr=subprocess.STDOUT)
|
||||
logEvent("ingestAT command output: ", output)
|
||||
except subprocess.CalledProcessError as e:
|
||||
logProblem("ingestAT returned error code: ", e.returncode, e.output)
|
||||
except:
|
||||
logProblem("Error executing ingestAT: ", traceback.format_exc())
|
||||
logEvent("ingesAT command output: ", output)
|
||||
|
||||
def putTCVFiles(siteID, tarFile):
|
||||
import LocalizationSupport
|
||||
|
@ -313,21 +320,24 @@ def getTCVFiles(ourMhsID, srcServer, destE):
|
|||
fname = fp.name
|
||||
|
||||
try:
|
||||
TCVUtil.packageTCVFiles(localSites, fname, getLogger())
|
||||
if TCVUtil.packageTCVFiles(localSites, fname, getLogger()):
|
||||
|
||||
from xml.etree import ElementTree
|
||||
from xml.etree.ElementTree import Element, SubElement
|
||||
iscE = ElementTree.Element('isc')
|
||||
irt.addSourceXML(iscE, destServer)
|
||||
irt.addDestinationXML(iscE, [srcServer])
|
||||
|
||||
# create the XML file
|
||||
with tempfile.NamedTemporaryFile(suffix='.xml', dir=tcvProductsDir, delete=False) as fd:
|
||||
fnameXML = fd.name
|
||||
fd.write(ElementTree.tostring(iscE))
|
||||
|
||||
# send the files to srcServer
|
||||
sendMHSMessage("PUT_TCV_FILES", srcServer['mhsid'], [fname, fnameXML])
|
||||
from xml.etree import ElementTree
|
||||
from xml.etree.ElementTree import Element, SubElement
|
||||
iscE = ElementTree.Element('isc')
|
||||
irt.addSourceXML(iscE, destServer)
|
||||
irt.addDestinationXML(iscE, [srcServer])
|
||||
|
||||
# create the XML file
|
||||
with tempfile.NamedTemporaryFile(suffix='.xml', dir=tcvProductsDir, delete=False) as fd:
|
||||
fnameXML = fd.name
|
||||
fd.write(ElementTree.tostring(iscE))
|
||||
|
||||
# send the files to srcServer
|
||||
sendMHSMessage("PUT_TCV_FILES", srcServer['mhsid'], [fname, fnameXML])
|
||||
else:
|
||||
logEvent('No TCV files to send')
|
||||
|
||||
except:
|
||||
logException('Error sending TCV files for ' + str(localSites))
|
||||
|
||||
|
@ -502,14 +512,6 @@ def serviceISCRequest(dataFile):
|
|||
ServiceISCRequest.serviceRequest(JUtil.pyValToJavaObj(info['parms']),xmlDestinations,siteConfig.GFESUITE_SITEID)
|
||||
# ifpServer.serviceISCRequest(info['parms'], xmlDestinations)
|
||||
|
||||
# get servers direct call for IRT
|
||||
def irtGetServers(ancfURL, bncfURL, iscWfosWanted):
|
||||
import IrtAccess
|
||||
irt = IrtAccess.IrtAccess(ancfURL, bncfURL)
|
||||
xml = None
|
||||
status, xml = irt.getServers(iscWfosWanted)
|
||||
return xml
|
||||
|
||||
def sendMHSMessage(subject, adressees, attachments, xmtScript=None):
|
||||
# Transmit the request -- do string substitution
|
||||
import siteConfig
|
||||
|
|
|
@ -1,275 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
##
|
||||
# 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.
|
||||
##
|
||||
|
||||
|
||||
from __future__ import with_statement
|
||||
|
||||
import getopt, sys, os, time, socket, threading, SocketServer, LogStream, select
|
||||
import cPickle, stat, tempfile
|
||||
import iscDataRec
|
||||
from com.raytheon.edex.plugin.gfe.isc import IRTManager
|
||||
|
||||
#
|
||||
# Port of msg_send script
|
||||
#
|
||||
# SOFTWARE HISTORY
|
||||
#
|
||||
# Date Ticket# Engineer Description
|
||||
# ------------ ---------- ----------- --------------------------
|
||||
# 07/06/09 1995 bphillip Initial Creation.
|
||||
#
|
||||
#
|
||||
#
|
||||
|
||||
ISC_DATA_REC = "iscDataRec" # Assume it is on the PATH
|
||||
|
||||
class Server(object):
|
||||
|
||||
class Handler(SocketServer.StreamRequestHandler):
|
||||
def handle(self):
|
||||
func = cPickle.load(self.rfile)
|
||||
print "func: ", func
|
||||
if func == 'gettable':
|
||||
with self.server.tlock:
|
||||
msg = cPickle.dumps(self.server.table)
|
||||
self.wfile.write(msg)
|
||||
self.wfile.flush()
|
||||
elif func == 'msg_send':
|
||||
meta = cPickle.load(self.rfile)
|
||||
print "meta: ", meta
|
||||
nfiles = cPickle.load(self.rfile)
|
||||
print "nfiles: ", nfiles
|
||||
fnames = []
|
||||
while nfiles > 0:
|
||||
size = cPickle.load(self.rfile)
|
||||
print "reading: ", size
|
||||
fname = tempfile.mktemp()
|
||||
fnames.append(fname)
|
||||
fpout = open(fname, 'wb')
|
||||
while size > 0:
|
||||
buf = self.rfile.read(min(4096, size))
|
||||
fpout.write(buf)
|
||||
size = size - len(buf)
|
||||
sys.stdout.write('.')
|
||||
print "done size: ", size
|
||||
fpout.close()
|
||||
nfiles = nfiles - 1
|
||||
|
||||
iscDataRec.execIscDataRec(os.path.basename(fname), meta['subject'], fnames)
|
||||
|
||||
fnames.append(fname)
|
||||
|
||||
|
||||
def __init__(self, wanid):
|
||||
self.__shutdown = False
|
||||
self.wanid = wanid
|
||||
self.table = {}
|
||||
self.tlock = threading.Lock()
|
||||
self.tscan = time.time()
|
||||
|
||||
def discover(self):
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||
s.bind(("0.0.0.0", 10000))
|
||||
poll_interval = 1.0
|
||||
while not self.__shutdown:
|
||||
r, w, e = select.select([s], [], [], poll_interval)
|
||||
if r:
|
||||
data, addr = s.recvfrom(1024, socket.MSG_WAITALL)
|
||||
if not data:
|
||||
break
|
||||
data = cPickle.loads(data)
|
||||
if data[0] == "tcpaddr":
|
||||
with self.tlock:
|
||||
self.table[data[1]] = (addr[0], data[2], data[3])
|
||||
now = time.time()
|
||||
if now - self.tscan > 15:
|
||||
dlist = []
|
||||
for k, v in self.table.iteritems():
|
||||
if now - v[2] > 15:
|
||||
dlist.append(k)
|
||||
for k in dlist:
|
||||
del self.table[k]
|
||||
self.tscan = now
|
||||
#print "received packet: ", self.table
|
||||
|
||||
|
||||
def broadcast(self):
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
|
||||
s.bind(("<broadcast>", 10000))
|
||||
while not self.__shutdown:
|
||||
# msg type, wanid, host, port, time of update.
|
||||
msg = cPickle.dumps(("tcpaddr", self.wanid, self.addr[1],
|
||||
time.time()))
|
||||
s.sendto(msg, socket.MSG_WAITALL,
|
||||
("<broadcast>", 10000))
|
||||
time.sleep(5)
|
||||
|
||||
def startThreads(self):
|
||||
LogStream.logEvent("Starting Threads")
|
||||
self.t1 = threading.Thread(target=self.broadcast)
|
||||
self.t1.setDaemon(True)
|
||||
self.t1.start()
|
||||
self.t2 = threading.Thread(target=self.discover)
|
||||
self.t2.setDaemon(True)
|
||||
self.t2.start()
|
||||
|
||||
def run(self):
|
||||
LogStream.logEvent("Running with ShutDown Value:", self.__shutdown)
|
||||
tcps = SocketServer.TCPServer(('', 0), self.Handler)
|
||||
tcps.table = self.table
|
||||
tcps.tlock = self.tlock
|
||||
self.addr = tcps.server_address
|
||||
self.startThreads()
|
||||
|
||||
poll_interval = 2.0
|
||||
|
||||
while not self.__shutdown:
|
||||
r, w, e = select.select([tcps], [], [], poll_interval)
|
||||
if r:
|
||||
tcps.handle_request()
|
||||
|
||||
if IRTManager.getInstance().isRegistered(self.wanid) == False:
|
||||
LogStream.logEvent("Shutting Down GFE Socket Server for site [", self.wanid, "]...")
|
||||
self.__shutdown = True
|
||||
LogStream.logEvent("Stopping Broadcast thread for site [", self.wanid, "]...")
|
||||
self.t1.join()
|
||||
LogStream.logEvent("Stopping Discovery thread for site [", self.wanid, "]...")
|
||||
self.t2.join()
|
||||
LogStream.logEvent("GFE Socket Server for site [", self.wanid, "] shut down")
|
||||
|
||||
def serve(wanid):
|
||||
s = Server(wanid)
|
||||
s.run()
|
||||
|
||||
def gettable():
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||
s.bind(("<broadcast>", 10000))
|
||||
data, addr = s.recvfrom(1024, socket.MSG_WAITALL)
|
||||
if not data:
|
||||
pass # something bad happened.
|
||||
data = cPickle.loads(data)
|
||||
s.close()
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
s.connect((addr[0], data[2]))
|
||||
s.sendall(cPickle.dumps("gettable"), socket.MSG_WAITALL)
|
||||
data = s.recv(1024, socket.MSG_WAITALL)
|
||||
data = cPickle.loads(data)
|
||||
return data
|
||||
|
||||
def msg_send(addrs, files, meta):
|
||||
|
||||
table = gettable()
|
||||
|
||||
for addr in addrs:
|
||||
if table.has_key(addr):
|
||||
host, port, time = table[addr]
|
||||
print "send to: ", host, port
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
s.connect((host, port))
|
||||
s.sendall(cPickle.dumps("msg_send"), socket.MSG_WAITALL)
|
||||
s.sendall(cPickle.dumps(meta), socket.MSG_WAITALL)
|
||||
s.sendall(cPickle.dumps(len(files)), socket.MSG_WAITALL)
|
||||
fp = s.makefile('rw')
|
||||
for f in files:
|
||||
size = os.stat(f)[stat.ST_SIZE]
|
||||
print "sending: ", f, size, "(bytes)"
|
||||
s.sendall(cPickle.dumps(size), socket.MSG_WAITALL)
|
||||
fpin = open(f, 'rb')
|
||||
buf = fpin.read(4096)
|
||||
while buf != "":
|
||||
fp.write(buf)
|
||||
buf = fpin.read(4096)
|
||||
fpin.close()
|
||||
fp.flush()
|
||||
else:
|
||||
print "No table entry for", addr,"in table"
|
||||
print table
|
||||
|
||||
# typical args /awips/ops/bin/msg_send -s %SUBJECT -a %ADDRESSES -i %WMOID -c 11 -p 0 -e %ATTACHMENTS
|
||||
def msg_send_main(args):
|
||||
optlist, args = getopt.getopt(args, 'a:e:s:i:c:p:')
|
||||
addrs = []
|
||||
files = []
|
||||
meta = {}
|
||||
for opt in optlist:
|
||||
k, v = opt
|
||||
if k == '-a':
|
||||
addrs = v.split(',')
|
||||
elif k == '-e':
|
||||
files = v.split(',')
|
||||
elif k == '-s':
|
||||
meta['subject'] = v
|
||||
elif k == '-i':
|
||||
meta['wmoid'] = v
|
||||
msg_send(addrs, files, meta)
|
||||
|
||||
|
||||
def usage(status=0):
|
||||
print """Usage:
|
||||
mmhs --help (This message)
|
||||
|
||||
mmhs --server=WANID --iscdr=/path/to/iscDataRec
|
||||
(Start server mode where WANID is awips wan id)
|
||||
|
||||
msg_send [args] (run in msg_send mode [args are just like msg_send])
|
||||
"""
|
||||
sys.exit(status)
|
||||
|
||||
def main():
|
||||
global ISC_DATA_REC
|
||||
|
||||
mode = os.path.basename(sys.argv[0])
|
||||
|
||||
if mode == 'msg_send':
|
||||
msg_send_main(sys.argv[1:])
|
||||
sys.exit(0)
|
||||
|
||||
# server mode
|
||||
try:
|
||||
optlist, args = getopt.getopt(sys.argv[1:], '',
|
||||
['server=', 'iscdr='])
|
||||
|
||||
except (getopt.GetoptError, getopt.error):
|
||||
usage(1)
|
||||
|
||||
mhid = ""
|
||||
msg_args = []
|
||||
|
||||
for opt in optlist:
|
||||
k, v = opt
|
||||
if k == '--server':
|
||||
mhid = v
|
||||
elif k == '--iscdr':
|
||||
ISC_DATA_REC = v
|
||||
elif k == '--help':
|
||||
usage()
|
||||
else:
|
||||
usage(1)
|
||||
|
||||
serve(mhid)
|
||||
|
||||
#if __name__ == "__main__":
|
||||
# main()
|
|
@ -107,6 +107,7 @@ import com.raytheon.uf.edex.database.query.DatabaseQuery;
|
|||
* Feb 05, 2015 4099 randerso Fixed latest ETN query for year-end
|
||||
* Feb 23, 2015 4127 dgilling Use cluster locking to only allow 1 active
|
||||
* table write at a time.
|
||||
* Mar 04, 2015 4129 randerso Pass active table change logger to ingestAt and/or MergeVTEC
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -648,6 +649,7 @@ public class ActiveTable {
|
|||
args.put("newRecords", newRecords);
|
||||
args.put("drt", timeOffset);
|
||||
args.put("makeBackups", makeBackup);
|
||||
args.put("atChangeLog", changeLog);
|
||||
if (runIngestAT) {
|
||||
args.put("xmlIncoming", xmlSource);
|
||||
}
|
||||
|
|
|
@ -35,8 +35,10 @@
|
|||
# 01/24/14 #2504 randerso change to use iscUtil.getLogger for consistency
|
||||
# 03/25/14 #2884 randerso Added xxxid to VTECChange
|
||||
# 05/15/14 #3157 dgilling Support multiple TPC and SPC sites.
|
||||
# 03/04/2015 #4129 randerso Log the active table changes at info level
|
||||
# in the active table change log
|
||||
#
|
||||
|
||||
##
|
||||
|
||||
import copy
|
||||
import cPickle
|
||||
|
@ -64,7 +66,7 @@ from com.raytheon.uf.common.activetable import VTECPartners as JavaVTECPartners
|
|||
class MergeVTEC(VTECTableUtil.VTECTableUtil):
|
||||
|
||||
def __init__(self, activeTable, activeTableMode, newRecords, offsetSecs=0.0,
|
||||
makeBackups=True, logger=None):
|
||||
makeBackups=True, logger=None, atChangeLog=None):
|
||||
# activeTable - current activeTable records
|
||||
# activeTableMode - which table is being modified--OPERATIONAL or PRACTICE
|
||||
# newRecords - records to merge in to activeTable
|
||||
|
@ -125,7 +127,7 @@ class MergeVTEC(VTECTableUtil.VTECTableUtil):
|
|||
self._log.info("Other Table squeezed size: %d", len(otherTable))
|
||||
|
||||
#merge the tables
|
||||
updatedTable, toDelete, changes = self._mergeTable(activeTable, otherTable)
|
||||
updatedTable, toDelete, changes = self._mergeTable(activeTable, otherTable, atChangeLog)
|
||||
self._log.info("Updated Active Table size: %d", len(updatedTable))
|
||||
updatedTable, tossRecordsMerged = vts.squeeze(updatedTable)
|
||||
self._log.info("Updated Active Table squeeze size: %d",
|
||||
|
@ -161,7 +163,7 @@ class MergeVTEC(VTECTableUtil.VTECTableUtil):
|
|||
|
||||
# merges the active and other table together and returns the merged
|
||||
# table along with the list of changes that occurred.
|
||||
def _mergeTable(self, activeTable, otherTable):
|
||||
def _mergeTable(self, activeTable, otherTable, atChangeLog):
|
||||
changes = []
|
||||
purges = []
|
||||
compare = ['id', 'phen', 'sig', 'officeid', 'etn', 'pil']
|
||||
|
@ -342,30 +344,31 @@ class MergeVTEC(VTECTableUtil.VTECTableUtil):
|
|||
changes.append(chgRec)
|
||||
|
||||
# log the changes
|
||||
if len(missingEntriesAct):
|
||||
self._log.debug("Active Missing entries added: %s",
|
||||
self.printActiveTable(missingEntriesAct, 1))
|
||||
if len(newReplaceEntriesAct):
|
||||
self._log.debug("Active Replacement entries (new): %s",
|
||||
self.printActiveTable(newReplaceEntriesAct, 1))
|
||||
if len(oldReplaceEntriesAct):
|
||||
self._log.debug("Active Entries Replaced (old): %s",
|
||||
self.printActiveTable(oldReplaceEntriesAct, 1))
|
||||
if len(missingEntriesPast):
|
||||
self._log.debug("Past Missing entries added %s",
|
||||
self.printActiveTable(missingEntriesPast, 1))
|
||||
if len(newReplaceEntriesPast):
|
||||
self._log.debug("Past Replacement entries (new): %s",
|
||||
self.printActiveTable(newReplaceEntriesPast, 1))
|
||||
if len(oldReplaceEntriesPast):
|
||||
self._log.debug("Past Entries Replaced (old): %s",
|
||||
self.printActiveTable(oldReplaceEntriesPast, 1))
|
||||
if len(ignoredNewReplaceAct):
|
||||
self._log.debug("Ignored Different Year Issuance (new): %s",
|
||||
self.printActiveTable(ignoredNewReplaceAct, 1))
|
||||
self._log.debug("Ignored Different Year Issuance (old): %s",
|
||||
self.printActiveTable(ignoredOldReplaceAct, 1))
|
||||
self._log.debug("Table Changes: %s", changes)
|
||||
if atChangeLog is not None:
|
||||
if len(missingEntriesAct):
|
||||
atChangeLog.info("Active Missing entries added: " +
|
||||
self.printActiveTable(missingEntriesAct, 1))
|
||||
if len(newReplaceEntriesAct):
|
||||
atChangeLog.info("Active Replacement entries (new): " +
|
||||
self.printActiveTable(newReplaceEntriesAct, 1))
|
||||
if len(oldReplaceEntriesAct):
|
||||
atChangeLog.info("Active Entries Replaced (old): " +
|
||||
self.printActiveTable(oldReplaceEntriesAct, 1))
|
||||
if len(missingEntriesPast):
|
||||
atChangeLog.info("Past Missing entries added " +
|
||||
self.printActiveTable(missingEntriesPast, 1))
|
||||
if len(newReplaceEntriesPast):
|
||||
atChangeLog.info("Past Replacement entries (new): " +
|
||||
self.printActiveTable(newReplaceEntriesPast, 1))
|
||||
if len(oldReplaceEntriesPast):
|
||||
atChangeLog.info("Past Entries Replaced (old): " +
|
||||
self.printActiveTable(oldReplaceEntriesPast, 1))
|
||||
if len(ignoredNewReplaceAct):
|
||||
atChangeLog.info("Ignored Different Year Issuance (new): " +
|
||||
self.printActiveTable(ignoredNewReplaceAct, 1))
|
||||
atChangeLog.info("Ignored Different Year Issuance (old): " +
|
||||
self.printActiveTable(ignoredOldReplaceAct, 1))
|
||||
atChangeLog.info("Table Changes: " + str(changes))
|
||||
|
||||
purges.extend(oldReplaceEntriesAct)
|
||||
purges.extend(oldReplaceEntriesPast)
|
||||
|
@ -411,7 +414,7 @@ class MergeVTEC(VTECTableUtil.VTECTableUtil):
|
|||
return iscUtil.getLogger("MergeVTEC", logLevel=logging.INFO)
|
||||
|
||||
def merge(activeTable, activeTableMode, newRecords, drt=0.0, makeBackups=True,
|
||||
logger=None):
|
||||
logger=None, atChangeLog=None):
|
||||
pyActive = []
|
||||
for i in range(activeTable.size()):
|
||||
pyActive.append(ActiveTableRecord.ActiveTableRecord(activeTable.get(i)))
|
||||
|
@ -420,7 +423,7 @@ def merge(activeTable, activeTableMode, newRecords, drt=0.0, makeBackups=True,
|
|||
for i in range(newRecords.size()):
|
||||
pyNew.append(ActiveTableRecord.ActiveTableRecord(newRecords.get(i)))
|
||||
|
||||
decoder = MergeVTEC(pyActive, activeTableMode, pyNew, drt, makeBackups, logger)
|
||||
decoder = MergeVTEC(pyActive, activeTableMode, pyNew, drt, makeBackups, logger, atChangeLog)
|
||||
mergeResults = decoder.getMergeResults()
|
||||
decoder = None
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
# Date Ticket# Engineer Description
|
||||
# ------------ ---------- ----------- --------------------------
|
||||
# 12/12/14 4953 randerso Initial Creation.
|
||||
# 03/10/2015 #4129 randerso Fixed error when no TCV files were found
|
||||
#
|
||||
##
|
||||
import glob, os, subprocess, time
|
||||
|
@ -69,11 +70,20 @@ def packageTCVFiles(siteList, fileName, logger):
|
|||
for siteID in siteList:
|
||||
tcvDir = os.path.join(siteID, "gfe", "tcvAdvisories")
|
||||
|
||||
found = False
|
||||
for fileType in ["*.json", "*.allCAN"]:
|
||||
path = os.path.join(tcvDir, fileType)
|
||||
if len(glob.glob(os.path.join(siteDir, path))) > 0:
|
||||
cmd += " " + path
|
||||
|
||||
logger.debug("cmd: '" + cmd + "'")
|
||||
subprocess.check_call([cmd], shell=True)
|
||||
|
||||
found = True
|
||||
|
||||
if found:
|
||||
logger.info("cmd: '" + cmd + "'")
|
||||
try:
|
||||
subprocess.check_call([cmd], shell=True)
|
||||
except subprocess.CalledProcessError as e:
|
||||
logger.error("cmd returned error code: ", e.returncode, e.output)
|
||||
except:
|
||||
loggger.exception("cmd threw exception")
|
||||
|
||||
return found
|
|
@ -28,7 +28,9 @@
|
|||
# ------------ ---------- ----------- --------------------------
|
||||
# 02/13/13 1447 dgilling Initial Creation.
|
||||
# 01/24/14 2504 randerso change to use iscUtil.getLogger for consistency
|
||||
# 03/04/2015 4129 randerso Pass active table change logger through to MergeVtec.merge
|
||||
#
|
||||
##
|
||||
|
||||
|
||||
import os
|
||||
|
@ -48,7 +50,7 @@ def init_logging():
|
|||
logger = iscUtil.getLogger("ingestAT", logLevel=logging.INFO)
|
||||
|
||||
|
||||
def execute_ingest_at(incomingRecords, activeTable, atName, ztime, makeBackups, xmlIncoming):
|
||||
def execute_ingest_at(incomingRecords, activeTable, atName, ztime, makeBackups, xmlIncoming, atChangeLog):
|
||||
# log the source of this data
|
||||
if xmlIncoming is not None:
|
||||
irt = IrtAccess.IrtAccess("")
|
||||
|
@ -63,20 +65,20 @@ def execute_ingest_at(incomingRecords, activeTable, atName, ztime, makeBackups,
|
|||
results = None
|
||||
try:
|
||||
results = MergeVTEC.merge(activeTable, atName, incomingRecords, ztime, makeBackups,
|
||||
logger)
|
||||
logger, atChangeLog)
|
||||
except:
|
||||
logger.exception("MergeVTEC fail:")
|
||||
return results
|
||||
|
||||
def runFromJava(activeTable, activeTableMode, newRecords, drt, makeBackups,
|
||||
xmlIncoming):
|
||||
xmlIncoming, atChangeLog=None):
|
||||
init_logging()
|
||||
|
||||
logger.info('************* ingestAT ************************')
|
||||
startT = time.time()
|
||||
|
||||
results = execute_ingest_at(newRecords, activeTable, activeTableMode, drt,
|
||||
makeBackups, xmlIncoming)
|
||||
makeBackups, xmlIncoming, atChangeLog=atChangeLog)
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# Finish
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
# 02/06/13 1447 dgilling Initial Creation.
|
||||
# 01/24/14 2504 randerso change to use iscUtil.getLogger for consistency
|
||||
# 05/15/14 #3157 dgilling Support multiple TPC and SPC sites.
|
||||
# 03/10/2015 #4129 randerso Refactored server selection code into a reusable method
|
||||
#
|
||||
#
|
||||
|
||||
|
@ -37,7 +38,7 @@ import os
|
|||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
import xml.etree.ElementTree as ET
|
||||
from xml.etree import ElementTree
|
||||
|
||||
import IrtAccess
|
||||
import siteConfig
|
||||
|
@ -115,125 +116,23 @@ def execute_request_at(serverHost, serverPort, serverProtocol, mhsid, siteID, an
|
|||
buf = cPickle.dumps(data)
|
||||
fp.write(buf)
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# Assemble XML source/destination document
|
||||
#--------------------------------------------------------------------
|
||||
msgSendDest = [] #list of mhs sites to send request
|
||||
sourceServer = {'mhsid' : mhsid,
|
||||
'host' : serverHost,
|
||||
'port' : serverPort,
|
||||
'protocol': serverProtocol,
|
||||
'site' : siteID}
|
||||
|
||||
irt = IrtAccess.IrtAccess(ancf, bncf)
|
||||
iscE = ET.Element('isc')
|
||||
# this is the requestor of the data
|
||||
sourceServer = {'mhsid': mhsid, 'host': serverHost, 'port': serverPort,
|
||||
'protocol': serverProtocol, 'site': siteID}
|
||||
irt.addSourceXML(iscE, sourceServer)
|
||||
logger.info("Requesting Server: " + irt.printServerInfo(sourceServer))
|
||||
|
||||
# who is running the domains requested?
|
||||
sites = VTECPartners.VTEC_TABLE_REQUEST_SITES
|
||||
if not sites:
|
||||
logger.error('No sites defined for VTEC_TABLE_REQUEST_SITES')
|
||||
sys.exit(1)
|
||||
|
||||
status, xml = irt.getServers(sites)
|
||||
if not status:
|
||||
logger.error('Failure to getServers from IRT')
|
||||
sys.exit(1)
|
||||
|
||||
# decode the XML
|
||||
try:
|
||||
serverTree = ET.ElementTree(ET.XML(xml))
|
||||
serversE = serverTree.getroot()
|
||||
except:
|
||||
logger.exception("Malformed XML on getServers()")
|
||||
sys.exit(1)
|
||||
|
||||
if serversE.tag != "servers":
|
||||
logger.error("Servers packet missing from web server")
|
||||
sys.exit(1)
|
||||
|
||||
# process each requested domain returned to us
|
||||
chosenServers = []
|
||||
matchingServers = []
|
||||
for domainE in serversE:
|
||||
if domainE.tag != "domain":
|
||||
continue
|
||||
servers = [] #list of servers for this domain
|
||||
|
||||
# decode each server in the domain
|
||||
for addressE in domainE.getchildren():
|
||||
info = irt.decodeXMLAddress(addressE)
|
||||
if info is None:
|
||||
continue #not address tag
|
||||
servers.append(info)
|
||||
matchingServers.append(info)
|
||||
|
||||
# server search list in priority. The px3 entries are used for
|
||||
# dual domain for AFC.
|
||||
hp = [('dx4','98000000'),('px3', '98000000'), ('dx4','98000001'),
|
||||
('px3', '98000001')]
|
||||
|
||||
# choose one server from this domain, find first dx4, 98000000
|
||||
# try to use one with the same mhsidDest as the site, which
|
||||
# would be the primary operational GFE. Note that the px3 entries
|
||||
# are for AFC.
|
||||
found = False
|
||||
for matchServer, matchPort in hp:
|
||||
for server in servers:
|
||||
if server['host'][0:3] == matchServer and \
|
||||
server['port'] == matchPort and server['mhsid'] == siteID:
|
||||
chosenServers.append(server)
|
||||
if server['mhsid'] not in msgSendDest:
|
||||
msgSendDest.append(server['mhsid'])
|
||||
found = True
|
||||
break
|
||||
|
||||
# find first dx4, 98000000, but perhaps a different mhsid
|
||||
# this is probably not the primary operational GFE
|
||||
if not found:
|
||||
for matchServer, matchPort in hp:
|
||||
for server in servers:
|
||||
if server['host'][0:3] == matchServer and \
|
||||
server['port'] == matchPort:
|
||||
chosenServers.append(server)
|
||||
if server['mhsid'] not in msgSendDest:
|
||||
msgSendDest.append(server['mhsid'])
|
||||
found = True
|
||||
break
|
||||
|
||||
# if didn't find standard one, then take the first one, but don't
|
||||
# take ourselves unless we are the only one.
|
||||
if not found and servers:
|
||||
for server in servers:
|
||||
if server['mhsid'] != mhsid and server['host'] != serverHost \
|
||||
and server['port'] != serverPort and \
|
||||
server['mhsid'] != siteID:
|
||||
chosenServers.append(server)
|
||||
if server['mhsid'] not in msgSendDest:
|
||||
msgSendDest.append(server['mhsid'])
|
||||
found = True
|
||||
if not found:
|
||||
chosenServers.append(servers[0])
|
||||
if servers[0]['mhsid'] not in msgSendDest:
|
||||
msgSendDest.append(servers[0]['mhsid'])
|
||||
|
||||
# Display the set of matching servers
|
||||
s = "Matching Servers:"
|
||||
for x in matchingServers:
|
||||
s += "\n" + irt.printServerInfo(x)
|
||||
logger.info(s)
|
||||
|
||||
# Display the chosen set of servers
|
||||
s = "Chosen Servers:"
|
||||
for x in chosenServers:
|
||||
s += "\n" + irt.printServerInfo(x)
|
||||
logger.info(s)
|
||||
|
||||
irt.addDestinationXML(iscE, chosenServers)
|
||||
destSites = VTECPartners.VTEC_TABLE_REQUEST_SITES
|
||||
if not destSites:
|
||||
raise Exception('No destSites defined for VTEC_TABLE_REQUEST_SITES')
|
||||
|
||||
irt = IrtAccess.IrtAccess(ancf, bncf, logger=logger)
|
||||
msgSendDest, xml = irt.createDestinationXML(destSites, sourceServer)
|
||||
|
||||
# create the XML file
|
||||
with tempfile.NamedTemporaryFile(suffix='.xml', dir=tempdir, delete=False) as fd:
|
||||
fnameXML = fd.name
|
||||
fd.write(ET.tostring(iscE))
|
||||
fd.write(ElementTree.tostring(xml))
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# Now send the message
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
# Date Ticket# Engineer Description
|
||||
# ------------ ---------- ----------- --------------------------
|
||||
# 12/05/14 4953 randerso Initial Creation.
|
||||
# 03/10/2015 #4129 randerso Refactored server selection code into a reusable method
|
||||
#
|
||||
##
|
||||
import os, errno, tempfile
|
||||
|
@ -43,134 +44,7 @@ def init_logging():
|
|||
import iscUtil
|
||||
import logging
|
||||
global logger
|
||||
logger = iscUtil.getLogger("requestTCV", logLevel=logging.DEBUG)
|
||||
|
||||
def createDestinationXML(siteID, host, port, protocol, mhsid, ancf, bncf, logger):
|
||||
#--------------------------------------------------------------------
|
||||
# Assemble XML source/destination document
|
||||
#--------------------------------------------------------------------
|
||||
msgSendDest = [] #list of mhs sites to send request
|
||||
|
||||
irt = IrtAccess.IrtAccess(ancf, bncf)
|
||||
iscE = ElementTree.Element('isc')
|
||||
# this is the requestor of the data
|
||||
sourceServer = {'mhsid' : mhsid,
|
||||
'host' : host,
|
||||
'port' : port,
|
||||
'protocol': protocol,
|
||||
'site' : siteID}
|
||||
irt.addSourceXML(iscE, sourceServer)
|
||||
logger.info("Requesting Server: " + irt.printServerInfo(sourceServer))
|
||||
|
||||
# who is running the domains requested?
|
||||
sites = VTECPartners.VTEC_TABLE_REQUEST_SITES
|
||||
if not sites:
|
||||
logger.error('No sites defined for VTEC_TABLE_REQUEST_SITES')
|
||||
sys.exit(1)
|
||||
|
||||
status, xml = irt.getServers(sites)
|
||||
if not status:
|
||||
logger.error('Failure to getServers from IRT')
|
||||
sys.exit(1)
|
||||
|
||||
# decode the XML
|
||||
try:
|
||||
serverTree = ElementTree.ElementTree(ElementTree.XML(xml))
|
||||
serversE = serverTree.getroot()
|
||||
except:
|
||||
logger.exception("Malformed XML on getServers()")
|
||||
sys.exit(1)
|
||||
|
||||
if serversE.tag != "servers":
|
||||
logger.error("Servers packet missing from web server")
|
||||
sys.exit(1)
|
||||
|
||||
# process each requested domain returned to us
|
||||
chosenServers = []
|
||||
matchingServers = []
|
||||
for domainE in serversE:
|
||||
if domainE.tag != "domain":
|
||||
continue
|
||||
servers = [] #list of servers for this domain
|
||||
|
||||
# decode each server in the domain
|
||||
for addressE in domainE.getchildren():
|
||||
info = irt.decodeXMLAddress(addressE)
|
||||
if info is None:
|
||||
continue #not address tag
|
||||
|
||||
# remove unneeded keys
|
||||
for key in ['parms', 'area', 'domain']:
|
||||
if info.has_key(key):
|
||||
del info[key]
|
||||
|
||||
servers.append(info)
|
||||
matchingServers.append(info)
|
||||
|
||||
# server search list in priority. The px3 entries are used for
|
||||
# dual domain for AFC.
|
||||
hp = [('dx4','98000000'),('px3', '98000000'), ('dx4','98000001'),
|
||||
('px3', '98000001')]
|
||||
|
||||
# choose one server from this domain, find first dx4, 98000000
|
||||
# try to use one with the same mhsidDest as the site, which
|
||||
# would be the primary operational GFE. Note that the px3 entries
|
||||
# are for AFC.
|
||||
found = False
|
||||
for matchServer, matchPort in hp:
|
||||
for server in servers:
|
||||
if server['host'][0:3] == matchServer and \
|
||||
server['port'] == matchPort and server['mhsid'] == siteID:
|
||||
chosenServers.append(server)
|
||||
if server['mhsid'] not in msgSendDest:
|
||||
msgSendDest.append(server['mhsid'])
|
||||
found = True
|
||||
break
|
||||
|
||||
# find first dx4, 98000000, but perhaps a different mhsid
|
||||
# this is probably not the primary operational GFE
|
||||
if not found:
|
||||
for matchServer, matchPort in hp:
|
||||
for server in servers:
|
||||
if server['host'][0:3] == matchServer and \
|
||||
server['port'] == matchPort:
|
||||
chosenServers.append(server)
|
||||
if server['mhsid'] not in msgSendDest:
|
||||
msgSendDest.append(server['mhsid'])
|
||||
found = True
|
||||
break
|
||||
|
||||
# if didn't find standard one, then take the first one, but don't
|
||||
# take ourselves unless we are the only one.
|
||||
if not found and servers:
|
||||
for server in servers:
|
||||
if server['mhsid'] != mhsid and server['host'] != host \
|
||||
and server['port'] != port and \
|
||||
server['mhsid'] != siteID:
|
||||
chosenServers.append(server)
|
||||
if server['mhsid'] not in msgSendDest:
|
||||
msgSendDest.append(server['mhsid'])
|
||||
found = True
|
||||
if not found:
|
||||
chosenServers.append(server)
|
||||
if servers[0]['mhsid'] not in msgSendDest:
|
||||
msgSendDest.append(servers[0]['mhsid'])
|
||||
|
||||
# Display the set of matching servers
|
||||
s = "Matching Servers:"
|
||||
for x in matchingServers:
|
||||
s += "\n" + irt.printServerInfo(x)
|
||||
logger.info(s)
|
||||
|
||||
# Display the chosen set of servers
|
||||
s = "Chosen Servers:"
|
||||
for x in chosenServers:
|
||||
s += "\n" + irt.printServerInfo(x)
|
||||
logger.info(s)
|
||||
|
||||
irt.addDestinationXML(iscE, chosenServers)
|
||||
|
||||
return msgSendDest, iscE
|
||||
logger = iscUtil.getLogger("requestTCV", logLevel=logging.INFO)
|
||||
|
||||
def runFromJava(siteID, config):
|
||||
import siteConfig
|
||||
|
@ -191,8 +65,19 @@ def runFromJava(siteID, config):
|
|||
if e.errno != errno.EEXIST:
|
||||
logger.warn("%s: '%s'" % (e.strerror,e.filename))
|
||||
|
||||
sourceServer = {'mhsid' : mhsid,
|
||||
'host' : host,
|
||||
'port' : port,
|
||||
'protocol': protocol,
|
||||
'site' : siteID}
|
||||
try:
|
||||
msgSendDest, xml = createDestinationXML(siteID, host, port, protocol, mhsid, ancf, bncf, logger)
|
||||
destSites = VTECPartners.VTEC_TABLE_REQUEST_SITES
|
||||
if not destSites:
|
||||
raise Exception('No destSites defined for VTEC_TABLE_REQUEST_SITES')
|
||||
|
||||
irt = IrtAccess.IrtAccess(ancf, bncf, logger=logger)
|
||||
msgSendDest, xml = irt.createDestinationXML(destSites, sourceServer)
|
||||
|
||||
# create the XML file
|
||||
with tempfile.NamedTemporaryFile(suffix='.xml', dir=tempdir, delete=False) as fd:
|
||||
fnameXML = fd.name
|
||||
|
@ -204,7 +89,6 @@ def runFromJava(siteID, config):
|
|||
|
||||
if len(msgSendDest) > 0:
|
||||
# Now send the message
|
||||
irt = IrtAccess.IrtAccess(ancf, bncf)
|
||||
irt.transmitFiles("GET_TCV_FILES", msgSendDest, mhsid, [fnameXML], xmtScript)
|
||||
except:
|
||||
logger.exception('Error requesting TCV files for site: ' + siteID)
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
# 02/08/13 1447 dgilling Initial Creation.
|
||||
# 01/24/14 2504 randerso change to use iscUtil.getLogger for consistency
|
||||
# 05/15/14 #3157 dgilling Support multiple TPC and SPC sites.
|
||||
# 03/10/2015 #4129 randerso Removed sys.exit() call
|
||||
#
|
||||
#
|
||||
|
||||
|
@ -36,11 +37,10 @@
|
|||
import cPickle
|
||||
import gzip
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
import tempfile
|
||||
import stat
|
||||
import xml.etree.ElementTree as ET
|
||||
from xml.etree import ElementTree
|
||||
|
||||
import IrtAccess
|
||||
import JUtil
|
||||
|
@ -170,7 +170,7 @@ def execute_send_at(myServerHost, myServerPort, myServerProtocol,
|
|||
#--------------------------------------------------------------------
|
||||
# Create the destination XML file
|
||||
#--------------------------------------------------------------------
|
||||
iscOut = ET.Element('isc')
|
||||
iscOut = ElementTree.Element('isc')
|
||||
irt.addSourceXML(iscOut, myServer)
|
||||
|
||||
destServers = []
|
||||
|
@ -179,7 +179,7 @@ def execute_send_at(myServerHost, myServerPort, myServerProtocol,
|
|||
with open(xmlIncoming,'rb') as fd:
|
||||
xml = fd.read()
|
||||
os.remove(xmlIncoming)
|
||||
reqTree = ET.ElementTree(ET.XML(xml))
|
||||
reqTree = ElementTree.ElementTree(ElementTree.XML(xml))
|
||||
sourceE = reqTree.find('source')
|
||||
for addressE in sourceE.getchildren():
|
||||
destServer = irt.decodeXMLAddress(addressE)
|
||||
|
@ -214,7 +214,7 @@ def execute_send_at(myServerHost, myServerPort, myServerProtocol,
|
|||
tempdir = os.path.join(siteConfig.GFESUITE_HOME, "products", "ATBL")
|
||||
with tempfile.NamedTemporaryFile(suffix='.xml', dir=tempdir, delete=False) as fd:
|
||||
fnameXML = fd.name
|
||||
fd.write(ET.tostring(iscOut))
|
||||
fd.write(ElementTree.tostring(iscOut))
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# Send it
|
||||
|
@ -285,7 +285,7 @@ def runFromJava(myServerHost, myServerPort, myServerProtocol, myServerMHSID,
|
|||
xmtScript)
|
||||
except:
|
||||
logger.exception('Error in sendAT:')
|
||||
sys.exit(1)
|
||||
raise
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# Finish
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
# Date Ticket# Engineer Description
|
||||
# ------------ ---------- ----------- --------------------------
|
||||
# 12/05/14 4953 randerso Initial Creation.
|
||||
# 03/10/2015 #4129 randerso Refactored server selection code into a reusable method
|
||||
#
|
||||
##
|
||||
import os, errno, tempfile
|
||||
|
@ -44,136 +45,9 @@ def init_logging():
|
|||
import iscUtil
|
||||
import logging
|
||||
global logger
|
||||
logger = iscUtil.getLogger("sendTCV", logLevel=logging.DEBUG)
|
||||
logger = iscUtil.getLogger("sendTCV", logLevel=logging.INFO)
|
||||
|
||||
|
||||
def createDestinationXML(siteID, host, port, protocol, mhsid, ancf, bncf, logger):
|
||||
#--------------------------------------------------------------------
|
||||
# Assemble XML source/destination document
|
||||
#--------------------------------------------------------------------
|
||||
msgSendDest = [] #list of mhs sites to send request
|
||||
|
||||
irt = IrtAccess.IrtAccess(ancf, bncf)
|
||||
iscE = ElementTree.Element('isc')
|
||||
# this is the requestor of the data
|
||||
sourceServer = {'mhsid' : mhsid,
|
||||
'host' : host,
|
||||
'port' : port,
|
||||
'protocol': protocol,
|
||||
'site' : siteID}
|
||||
irt.addSourceXML(iscE, sourceServer)
|
||||
logger.info("Requesting Server: " + irt.printServerInfo(sourceServer))
|
||||
|
||||
# who is running the domains requested?
|
||||
sites = VTECPartners.VTEC_TABLE_REQUEST_SITES
|
||||
if not sites:
|
||||
logger.error('No sites defined for VTEC_TABLE_REQUEST_SITES')
|
||||
sys.exit(1)
|
||||
|
||||
status, xml = irt.getServers(sites)
|
||||
if not status:
|
||||
logger.error('Failure to getServers from IRT')
|
||||
sys.exit(1)
|
||||
|
||||
# decode the XML
|
||||
try:
|
||||
serverTree = ElementTree.ElementTree(ElementTree.XML(xml))
|
||||
serversE = serverTree.getroot()
|
||||
except:
|
||||
logger.exception("Malformed XML on getServers()")
|
||||
sys.exit(1)
|
||||
|
||||
if serversE.tag != "servers":
|
||||
logger.error("Servers packet missing from web server")
|
||||
sys.exit(1)
|
||||
|
||||
# process each requested domain returned to us
|
||||
chosenServers = []
|
||||
matchingServers = []
|
||||
for domainE in serversE:
|
||||
if domainE.tag != "domain":
|
||||
continue
|
||||
servers = [] #list of servers for this domain
|
||||
|
||||
# decode each server in the domain
|
||||
for addressE in domainE.getchildren():
|
||||
info = irt.decodeXMLAddress(addressE)
|
||||
if info is None:
|
||||
continue #not address tag
|
||||
|
||||
# remove unneeded keys
|
||||
for key in ['parms', 'area', 'domain']:
|
||||
if info.has_key(key):
|
||||
del info[key]
|
||||
|
||||
servers.append(info)
|
||||
matchingServers.append(info)
|
||||
|
||||
# server search list in priority. The px3 entries are used for
|
||||
# dual domain for AFC.
|
||||
hp = [('dx4','98000000'),('px3', '98000000'), ('dx4','98000001'),
|
||||
('px3', '98000001')]
|
||||
|
||||
# choose one server from this domain, find first dx4, 98000000
|
||||
# try to use one with the same mhsidDest as the site, which
|
||||
# would be the primary operational GFE. Note that the px3 entries
|
||||
# are for AFC.
|
||||
found = False
|
||||
for matchServer, matchPort in hp:
|
||||
for server in servers:
|
||||
if server['host'][0:3] == matchServer and \
|
||||
server['port'] == matchPort and server['mhsid'] == siteID:
|
||||
if server['mhsid'] not in msgSendDest:
|
||||
chosenServers.append(server)
|
||||
msgSendDest.append(server['mhsid'])
|
||||
found = True
|
||||
break
|
||||
|
||||
# find first dx4, 98000000, but perhaps a different mhsid
|
||||
# this is probably not the primary operational GFE
|
||||
if not found:
|
||||
for matchServer, matchPort in hp:
|
||||
for server in servers:
|
||||
if server['host'][0:3] == matchServer and \
|
||||
server['port'] == matchPort:
|
||||
if server['mhsid'] not in msgSendDest:
|
||||
chosenServers.append(server)
|
||||
msgSendDest.append(server['mhsid'])
|
||||
found = True
|
||||
break
|
||||
|
||||
# if didn't find standard one, then take the first one, but don't
|
||||
# take ourselves unless we are the only one.
|
||||
if not found and servers:
|
||||
for server in servers:
|
||||
if server['mhsid'] != mhsid and server['host'] != host \
|
||||
and server['port'] != port and \
|
||||
server['mhsid'] != siteID:
|
||||
if server['mhsid'] not in msgSendDest:
|
||||
chosenServers.append(server)
|
||||
msgSendDest.append(server['mhsid'])
|
||||
found = True
|
||||
if not found:
|
||||
if servers[0]['mhsid'] not in msgSendDest:
|
||||
chosenServers.append(servers[0])
|
||||
msgSendDest.append(servers[0]['mhsid'])
|
||||
|
||||
# Display the set of matching servers
|
||||
s = "Matching Servers:"
|
||||
for x in matchingServers:
|
||||
s += "\n" + irt.printServerInfo(x)
|
||||
logger.info(s)
|
||||
|
||||
# Display the chosen set of servers
|
||||
s = "Chosen Servers:"
|
||||
for x in chosenServers:
|
||||
s += "\n" + irt.printServerInfo(x)
|
||||
logger.info(s)
|
||||
|
||||
irt.addDestinationXML(iscE, chosenServers)
|
||||
|
||||
return msgSendDest, iscE
|
||||
|
||||
def runFromJava(siteID, config):
|
||||
import siteConfig
|
||||
host = str(config.getServerHost())
|
||||
|
@ -201,25 +75,37 @@ def runFromJava(siteID, config):
|
|||
with tempfile.NamedTemporaryFile(suffix='.sendtcv', dir=tcvProductsDir, delete=False) as fp:
|
||||
fname = fp.name
|
||||
|
||||
try:
|
||||
TCVUtil.packageTCVFiles([siteID], fname, logger)
|
||||
sourceServer = {'mhsid' : mhsid,
|
||||
'host' : host,
|
||||
'port' : port,
|
||||
'protocol': protocol,
|
||||
'site' : siteID}
|
||||
|
||||
msgSendDest, xml = createDestinationXML(siteID, host, port, protocol, mhsid, ancf, bncf, logger)
|
||||
|
||||
# create the XML file
|
||||
with tempfile.NamedTemporaryFile(suffix='.xml', dir=tcvProductsDir, delete=False) as fd:
|
||||
fnameXML = fd.name
|
||||
fd.write(ElementTree.tostring(xml))
|
||||
|
||||
# don't send to ourselves
|
||||
if mhsid in msgSendDest:
|
||||
msgSendDest.remove(mhsid)
|
||||
try:
|
||||
if TCVUtil.packageTCVFiles([siteID], fname, logger):
|
||||
|
||||
destSites = VTECPartners.VTEC_TABLE_REQUEST_SITES
|
||||
if not destSites:
|
||||
raise Exception('No destSites defined for VTEC_TABLE_REQUEST_SITES')
|
||||
|
||||
irt = IrtAccess.IrtAccess(ancf, bncf, logger=logger)
|
||||
msgSendDest, xml = irt.createDestinationXML(destSites, sourceServer)
|
||||
|
||||
if len(msgSendDest) > 0:
|
||||
# Now send the message
|
||||
irt = IrtAccess.IrtAccess(ancf, bncf)
|
||||
logger.debug("msgSendDest: "+ str(msgSendDest))
|
||||
irt.transmitFiles("PUT_TCV_FILES", msgSendDest, mhsid, [fname, fnameXML], xmtScript)
|
||||
# create the XML file
|
||||
with tempfile.NamedTemporaryFile(suffix='.xml', dir=tcvProductsDir, delete=False) as fd:
|
||||
fnameXML = fd.name
|
||||
fd.write(ElementTree.tostring(xml))
|
||||
|
||||
# don't send to ourselves
|
||||
if mhsid in msgSendDest:
|
||||
msgSendDest.remove(mhsid)
|
||||
|
||||
if len(msgSendDest) > 0:
|
||||
# Now send the message
|
||||
logger.debug("msgSendDest: "+ str(msgSendDest))
|
||||
irt.transmitFiles("PUT_TCV_FILES", msgSendDest, mhsid, [fname, fnameXML], xmtScript)
|
||||
else:
|
||||
logger.info('No TCV files to send')
|
||||
|
||||
except:
|
||||
logger.exception('Error sending TCV files for site: ' + siteID)
|
||||
|
|
|
@ -9,11 +9,15 @@ ebxml-federation-sync-threads=3
|
|||
ebxml-email.enabled=false
|
||||
# The maximum number of events that will be batched and send
|
||||
# in a registry replication notification
|
||||
ebxml-notification-batch-size=200
|
||||
ebxml-notification-batch-size=50
|
||||
# The maximum number of threads that the ebxml registry will use for processing web requests
|
||||
# This number must be >=5. As a general rule, the maximum number of connections should be:
|
||||
# 5+{registries this registry is replicating to/from}=max-threads
|
||||
ebxml-webserver-max-threads=8
|
||||
# There is a bug in Jetty 8.1.15 that causes this to throw SSL_NOT_HANDSHAKE exceptions constantly
|
||||
# This effectively freezes the webservices portion of the registry app if you do not give it enough connections.
|
||||
# A suggestions from the Jetty community was to set this param using the following math.
|
||||
# This number must be > number of CPU cores. As a general rule, the maximum number of connections should be:
|
||||
# CPU's+{registries this registry is replicating to/from}=max-threads
|
||||
# 20 is a pretty good starting point for a default.
|
||||
ebxml-webserver-max-threads=20
|
||||
# EBXML thrift service port
|
||||
ebxml.thrift.service.port=9588
|
||||
ebxml.thrift.service.disableStreamCache=true
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<menuContributionFile>
|
||||
|
||||
<include installTo="menu:obs?after=LIGHTNINGPLACEHOLDER"
|
||||
<include installTo="menu:IncludeSubMenuContributionId_Lightning?after=LmaTotalLightning"
|
||||
fileName="menus/lma/lma.xml"/>
|
||||
|
||||
</menuContributionFile>
|
|
@ -1,9 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<menuTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<contribute xsi:type="subMenu" menuText="Total Lightning">
|
||||
<contribute xsi:type="titleItem" id="LMATitle" titleText="------ LMA Total Lightning ------"/>
|
||||
<contribute xsi:type="subMenu" menuText="Standard Products">
|
||||
<contribute xsi:type="subMenu" menuText="NALMA">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
|
||||
<dataURI>/grid/NALMA/%/%/lmasd</dataURI>
|
||||
<substitute key="network" value="NALMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -11,7 +11,7 @@
|
|||
<substitute key="productType" value="lmasd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Maximum Source Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Maximum Source Density" id="lma">
|
||||
<dataURI>/grid/NALMA/%/%/lmamsd</dataURI>
|
||||
<substitute key="network" value="NALMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -19,7 +19,7 @@
|
|||
<substitute key="productType" value="lmamsd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/NALMA/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="NALMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -27,7 +27,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/NALMA/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="NALMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -35,7 +35,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/NALMA/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="NALMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -43,7 +43,7 @@
|
|||
<substitute key="productType" value="lmamfd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Rate of Change" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Rate of Change" id="lma">
|
||||
<dataURI>/grid/NALMA/%/%/lmaroc</dataURI>
|
||||
<substitute key="network" value="NALMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -53,7 +53,7 @@
|
|||
</contribute>
|
||||
</contribute>
|
||||
<contribute xsi:type="subMenu" menuText="DCLMA">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
|
||||
<dataURI>/grid/DCLMA/%/%/lmasd</dataURI>
|
||||
<substitute key="network" value="DCLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -61,7 +61,7 @@
|
|||
<substitute key="productType" value="lmasd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/DCLMA/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="DCLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -69,7 +69,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/DCLMA/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="DCLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -77,7 +77,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/DCLMA/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="DCLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -88,7 +88,7 @@
|
|||
</contribute>
|
||||
|
||||
<contribute xsi:type="subMenu" menuText="KLDAR">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
|
||||
<dataURI>/grid/KLDAR/%/%/lmasd</dataURI>
|
||||
<substitute key="network" value="KLDAR"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -96,7 +96,7 @@
|
|||
<substitute key="productType" value="lmasd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/KLDAR/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="KLDAR"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -104,7 +104,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/KLDAR/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="KLDAR"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -112,7 +112,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/KLDAR/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="KLDAR"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -123,7 +123,7 @@
|
|||
</contribute>
|
||||
|
||||
<contribute xsi:type="subMenu" menuText="OKLMA">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
|
||||
<dataURI>/grid/OKLMA/%/%/lmasd</dataURI>
|
||||
<substitute key="network" value="OKLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -131,7 +131,7 @@
|
|||
<substitute key="productType" value="lmasd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/OKLMA/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="OKLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -139,7 +139,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/OKLMA/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="OKLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -147,7 +147,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/OKLMA/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="OKLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -158,7 +158,7 @@
|
|||
</contribute>
|
||||
|
||||
<contribute xsi:type="subMenu" menuText="COLMA">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
|
||||
<dataURI>/grid/COLMA/%/%/lmasd</dataURI>
|
||||
<substitute key="network" value="COLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -166,7 +166,7 @@
|
|||
<substitute key="productType" value="lmasd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/COLMA/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="COLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -174,7 +174,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/COLMA/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="COLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -182,7 +182,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/COLMA/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="COLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -193,7 +193,7 @@
|
|||
</contribute>
|
||||
|
||||
<contribute xsi:type="subMenu" menuText="HGLMA">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
|
||||
<dataURI>/grid/HGLMA/%/%/lmasd</dataURI>
|
||||
<substitute key="network" value="HGLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -201,7 +201,7 @@
|
|||
<substitute key="productType" value="lmasd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/HGLMA/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="HGLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -209,7 +209,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/HGLMA/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="HGLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -217,7 +217,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/HGLMA/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="HGLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -228,7 +228,7 @@
|
|||
</contribute>
|
||||
|
||||
<contribute xsi:type="subMenu" menuText="WTLMA">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
|
||||
<dataURI>/grid/WTLMA/%/%/lmasd</dataURI>
|
||||
<substitute key="network" value="HGLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -236,7 +236,7 @@
|
|||
<substitute key="productType" value="lmasd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/WTLMA/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="WTLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -244,7 +244,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/WTLMA/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="WTLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -252,7 +252,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/WTLMA/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="WTLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -263,7 +263,7 @@
|
|||
</contribute>
|
||||
|
||||
<contribute xsi:type="subMenu" menuText="CFLMA">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
|
||||
<dataURI>/grid/CFLMA/%/%/lmasd</dataURI>
|
||||
<substitute key="network" value="HGLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -271,7 +271,7 @@
|
|||
<substitute key="productType" value="lmasd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/CFLMA/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="CFLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -279,7 +279,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/CFLMA/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="CFLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -287,7 +287,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/CFLMA/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="CFLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -298,7 +298,7 @@
|
|||
</contribute>
|
||||
|
||||
<contribute xsi:type="subMenu" menuText="LLLMA">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
|
||||
<dataURI>/grid/LLLMA/%/%/lmasd</dataURI>
|
||||
<substitute key="network" value="LLLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -306,7 +306,7 @@
|
|||
<substitute key="productType" value="lmasd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/LLLMA/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="LLLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -314,7 +314,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/LLLMA/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="LLLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -322,7 +322,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/LLLMA/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="LLLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -334,7 +334,7 @@
|
|||
|
||||
|
||||
<contribute xsi:type="subMenu" menuText="KSCLMA">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
|
||||
<dataURI>/grid/KSCLMA/%/%/lmasd</dataURI>
|
||||
<substitute key="network" value="KSCLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -342,7 +342,7 @@
|
|||
<substitute key="productType" value="lmasd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/KSCLMA/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="KSCLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -350,7 +350,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/KSCLMA/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="KSCLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -358,7 +358,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/KSCLMA/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="KSCLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -369,7 +369,7 @@
|
|||
</contribute>
|
||||
|
||||
<contribute xsi:type="subMenu" menuText="NGLMA">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
|
||||
<dataURI>/grid/NGLMA/%/%/lmasd</dataURI>
|
||||
<substitute key="network" value="NGLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -377,7 +377,7 @@
|
|||
<substitute key="productType" value="lmasd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/NGLMA/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="NGLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -385,7 +385,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/NGLMA/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="NGLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -393,7 +393,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/NGLMA/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="NGLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -404,7 +404,7 @@
|
|||
</contribute>
|
||||
|
||||
<contribute xsi:type="subMenu" menuText="ONLMA">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
|
||||
<dataURI>/grid/ONLMA/%/%/lmasd</dataURI>
|
||||
<substitute key="network" value="ONLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -412,7 +412,7 @@
|
|||
<substitute key="productType" value="lmasd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/ONLMA/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="ONLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -420,7 +420,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/ONLMA/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="ONLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -428,7 +428,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/ONLMA/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="ONLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -439,7 +439,7 @@
|
|||
</contribute>
|
||||
|
||||
<contribute xsi:type="subMenu" menuText="WILMA">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
|
||||
<dataURI>/grid/WILMA/%/%/lmasd</dataURI>
|
||||
<substitute key="network" value="WILMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -447,7 +447,7 @@
|
|||
<substitute key="productType" value="lmasd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/WILMA/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="WILMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -455,7 +455,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/WILMA/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="WILMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -463,7 +463,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/WILMA/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="WILMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -474,7 +474,7 @@
|
|||
</contribute>
|
||||
|
||||
<contribute xsi:type="subMenu" menuText="WSLMA">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
|
||||
<dataURI>/grid/WSLMA/%/%/lmasd</dataURI>
|
||||
<substitute key="network" value="WSLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -482,7 +482,7 @@
|
|||
<substitute key="productType" value="lmasd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/WSLMA/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="WSLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -490,7 +490,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/WSLMA/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="WSLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -498,7 +498,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/WSLMA/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="WSLMA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -509,9 +509,9 @@
|
|||
</contribute>
|
||||
|
||||
</contribute>
|
||||
<contribute xsi:type="subMenu" menuText="Psuedo-GLM Products">
|
||||
<contribute xsi:type="subMenu" menuText="Pseudo-GLM Products">
|
||||
<contribute xsi:type="subMenu" menuText="PGNA (North Alabama)">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/PGNA/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="PGNA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -519,7 +519,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/PGNA/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="PGNA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -527,7 +527,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Maximum Flash Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Maximum Flash Density" id="lma">
|
||||
<dataURI>/grid/PGNA/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="PGNA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -535,7 +535,7 @@
|
|||
<substitute key="productType" value="lmamfd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="30 minute Sum" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="30 minute Sum" id="lma">
|
||||
<dataURI>/grid/PGNA/%/%/lmasum</dataURI>
|
||||
<substitute key="network" value="PGNA"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -546,7 +546,7 @@
|
|||
</contribute>
|
||||
|
||||
<contribute xsi:type="subMenu" menuText="PGDC (Washington D.C.)">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/PGDC/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="PGDC"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -554,7 +554,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/PGDC/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="PGDC"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -562,7 +562,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Maximum Flash Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Maximum Flash Density" id="lma">
|
||||
<dataURI>/grid/PGDC/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="PGDC"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -570,7 +570,7 @@
|
|||
<substitute key="productType" value="lmamfd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="30 minute Sum" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="30 minute Sum" id="lma">
|
||||
<dataURI>/grid/PGDC/%/%/lmasum</dataURI>
|
||||
<substitute key="network" value="PGDC"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -581,7 +581,7 @@
|
|||
</contribute>
|
||||
|
||||
<contribute xsi:type="subMenu" menuText="PGSC (Kennedy Space Center)">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/PGSC/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="PGSC"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -589,7 +589,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/PGSC/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="PGSC"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -597,7 +597,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Maximum Flash Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Maximum Flash Density" id="lma">
|
||||
<dataURI>/grid/PGSC/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="PGSC"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -605,7 +605,7 @@
|
|||
<substitute key="productType" value="lmamfd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="30 minute Sum" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="30 minute Sum" id="lma">
|
||||
<dataURI>/grid/PGSC/%/%/lmasum</dataURI>
|
||||
<substitute key="network" value="PGSC"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -616,7 +616,7 @@
|
|||
</contribute>
|
||||
|
||||
<contribute xsi:type="subMenu" menuText="PGOK (Oklahoma)">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/PGOK/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="PGOK"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -624,7 +624,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/PGOK/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="PGOK"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -632,7 +632,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Maximum Flash Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Maximum Flash Density" id="lma">
|
||||
<dataURI>/grid/PGOK/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="PGOK"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -640,7 +640,7 @@
|
|||
<substitute key="productType" value="lmamfd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="30 minute Sum" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="30 minute Sum" id="lma">
|
||||
<dataURI>/grid/PGOK/%/%/lmasum</dataURI>
|
||||
<substitute key="network" value="PGOK"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -651,7 +651,7 @@
|
|||
</contribute>
|
||||
|
||||
<contribute xsi:type="subMenu" menuText="PGCO (Colorado)">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/PGCO/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="PGCO"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -659,7 +659,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/PGCO/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="PGCO"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -667,7 +667,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Maximum Flash Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Maximum Flash Density" id="lma">
|
||||
<dataURI>/grid/PGCO/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="PGCO"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -675,7 +675,7 @@
|
|||
<substitute key="productType" value="lmamfd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="30 minute Sum" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="30 minute Sum" id="lma">
|
||||
<dataURI>/grid/PGCO/%/%/lmasum</dataURI>
|
||||
<substitute key="network" value="PGCO"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -686,7 +686,7 @@
|
|||
</contribute>
|
||||
|
||||
<contribute xsi:type="subMenu" menuText="PGHG (Houston)">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/PGHG/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="PGHG"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -694,7 +694,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/PGHG/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="PGHG"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -702,7 +702,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Maximum Flash Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Maximum Flash Density" id="lma">
|
||||
<dataURI>/grid/PGHG/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="PGHG"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -710,7 +710,7 @@
|
|||
<substitute key="productType" value="lmamfd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="30 minute Sum" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="30 minute Sum" id="lma">
|
||||
<dataURI>/grid/PGHG/%/%/lmasum</dataURI>
|
||||
<substitute key="network" value="PGHG"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -721,7 +721,7 @@
|
|||
</contribute>
|
||||
|
||||
<contribute xsi:type="subMenu" menuText="PGWT (West Texas)">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/PGWT/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="PGWT"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -729,7 +729,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/PGWT/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="PGWT"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -737,7 +737,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Maximum Flash Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Maximum Flash Density" id="lma">
|
||||
<dataURI>/grid/PGWT/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="PGWT"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -745,7 +745,7 @@
|
|||
<substitute key="productType" value="lmamfd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="30 minute Sum" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="30 minute Sum" id="lma">
|
||||
<dataURI>/grid/PGWT/%/%/lmasum</dataURI>
|
||||
<substitute key="network" value="PGWT"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -756,7 +756,7 @@
|
|||
</contribute>
|
||||
|
||||
<contribute xsi:type="subMenu" menuText="PGCF (Central Florida)">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/PGCF/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="PGCF"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -764,7 +764,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/PGCF/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="PGCF"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -772,7 +772,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Maximum Flash Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Maximum Flash Density" id="lma">
|
||||
<dataURI>/grid/PGCF/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="PGCF"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -780,7 +780,7 @@
|
|||
<substitute key="productType" value="lmamfd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="30 minute Sum" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="30 minute Sum" id="lma">
|
||||
<dataURI>/grid/PGCF/%/%/lmasum</dataURI>
|
||||
<substitute key="network" value="PGCF"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -791,7 +791,7 @@
|
|||
</contribute>
|
||||
|
||||
<contribute xsi:type="subMenu" menuText="PGLL (Langmuir Laboratory)">
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
|
||||
<dataURI>/grid/PGLL/%/%/lmafed</dataURI>
|
||||
<substitute key="network" value="PGLL"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -799,7 +799,7 @@
|
|||
<substitute key="productType" value="lmafed"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
|
||||
<dataURI>/grid/PGLL/%/%/lmafid</dataURI>
|
||||
<substitute key="network" value="PGLL"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -807,7 +807,7 @@
|
|||
<substitute key="productType" value="lmafid"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Maximum Flash Density" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Maximum Flash Density" id="lma">
|
||||
<dataURI>/grid/PGLL/%/%/lmamfd</dataURI>
|
||||
<substitute key="network" value="PGLL"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -815,7 +815,7 @@
|
|||
<substitute key="productType" value="lmamfd"/>
|
||||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="30 minute Sum" id="lma">
|
||||
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="30 minute Sum" id="lma">
|
||||
<dataURI>/grid/PGLL/%/%/lmasum</dataURI>
|
||||
<substitute key="network" value="PGLL"/>
|
||||
<substitute key="level" value="0"/>
|
||||
|
@ -824,8 +824,5 @@
|
|||
<substitute key="colorMapName" value="lma/nalma"/>
|
||||
</contribute>
|
||||
</contribute>
|
||||
|
||||
|
||||
</contribute>
|
||||
</contribute>
|
||||
</menuTemplate>
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual C# Express 2010
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AWIPSII.CAVE", "AWIPSII.CAVE\AWIPSII.CAVE.csproj", "{1F23042E-FD8D-496D-969C-3693FF0664A6}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{1F23042E-FD8D-496D-969C-3693FF0664A6}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{1F23042E-FD8D-496D-969C-3693FF0664A6}.Debug|x86.Build.0 = Debug|x86
|
||||
{1F23042E-FD8D-496D-969C-3693FF0664A6}.Release|x86.ActiveCfg = Release|x86
|
||||
{1F23042E-FD8D-496D-969C-3693FF0664A6}.Release|x86.Build.0 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
Binary file not shown.
|
@ -1,52 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||
<ProductVersion>8.0.30703</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{1F23042E-FD8D-496D-969C-3693FF0664A6}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>AWIPSII.CAVE</RootNamespace>
|
||||
<AssemblyName>AWIPSII.CAVE</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<None Include="AWIPSII.wixproj">
|
||||
<SubType>Designer</SubType>
|
||||
</None>
|
||||
<None Include="AWIPSII.wxs">
|
||||
<SubType>Designer</SubType>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,3 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
</Project>
|
|
@ -1,35 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
|
||||
<Platform Condition="'$(Platform)' == ''">x86</Platform>
|
||||
<Version Condition=" '$(Version)' == '' ">1.0.0.0</Version>
|
||||
<StagingDirectory Condition=" '${StagingDirectory}' == '' ">C:\A2Staging\AWIPS II\</StagingDirectory>
|
||||
<ProductVersion>3.5</ProductVersion>
|
||||
<ProjectGuid>9F9450DE-A24F-412D-8E34-69BEEA3043DA</ProjectGuid>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<OutputType>Package</OutputType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<OutputPath>bin\$(Configuration)</OutputPath>
|
||||
<DefineConstants>Debug;ProductVersion=$(Version)</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\$(Configuration)</OutputPath>
|
||||
<DefineConstants>ProductVersion=$(Version)</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AWIPSII.wxs" />
|
||||
<Compile Include="AWIPSII_CAVE.wxs" />
|
||||
<Compile Include="AWIPSII_ALERTVIZ.wxs" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
<OutputName>AWIPS II CAVE</OutputName>
|
||||
<LinkerAdditionalOptions>-ext WixUIExtension -b "$(StagingDirectory)" -dWixUIBannerBmp=cave_msi_banner.bmp -dWixUIDialogBmp=cave_msi_dialog.bmp</LinkerAdditionalOptions>
|
||||
<WixToolPath>C:\Users\Public\Documents\wix35-binaries\</WixToolPath>
|
||||
<WixTargetsPath>$(WixToolPath)Wix.targets</WixTargetsPath>
|
||||
<WixTasksPath>$(WixToolPath)wixtasks.dll</WixTasksPath>
|
||||
<DefineSolutionProperties>false</DefineSolutionProperties>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(WixTargetsPath)"/>
|
||||
</Project>
|
|
@ -1,95 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
||||
<Product Id="8A1F2DCB-5527-4D32-BC7A-E4295EA72942" Name="AWIPS II CAVE"
|
||||
Language="1033" Version="$(var.ProductVersion)" Manufacturer="Raytheon"
|
||||
UpgradeCode="8924277C-5B6A-4EEB-AE9F-5471481F92A5">
|
||||
<Package Manufacturer="Raytheon" InstallerVersion="200"
|
||||
Compressed="yes" InstallScope="perMachine" />
|
||||
|
||||
<Media Id="1" Cabinet="product.cab" EmbedCab="yes" />
|
||||
|
||||
<Property Id="RUNTIMEENVIRONMENT">
|
||||
<RegistrySearch Id="RuntimeEnvironment"
|
||||
Root="HKLM"
|
||||
Key="Software\Raytheon\Runtime Environment"
|
||||
Type="raw"
|
||||
Name="Name" />
|
||||
</Property>
|
||||
|
||||
<Condition Message="The AWIPS II Runtime Environment must be installed before AWIPS II CAVE can be installed.">
|
||||
<![CDATA[Installed OR RUNTIMEENVIRONMENT]]>
|
||||
</Condition>
|
||||
|
||||
<Directory Id="TARGETDIR" Name="SourceDir">
|
||||
<Directory Id="ProgramFilesFolder" Name="PFiles">
|
||||
<Directory Id="INSTALLDIR" Name="Raytheon">
|
||||
<Directory Id="AwipsII" Name="AWIPS II">
|
||||
<Directory Id="CaveDir" Name="CAVE">
|
||||
<Component Id="caveBatch" Guid="8924277C-5B6A-4EEB-AE9F-5471481F92A6">
|
||||
<File Id="caveBAT" Name="cave.bat"
|
||||
DiskId="1" Source="SourceDir\CAVE\cave.bat" />
|
||||
<Shortcut Id="caveDesktopShortcut" Directory="DesktopFolder" Name="CAVE"
|
||||
WorkingDirectory="CaveDir" Advertise="yes" Icon="cave.exe" IconIndex="0"
|
||||
Arguments="-component thinclient" />
|
||||
<Shortcut Id="caveStartMenu" Directory="ProgramMenuDir" Name="CAVE"
|
||||
WorkingDirectory="CaveDir" Advertise="yes" Icon="cave.exe" IconIndex="0"
|
||||
Arguments="-component thinclient" />
|
||||
</Component>
|
||||
</Directory>
|
||||
<Directory Id="AlertvizDir" Name="AlertViz">
|
||||
<Component Id="alertvizBatch" Guid="8924277C-5B6A-4EEB-AE9F-5471481F92B4">
|
||||
<File Id="alertvizBAT" Name="alertviz.bat"
|
||||
DiskId="1" Source="SourceDir\AlertViz\alertviz.bat" />
|
||||
<Shortcut Id="alertvizDesktopShortcut" Directory="DesktopFolder" Name="AlertViz"
|
||||
WorkingDirectory="AlertvizDir" Advertise="yes" Icon="alertviz.exe" IconIndex="0"
|
||||
Arguments="-component thinalertviz" />
|
||||
<Shortcut Id="alertvizStartMenu" Directory="ProgramMenuDir" Name="AlertViz"
|
||||
WorkingDirectory="AlertvizDir" Advertise="yes" Icon="alertviz.exe" IconIndex="0"
|
||||
Arguments="-component thinalertviz" />
|
||||
</Component>
|
||||
</Directory>
|
||||
</Directory>
|
||||
</Directory>
|
||||
|
||||
<Directory Id="ProgramMenuFolder" Name="Programs">
|
||||
<Directory Id="ProgramMenuDir" Name="AWIPS II">
|
||||
<Component Id="ProgramMenuDir" Guid="62D7CF96-A3A5-4DCE-86A5-751D698B5CA3">
|
||||
<RemoveFolder Id="ProgramMenuDir" On="uninstall" />
|
||||
<RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]"
|
||||
Type="string" Value="" KeyPath="yes" />
|
||||
|
||||
<Shortcut Id="UninstallProduct" Name="Uninstall CAVE" Description="Uninstalls AWIPS II CAVE"
|
||||
Target="[SystemFolder]msiexec.exe" Arguments="/x [ProductCode]" />
|
||||
</Component>
|
||||
</Directory>
|
||||
</Directory>
|
||||
</Directory>
|
||||
|
||||
<Directory Id="DesktopFolder" Name="Desktop" />
|
||||
</Directory>
|
||||
|
||||
<Feature Id="AWIPS_II_CAVE" Title="AWIPS II CAVE" Level="1"
|
||||
Display="expand" Description="AWIPS II Common AWIPS Visualization Environment (CAVE)"
|
||||
ConfigurableDirectory="INSTALLDIR">
|
||||
<ComponentRef Id="caveBatch" />
|
||||
<ComponentRef Id="ProgramMenuDir" />
|
||||
|
||||
<ComponentGroupRef Id="AWIPSII_CAVE" />
|
||||
</Feature>
|
||||
|
||||
<Feature Id="AWIPS_II_ALERTVIZ" Title="AWIPS II AlertViz" Level="1"
|
||||
Display="expand" Description="AWIPS II AlertViz"
|
||||
ConfigurableDirectory="INSTALLDIR">
|
||||
<ComponentRef Id="alertvizBatch" />
|
||||
|
||||
<ComponentGroupRef Id="AWIPSII_ALERTVIZ" />
|
||||
</Feature>
|
||||
|
||||
<UIRef Id="WixUI_FeatureTree" />
|
||||
<UIRef Id="WixUI_ErrorProgressText" />
|
||||
|
||||
<Icon Id="cave.exe" SourceFile="SourceDir\CAVE\cave.exe" />
|
||||
<Icon Id="alertviz.exe" SourceFile="SourceDir\AlertViz\alertviz.exe" />
|
||||
|
||||
</Product>
|
||||
</Wix>
|
Binary file not shown.
Before Width: | Height: | Size: 84 KiB |
Binary file not shown.
Before Width: | Height: | Size: 451 KiB |
Binary file not shown.
Before Width: | Height: | Size: 18 KiB |
|
@ -1,52 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||
<ProductVersion>8.0.30703</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{1F23042E-FD8D-496D-969C-3693FF0664A6}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>AWIPSII.CAVE</RootNamespace>
|
||||
<AssemblyName>AWIPSII.CAVE</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<None Include="AWIPSII.wixproj">
|
||||
<SubType>Designer</SubType>
|
||||
</None>
|
||||
<None Include="AWIPSII.wxs">
|
||||
<SubType>Designer</SubType>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,3 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
</Project>
|
|
@ -1,35 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
|
||||
<Platform Condition="'$(Platform)' == ''">x64</Platform>
|
||||
<Version Condition=" '$(Version)' == '' ">1.0.0.0</Version>
|
||||
<StagingDirectory Condition=" '${StagingDirectory}' == '' ">C:\A2Staging\AWIPS II\</StagingDirectory>
|
||||
<ProductVersion>3.5</ProductVersion>
|
||||
<ProjectGuid>9F9450DE-A24F-412D-8E34-69BEEA3043DA</ProjectGuid>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<OutputType>Package</OutputType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||
<OutputPath>bin\$(Configuration)</OutputPath>
|
||||
<DefineConstants>Debug;ProductVersion=$(Version)</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||
<OutputPath>bin\$(Configuration)</OutputPath>
|
||||
<DefineConstants>ProductVersion=$(Version)</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AWIPSII.wxs" />
|
||||
<Compile Include="AWIPSII_CAVE.wxs" />
|
||||
<Compile Include="AWIPSII_ALERTVIZ.wxs" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
<OutputName>AWIPS II CAVE</OutputName>
|
||||
<LinkerAdditionalOptions>-ext WixUIExtension -b "$(StagingDirectory)" -dWixUIBannerBmp=cave_msi_banner.bmp -dWixUIDialogBmp=cave_msi_dialog.bmp</LinkerAdditionalOptions>
|
||||
<WixToolPath>C:\Users\Public\Documents\wix35-binaries\</WixToolPath>
|
||||
<WixTargetsPath>$(WixToolPath)Wix.targets</WixTargetsPath>
|
||||
<WixTasksPath>$(WixToolPath)wixtasks.dll</WixTasksPath>
|
||||
<DefineSolutionProperties>false</DefineSolutionProperties>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(WixTargetsPath)"/>
|
||||
</Project>
|
|
@ -1,98 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
||||
<Product Id="8A1F2DCB-5527-4D32-BC7A-E4295EA72942" Name="AWIPS II CAVE x64"
|
||||
Language="1033" Version="$(var.ProductVersion)" Manufacturer="Raytheon"
|
||||
UpgradeCode="8924277C-5B6A-4EEB-AE9F-5471481F92A5">
|
||||
<Package Manufacturer="Raytheon" InstallerVersion="200"
|
||||
Compressed="yes" InstallScope="perMachine" />
|
||||
|
||||
<Property Id="MSIFASTINSTALL" Value="3" />
|
||||
|
||||
<Media Id="1" Cabinet="product.cab" EmbedCab="yes" />
|
||||
|
||||
<Property Id="RUNTIMEENVIRONMENT">
|
||||
<RegistrySearch Id="RuntimeEnvironment"
|
||||
Root="HKLM"
|
||||
Key="Software\Raytheon\Runtime Environment"
|
||||
Type="raw"
|
||||
Name="Name"
|
||||
Win64="yes" />
|
||||
</Property>
|
||||
|
||||
<Condition Message="The AWIPS II Runtime Environment (x64) must be installed before AWIPS II CAVE can be installed.">
|
||||
<![CDATA[Installed OR RUNTIMEENVIRONMENT]]>
|
||||
</Condition>
|
||||
|
||||
<Directory Id="TARGETDIR" Name="SourceDir">
|
||||
<Directory Id="ProgramFiles64Folder" Name="PFiles">
|
||||
<Directory Id="INSTALLDIR" Name="Raytheon">
|
||||
<Directory Id="AwipsII" Name="AWIPS II">
|
||||
<Directory Id="CaveDir" Name="CAVE">
|
||||
<Component Id="caveBatch" Guid="8924277C-5B6A-4EEB-AE9F-5471481F92A6" Win64="yes">
|
||||
<File Id="caveBAT" Name="cave.bat"
|
||||
DiskId="1" Source="SourceDir\CAVE\cave.bat" />
|
||||
<Shortcut Id="caveDesktopShortcut" Directory="DesktopFolder" Name="CAVE"
|
||||
WorkingDirectory="CaveDir" Advertise="yes" Icon="cave.exe" IconIndex="0"
|
||||
Arguments="-component thinclient" />
|
||||
<Shortcut Id="caveStartMenu" Directory="ProgramMenuDir" Name="CAVE"
|
||||
WorkingDirectory="CaveDir" Advertise="yes" Icon="cave.exe" IconIndex="0"
|
||||
Arguments="-component thinclient" />
|
||||
</Component>
|
||||
</Directory>
|
||||
<Directory Id="AlertvizDir" Name="AlertViz">
|
||||
<Component Id="alertvizBatch" Guid="8924277C-5B6A-4EEB-AE9F-5471481F92B4" Win64="yes">
|
||||
<File Id="alertvizBAT" Name="alertviz.bat"
|
||||
DiskId="1" Source="SourceDir\AlertViz\alertviz.bat" />
|
||||
<Shortcut Id="alertvizDesktopShortcut" Directory="DesktopFolder" Name="AlertViz"
|
||||
WorkingDirectory="AlertvizDir" Advertise="yes" Icon="alertviz.exe" IconIndex="0"
|
||||
Arguments="-component thinalertviz" />
|
||||
<Shortcut Id="alertvizStartMenu" Directory="ProgramMenuDir" Name="AlertViz"
|
||||
WorkingDirectory="AlertvizDir" Advertise="yes" Icon="alertviz.exe" IconIndex="0"
|
||||
Arguments="-component thinalertviz" />
|
||||
</Component>
|
||||
</Directory>
|
||||
</Directory>
|
||||
</Directory>
|
||||
|
||||
<Directory Id="ProgramMenuFolder" Name="Programs">
|
||||
<Directory Id="ProgramMenuDir" Name="AWIPS II">
|
||||
<Component Id="ProgramMenuDir" Guid="62D7CF96-A3A5-4DCE-86A5-751D698B5CA3">
|
||||
<RemoveFolder Id="ProgramMenuDir" On="uninstall" />
|
||||
<RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]"
|
||||
Type="string" Value="" KeyPath="yes" />
|
||||
|
||||
<Shortcut Id="UninstallProduct" Name="Uninstall CAVE" Description="Uninstalls AWIPS II CAVE"
|
||||
Target="[SystemFolder]msiexec.exe" Arguments="/x [ProductCode]" />
|
||||
</Component>
|
||||
</Directory>
|
||||
</Directory>
|
||||
</Directory>
|
||||
|
||||
<Directory Id="DesktopFolder" Name="Desktop" />
|
||||
</Directory>
|
||||
|
||||
<Feature Id="AWIPS_II_CAVE" Title="AWIPS II CAVE" Level="1"
|
||||
Display="expand" Description="AWIPS II Common AWIPS Visualization Environment (CAVE)"
|
||||
ConfigurableDirectory="INSTALLDIR">
|
||||
<ComponentRef Id="caveBatch" />
|
||||
<ComponentRef Id="ProgramMenuDir" />
|
||||
|
||||
<ComponentGroupRef Id="AWIPSII_CAVE" />
|
||||
</Feature>
|
||||
|
||||
<Feature Id="AWIPS_II_ALERTVIZ" Title="AWIPS II AlertViz" Level="1"
|
||||
Display="expand" Description="AWIPS II AlertViz"
|
||||
ConfigurableDirectory="INSTALLDIR">
|
||||
<ComponentRef Id="alertvizBatch" />
|
||||
|
||||
<ComponentGroupRef Id="AWIPSII_ALERTVIZ" />
|
||||
</Feature>
|
||||
|
||||
<UIRef Id="WixUI_FeatureTree" />
|
||||
<UIRef Id="WixUI_ErrorProgressText" />
|
||||
|
||||
<Icon Id="cave.exe" SourceFile="SourceDir\CAVE\cave.exe" />
|
||||
<Icon Id="alertviz.exe" SourceFile="SourceDir\AlertViz\alertviz.exe" />
|
||||
|
||||
</Product>
|
||||
</Wix>
|
Binary file not shown.
Before Width: | Height: | Size: 84 KiB |
Binary file not shown.
Before Width: | Height: | Size: 451 KiB |
Binary file not shown.
Before Width: | Height: | Size: 18 KiB |
|
@ -1,20 +0,0 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual C# Express 2010
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AWIPSII.CAVE", "AWIPSII.CAVE\AWIPSII.CAVE.csproj", "{1F23042E-FD8D-496D-969C-3693FF0664A6}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{1F23042E-FD8D-496D-969C-3693FF0664A6}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{1F23042E-FD8D-496D-969C-3693FF0664A6}.Debug|x86.Build.0 = Debug|x86
|
||||
{1F23042E-FD8D-496D-969C-3693FF0664A6}.Release|x86.ActiveCfg = Release|x86
|
||||
{1F23042E-FD8D-496D-969C-3693FF0664A6}.Release|x86.Build.0 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
Binary file not shown.
|
@ -1,20 +0,0 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual C# Express 2010
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AWIPSII.Environment", "AWIPSII.Environment\AWIPSII.Environment.csproj", "{9033F84D-9AB7-4D08-B634-603205FFE73A}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{9033F84D-9AB7-4D08-B634-603205FFE73A}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{9033F84D-9AB7-4D08-B634-603205FFE73A}.Debug|x86.Build.0 = Debug|x86
|
||||
{9033F84D-9AB7-4D08-B634-603205FFE73A}.Release|x86.ActiveCfg = Release|x86
|
||||
{9033F84D-9AB7-4D08-B634-603205FFE73A}.Release|x86.Build.0 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
Binary file not shown.
|
@ -1,56 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||
<ProductVersion>8.0.30703</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{9033F84D-9AB7-4D08-B634-603205FFE73A}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>AWIPSII.Environment</RootNamespace>
|
||||
<AssemblyName>AWIPSII.Environment</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<None Include="AWIPSII.wixproj">
|
||||
<SubType>Designer</SubType>
|
||||
</None>
|
||||
<None Include="AWIPSII.wxs">
|
||||
<SubType>Designer</SubType>
|
||||
</None>
|
||||
<None Include="AWIPSII_JAVA.wxs" />
|
||||
<None Include="AWIPSII_PYTHON.wxs">
|
||||
<SubType>Designer</SubType>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,3 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
</Project>
|
|
@ -1,32 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
|
||||
<Platform Condition="'$(Platform)' == ''">x86</Platform>
|
||||
<ProductVersion>3.5</ProductVersion>
|
||||
<ProjectGuid>9F9450DE-A24F-412D-8E34-69BEEA3049DF</ProjectGuid>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<OutputType>Package</OutputType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<OutputPath>bin\$(Configuration)</OutputPath>
|
||||
<DefineConstants>Debug</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\$(Configuration)</OutputPath>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AWIPSII.wxs" />
|
||||
<Compile Include="AWIPSII_JAVA.wxs" />
|
||||
<Compile Include="AWIPSII_PYTHON.wxs" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
<OutputName>AWIPS II Runtime Environment</OutputName>
|
||||
<LinkerAdditionalOptions>-ext WixUIExtension -b "$(StagingDirectory)"</LinkerAdditionalOptions>
|
||||
<WixToolPath>C:\Users\Public\Documents\wix35-binaries\</WixToolPath>
|
||||
<WixTargetsPath>$(WixToolPath)Wix.targets</WixTargetsPath>
|
||||
<WixTasksPath>$(WixToolPath)wixtasks.dll</WixTasksPath>
|
||||
<DefineSolutionProperties>false</DefineSolutionProperties>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(WixTargetsPath)"/>
|
||||
</Project>
|
|
@ -1,138 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
||||
<Product Id="8A1F2DCB-5527-4D32-BC7A-E4295EA72940" Name="AWIPS II Runtime Environment"
|
||||
Language="1033" Version="1.0.3.0" Manufacturer="Raytheon"
|
||||
UpgradeCode="8924277C-5B6A-4EEB-AE9F-5471481F92A6">
|
||||
<Package Manufacturer="Raytheon" InstallerVersion="200"
|
||||
Compressed="yes" InstallScope="perMachine" />
|
||||
|
||||
<Media Id="1" Cabinet="product.cab" EmbedCab="yes" />
|
||||
|
||||
<Directory Id="TARGETDIR" Name="SourceDir">
|
||||
<Directory Id="ProgramFilesFolder" Name="PFiles">
|
||||
<Directory Id="INSTALLDIR" Name="Raytheon">
|
||||
<Directory Id="AwipsII" Name="AWIPS II">
|
||||
</Directory>
|
||||
</Directory>
|
||||
</Directory>
|
||||
|
||||
<Component Id="A2RE" Guid="2934162A-C503-441D-81F6-284AEE160F65">
|
||||
<RegistryKey Root="HKMU" Key="Software\Raytheon\Runtime Environment"
|
||||
Action="createAndRemoveOnUninstall">
|
||||
<RegistryValue Type="string" Name="Name"
|
||||
Value="AWIPS II Runtime Environment" KeyPath="yes" />
|
||||
</RegistryKey>
|
||||
</Component>
|
||||
|
||||
<Component Id="A2JavaRegistryEntries" Guid="2934162A-C503-441D-81F6-284AEE160F84">
|
||||
<RegistryKey Root="HKMU" Key="Software\Raytheon\Runtime Environment\AWIPS II Java"
|
||||
Action="createAndRemoveOnUninstall">
|
||||
<RegistryValue Type="string" Name="JavaInstallDirectory"
|
||||
Value="[INSTALLDIR]AWIPS II\Java" KeyPath="yes" />
|
||||
<RegistryValue Type="string" Name="JavaJdkDirectory"
|
||||
Value="[INSTALLDIR]AWIPS II\Java" />
|
||||
<RegistryValue Type="string" Name="JavaJreDirectory"
|
||||
Value="[INSTALLDIR]AWIPS II\Java\jre" />
|
||||
<RegistryValue Type="string" Name="JavaVersion"
|
||||
Value="7.0.40" />
|
||||
<RegistryValue Type="string" Name="JAIVersion"
|
||||
Value="1.1.3" />
|
||||
<RegistryValue Type="string" Name="JAIImageIOVersion"
|
||||
Value="1.1" />
|
||||
</RegistryKey>
|
||||
</Component>
|
||||
|
||||
<Component Id="A2PythonRegistryEntries" Guid="2D26E381-FD7B-4FD7-9CDE-A78A93BA8CA8">
|
||||
<RegistryKey Root="HKMU" Key="Software\Raytheon\Runtime Environment\AWIPS II Python"
|
||||
Action="createAndRemoveOnUninstall">
|
||||
<RegistryValue Type="string" Name="PythonInstallDirectory"
|
||||
Value="[INSTALLDIR]AWIPS II\Python" KeyPath="yes" />
|
||||
<RegistryValue Type="string" Name="PythonVersion"
|
||||
Value="2.7.2150" />
|
||||
<RegistryValue Type="integer" Name="SitePackageCount"
|
||||
Value="10" />
|
||||
</RegistryKey>
|
||||
|
||||
<RegistryKey Root="HKMU" Key="Software\Raytheon\Runtime Environment\AWIPS II Python\SitePackages"
|
||||
Action="createAndRemoveOnUninstall">
|
||||
<RegistryValue Type="string" Name="PythonPackage1-Name"
|
||||
Value="h5py" />
|
||||
<RegistryValue Type="string" Name="PythonPackage1-Version"
|
||||
Value="1.3.1" />
|
||||
|
||||
<RegistryValue Type="string" Name="PythonPackage2-Name"
|
||||
Value="matplotlib" />
|
||||
<RegistryValue Type="string" Name="PythonPackage2-Version"
|
||||
Value="0.99.1.1" />
|
||||
|
||||
<RegistryValue Type="string" Name="PythonPackage3-Name"
|
||||
Value="nose" />
|
||||
<RegistryValue Type="string" Name="PythonPackage3-Version"
|
||||
Value="0.11.1" />
|
||||
|
||||
<RegistryValue Type="string" Name="PythonPackage4-Name"
|
||||
Value="numpy" />
|
||||
<RegistryValue Type="string" Name="PythonPackage4-Version"
|
||||
Value="1.5.0" />
|
||||
|
||||
<RegistryValue Type="string" Name="PythonPackage5-Name"
|
||||
Value="pmw" />
|
||||
<RegistryValue Type="string" Name="PythonPackage5-Version"
|
||||
Value="1.3.2" />
|
||||
|
||||
<RegistryValue Type="string" Name="PythonPackage6-Name"
|
||||
Value="scientific" />
|
||||
<RegistryValue Type="string" Name="PythonPackage6-Version"
|
||||
Value="2.8" />
|
||||
|
||||
<RegistryValue Type="string" Name="PythonPackage7-Name"
|
||||
Value="scipy" />
|
||||
<RegistryValue Type="string" Name="PythonPackage7-Version"
|
||||
Value="0.9.0" />
|
||||
|
||||
<RegistryValue Type="string" Name="PythonPackage8-Name"
|
||||
Value="setuptools" />
|
||||
<RegistryValue Type="string" Name="PythonPackage8-Version"
|
||||
Value="0.6c11" />
|
||||
|
||||
<RegistryValue Type="string" Name="PythonPackage9-Name"
|
||||
Value="tables" />
|
||||
<RegistryValue Type="string" Name="PythonPackage9-Version"
|
||||
Value="2.1.2" />
|
||||
|
||||
<RegistryValue Type="string" Name="PythonPackage10-Name"
|
||||
Value="tpg" />
|
||||
<RegistryValue Type="string" Name="PythonPackage10-Version"
|
||||
Value="3.1.2" />
|
||||
|
||||
<RegistryValue Type="string" Name="PythonPackage11-Name"
|
||||
Value="shapely" />
|
||||
<RegistryValue Type="string" Name="PythonPackage11-Version"
|
||||
Value="1.2.16" />
|
||||
</RegistryKey>
|
||||
</Component>
|
||||
</Directory>
|
||||
|
||||
<Feature Id="AWIPS_II_JAVA" Title="AWIPS II Java" Level="1"
|
||||
Display="expand" Description="AWIPS II Java"
|
||||
ConfigurableDirectory="INSTALLDIR">
|
||||
<ComponentGroupRef Id="AWIPSII_JAVA"/>
|
||||
<ComponentRef Id="A2JavaRegistryEntries"/>
|
||||
</Feature>
|
||||
|
||||
<Feature Id="AWIPS_II_PYTHON" Title="AWIPS II Python" Level="1"
|
||||
Display="expand" Description="AWIPS II Python"
|
||||
ConfigurableDirectory="INSTALLDIR">
|
||||
<ComponentGroupRef Id="AWIPSII_PYTHON" />
|
||||
<ComponentRef Id="A2PythonRegistryEntries"/>
|
||||
</Feature>
|
||||
|
||||
<Feature Id="_Hidden_RegKeys" Display="hidden" Level="1">
|
||||
<ComponentRef Id="A2RE" />
|
||||
</Feature>
|
||||
|
||||
<UIRef Id="WixUI_FeatureTree" />
|
||||
<UIRef Id="WixUI_ErrorProgressText" />
|
||||
|
||||
</Product>
|
||||
</Wix>
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,37 +0,0 @@
|
|||
[Version]
|
||||
Class=IEXPRESS
|
||||
SEDVersion=3
|
||||
[Options]
|
||||
PackagePurpose=InstallApp
|
||||
ShowInstallProgramWindow=0
|
||||
HideExtractAnimation=0
|
||||
UseLongFileName=1
|
||||
InsideCompressed=0
|
||||
CAB_FixedSize=0
|
||||
CAB_ResvCodeSigning=0
|
||||
RebootMode=I
|
||||
InstallPrompt=%InstallPrompt%
|
||||
DisplayLicense=%DisplayLicense%
|
||||
FinishMessage=%FinishMessage%
|
||||
TargetName=%TargetName%
|
||||
FriendlyName=%FriendlyName%
|
||||
AppLaunched=%AppLaunched%
|
||||
PostInstallCmd=%PostInstallCmd%
|
||||
AdminQuietInstCmd=%AdminQuietInstCmd%
|
||||
UserQuietInstCmd=%UserQuietInstCmd%
|
||||
SourceFiles=SourceFiles
|
||||
[Strings]
|
||||
InstallPrompt=
|
||||
DisplayLicense=
|
||||
FinishMessage=
|
||||
TargetName=C:\A2Staging\AWIPS II CAVE.EXE
|
||||
FriendlyName=AWIPS II CAVE
|
||||
AppLaunched=msiexec /i AWIPS_II_CAVE.msi DISABLEADVTSHORTCUTS=1
|
||||
PostInstallCmd=<None>
|
||||
AdminQuietInstCmd=
|
||||
UserQuietInstCmd=
|
||||
FILE0="AWIPS_II_CAVE.msi"
|
||||
[SourceFiles]
|
||||
SourceFiles0=C:\A2Staging
|
||||
[SourceFiles0]
|
||||
%FILE0%=
|
Binary file not shown.
Binary file not shown.
|
@ -1,62 +0,0 @@
|
|||
function installCAVERepository([string]$feature_group, [string]$repo)
|
||||
{
|
||||
$repo_zip = $repo + ".zip"
|
||||
New-Item -path ${A2_PREPARE_CAVE_DIR} `
|
||||
-name $repo -type directory | Out-Null
|
||||
if ($? -ne $true) { EXIT 1; }
|
||||
pushd .
|
||||
cd ${A2_PREPARE_CAVE_DIR}/$repo
|
||||
jar xvf ${A2_PREPARE_CAVE_DIR}/$repo_zip
|
||||
popd
|
||||
|
||||
.\cave.exe -nosplash -application org.eclipse.equinox.p2.director `
|
||||
-i $feature_group -repository "file:${A2_PREPARE_CAVE_DIR}/$repo" | Out-Host
|
||||
if ($? -ne $true) { echo "ERROR: Unable to install feature: $feature_group."; echo "FATAL: Build Failed!"; EXIT 1; }
|
||||
|
||||
Remove-Item -recurse -force ${A2_PREPARE_CAVE_DIR}/$repo
|
||||
if ($? -ne $true) { EXIT 1; }
|
||||
|
||||
pushd .
|
||||
cd plugins
|
||||
dir -rec | where { if (($_.fullname.split("\")).count -eq 7 -and `
|
||||
$_.name.equals("localization")){$_}} | ForEach-Object -process `
|
||||
{ $localizationDirectory = $_.fullname; `
|
||||
echo $localizationDirectory; `
|
||||
Copy-Item -force -recurse -path "${localizationDirectory}\*" -destination ${A2_PREPARE_CAVE_DIR}\cave\etc; `
|
||||
if ($? -ne $true) { EXIT 1; }; `
|
||||
Remove-Item -force -recurse ${localizationDirectory}; `
|
||||
if ($? -ne $true) { EXIT 1; } }
|
||||
if ($? -ne $true) { EXIT 1; }
|
||||
popd
|
||||
|
||||
echo "`n"
|
||||
}
|
||||
|
||||
pushd .
|
||||
|
||||
cd ${A2_PREPARE_CAVE_DIR}\cave
|
||||
|
||||
New-Item -path ${A2_PREPARE_CAVE_DIR}\cave `
|
||||
-name etc -type directory | Out-Null
|
||||
if ($? -ne $true) { EXIT 1; }
|
||||
|
||||
$repo_suffix = "-repo-win32.x86"
|
||||
if ("${AWIPS2_BUILD_ARCHITECTURE}" -eq "x64")
|
||||
{
|
||||
$repo_suffix = "-repo-win32.x86_64"
|
||||
}
|
||||
|
||||
echo "`n"
|
||||
$feature_list = Get-Content "${A2_PREPARE_CAVE_DIR}\features.txt"
|
||||
Write-Host Feature Count = $feature_list.count
|
||||
foreach ($feature in $feature_list)
|
||||
{
|
||||
Write-Host Installing Feature: $feature
|
||||
$feature_group = $feature + ".feature.group"
|
||||
$repo = $feature + $repo_suffix
|
||||
|
||||
installCAVERepository -feature_group "$feature_group" `
|
||||
-repo "$repo"
|
||||
}
|
||||
popd
|
||||
EXIT 0
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,94 +0,0 @@
|
|||
Common Public License Version 1.0
|
||||
|
||||
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
|
||||
|
||||
|
||||
1. DEFINITIONS
|
||||
|
||||
"Contribution" means:
|
||||
|
||||
a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
|
||||
|
||||
b) in the case of each subsequent Contributor:
|
||||
|
||||
i) changes to the Program, and
|
||||
|
||||
ii) additions to the Program;
|
||||
|
||||
where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
|
||||
|
||||
"Contributor" means any person or entity that distributes the Program.
|
||||
|
||||
"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
|
||||
|
||||
"Program" means the Contributions distributed in accordance with this Agreement.
|
||||
|
||||
"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
|
||||
|
||||
|
||||
2. GRANT OF RIGHTS
|
||||
|
||||
a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
|
||||
|
||||
b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
|
||||
|
||||
c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
|
||||
|
||||
d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
|
||||
|
||||
|
||||
3. REQUIREMENTS
|
||||
|
||||
A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
|
||||
|
||||
a) it complies with the terms and conditions of this Agreement; and
|
||||
|
||||
b) its license agreement:
|
||||
|
||||
i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
|
||||
|
||||
ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
|
||||
|
||||
iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
|
||||
|
||||
iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
|
||||
|
||||
When the Program is made available in source code form:
|
||||
|
||||
a) it must be made available under this Agreement; and
|
||||
|
||||
b) a copy of this Agreement must be included with each copy of the Program.
|
||||
|
||||
Contributors may not remove or alter any copyright notices contained within the Program.
|
||||
|
||||
Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
|
||||
|
||||
|
||||
4. COMMERCIAL DISTRIBUTION
|
||||
|
||||
Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
|
||||
|
||||
For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
|
||||
|
||||
|
||||
5. NO WARRANTY
|
||||
|
||||
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
|
||||
|
||||
|
||||
6. DISCLAIMER OF LIABILITY
|
||||
|
||||
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
|
||||
7. GENERAL
|
||||
|
||||
If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
|
||||
|
||||
If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
|
||||
|
||||
All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
|
||||
|
||||
Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
|
||||
|
||||
This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
|
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue