VLab Issue #4953 Fix pracice mode decoding of non-VTEC products

Change-Id: I0e2e9a21267e7b9e3896154587a0e53841081d56

Former-commit-id: 7a0b6b2cab [formerly 7a0b6b2cab [formerly 4cddd47d0870f4ba3474238107381693c768f6b1]]
Former-commit-id: bde8257ec3
Former-commit-id: 6f90de837d
This commit is contained in:
Ron Anderson 2014-12-17 16:15:39 -06:00
parent 9a07a64666
commit d940c33fee
4 changed files with 44 additions and 14 deletions

View file

@ -42,6 +42,7 @@
# start time from file's timestamp. # start time from file's timestamp.
# Oct 03, 2013 2402 bsteffen Make PythonDecoder more extendable. # Oct 03, 2013 2402 bsteffen Make PythonDecoder more extendable.
# Jun 10, 2014 3268 dgilling Update location of WclInfo class. # Jun 10, 2014 3268 dgilling Update location of WclInfo class.
# Dec 17, 2014 4953 randerso Fixed decoding of non-VTEC from command line
# </pre> # </pre>
# #
@ -111,10 +112,10 @@ class StdWarningDecoder():
self._timeOffset = 0 self._timeOffset = 0
#decode the command line #decode the command line
if text is None and filePath is None: if command is not None:
self._decodeCommandLine() self._decodeCommandLine()
self._rawMessage = None self._rawMessage = None
checkForWmo = False checkForWmo = True
else: else:
self._rawMessage = text self._rawMessage = text
checkForWmo = True checkForWmo = True

View file

@ -36,8 +36,13 @@
<setHeader headerName="notifygfe"> <setHeader headerName="notifygfe">
<simple>${body?.notifyGFE}</simple> <simple>${body?.notifyGFE}</simple>
</setHeader> </setHeader>
<setHeader headerName="drtstring">
<simple>${body?.drtString}</simple>
</setHeader>
<bean ref="practiceVtecDecoder" method="decode"/> <bean ref="practiceVtecDecoder" method="decode"/>
<bean ref="index" method="index"/> <bean ref="index" method="index"/>
<bean ref="processUtil" method="log"/>
<multicast parallelProcessing="false"> <multicast parallelProcessing="false">
<filter> <filter>
<simple>${header?.notifygfe.booleanValue}</simple> <simple>${header?.notifygfe.booleanValue}</simple>

View file

@ -19,7 +19,13 @@
**/ **/
package com.raytheon.uf.edex.activetable; package com.raytheon.uf.edex.activetable;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
import com.raytheon.edex.esb.Headers; import com.raytheon.edex.esb.Headers;
import com.raytheon.uf.common.activetable.ActiveTableMode; import com.raytheon.uf.common.activetable.ActiveTableMode;
@ -45,6 +51,8 @@ import com.raytheon.uf.common.time.util.TimeUtil;
* Jul 14, 2009 #2950 njensen Multiple site support * Jul 14, 2009 #2950 njensen Multiple site support
* Dec 21, 2009 #4055 njensen No site filtering * Dec 21, 2009 #4055 njensen No site filtering
* Jun 17, 2014 3296 randerso Added performance logging * Jun 17, 2014 3296 randerso Added performance logging
* Dec 09, 2014 3885 dgilling Handle offset time from camel route
* headers.
* *
* </pre> * </pre>
* *
@ -80,7 +88,7 @@ public class ActiveTableSrv {
timer.start(); timer.start();
try { try {
ActiveTable activeTable = threadLocalActiveTable.get(); ActiveTable activeTable = threadLocalActiveTable.get();
if (records != null && records.size() > 0) { if ((records != null) && (records.size() > 0)) {
activeTable.merge(ActiveTableRecord.transformFromWarnings( activeTable.merge(ActiveTableRecord.transformFromWarnings(
records, ActiveTableMode.OPERATIONAL)); records, ActiveTableMode.OPERATIONAL));
} }
@ -102,19 +110,12 @@ public class ActiveTableSrv {
*/ */
public void practiceVtecArrived(List<AbstractWarningRecord> records, public void practiceVtecArrived(List<AbstractWarningRecord> records,
Headers headers) { Headers headers) {
Integer offsetSeconds = null; int offsetSeconds = getOffsetTime((String) headers.get("drtstring"));
if (headers != null) { if ((records != null) && (records.size() > 0)) {
offsetSeconds = (Integer) headers.get("offsetseconds");
}
if (offsetSeconds == null) {
offsetSeconds = Integer.valueOf(0);
}
if (records != null && records.size() > 0) {
ActiveTable activeTable = threadLocalActiveTable.get(); ActiveTable activeTable = threadLocalActiveTable.get();
try { try {
activeTable.merge(ActiveTableRecord.transformFromWarnings( activeTable.merge(ActiveTableRecord.transformFromWarnings(
records, ActiveTableMode.PRACTICE), offsetSeconds records, ActiveTableMode.PRACTICE), offsetSeconds);
.intValue());
} catch (Throwable t) { } catch (Throwable t) {
statusHandler statusHandler
.handle(Priority.PROBLEM, .handle(Priority.PROBLEM,
@ -123,4 +124,25 @@ public class ActiveTableSrv {
} }
} }
} }
private int getOffsetTime(String drtTimeString) {
if (drtTimeString != null) {
DateFormat drtParse = new SimpleDateFormat("yyyyMMdd_HHmm");
drtParse.setTimeZone(TimeZone.getTimeZone("GMT"));
try {
Date drtTime = drtParse.parse(drtTimeString);
Date currentTime = new Date();
long diffInMillis = drtTime.getTime() - currentTime.getTime();
return (int) TimeUnit.SECONDS.convert(diffInMillis,
TimeUnit.MILLISECONDS);
} catch (ParseException e) {
statusHandler.error("Could not parse DRT time string: "
+ drtTimeString, e);
}
}
return 0;
}
} }

View file

@ -46,6 +46,8 @@ import com.raytheon.uf.edex.python.decoder.PythonDecoder;
* used for all practice VTEC products * used for all practice VTEC products
* Changed to take in the SendPracticeProductRequest * Changed to take in the SendPracticeProductRequest
* to simplify spring wiring * to simplify spring wiring
* Changed to set the filepath when calling Python decoder
* so _checkForVTEC will work
* *
* </pre> * </pre>
* *
@ -103,7 +105,7 @@ public class PracticeVtecDecoder extends PythonDecoder {
// create an argument map to run the decoder // create an argument map to run the decoder
Map<String, Object> decoderArgs = new HashMap<String, Object>(4); Map<String, Object> decoderArgs = new HashMap<String, Object>(4);
decoderArgs.put("filePath", null); decoderArgs.put("filePath", file.getAbsolutePath());
decoderArgs.put("command", sb.toString()); decoderArgs.put("command", sb.toString());
return decode(decoderArgs); return decode(decoderArgs);