From 842c3b1f7ee4df3b53c2b4b11a4b62a4d06ea5d5 Mon Sep 17 00:00:00 2001 From: tparker Date: Fri, 14 Oct 2016 17:32:38 -0800 Subject: [PATCH 01/17] Display correct network when passed a URL parameter. --- src/main/resources/html/pensive.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/resources/html/pensive.js b/src/main/resources/html/pensive.js index fd6d070..973e0eb 100644 --- a/src/main/resources/html/pensive.js +++ b/src/main/resources/html/pensive.js @@ -86,9 +86,13 @@ function init() { }); // fire subnet change trigger to get things rolling - <#if selectedNetwork??> - $("#network").val("${selectedNetwork}").prop('selected', true); - + <#if selectedNetwork??> + + param = getUrlParameter("network"); + if (param == null) { + $("#network").val("${selectedNetwork}").prop('selected', true); + } + $("#network").trigger("change"); } From 3286edb7e650b8e5f3974b85908cd7814c6177fb Mon Sep 17 00:00:00 2001 From: tparker Date: Thu, 22 Mar 2018 07:03:35 -0800 Subject: [PATCH 02/17] add seedlink support. Must still resolve dep issues --- pom.xml | 8 +++++++- src/main/java/gov/usgs/volcanoes/pensive/WaveSource.java | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2c3af53..287aa81 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ gov.usgs.volcanoes pensive - 1.3.6 + 1.4.0-SNAPSHOT jar Pensive @@ -173,6 +173,7 @@ net.sourceforge.jtransforms:jtransforms org.slf4j:* org.apache:log4j + net.alomax:* @@ -347,5 +348,10 @@ volcano-core [1.3.1,) + + net.alomax + seedlink_lite + 1.2.2 + diff --git a/src/main/java/gov/usgs/volcanoes/pensive/WaveSource.java b/src/main/java/gov/usgs/volcanoes/pensive/WaveSource.java index 01f31a0..0bbcbe0 100644 --- a/src/main/java/gov/usgs/volcanoes/pensive/WaveSource.java +++ b/src/main/java/gov/usgs/volcanoes/pensive/WaveSource.java @@ -75,6 +75,8 @@ public WaveSource(final String name, final BlockingQueue plotJobs, dsString = String.format("%s;wws:%s:%d:%d:%d", name, host, port, timeout * 1000, compress); } else if (type.equals("wsv")) { dsString = String.format("%s;ws:%s:%d:%d:1800:1000:UTC", name, host, port, timeout * 1000); + } else if (type.equals("sls")) { + dsString = String.format("%s;sls:%s:%d", name, host, port); } dataSource = DataSourceType.parseConfig(dsString); dataSource.establish(); From 6474aa33fcca6fa600a50020bb120a031ca3c077 Mon Sep 17 00:00:00 2001 From: tparker Date: Wed, 28 Mar 2018 08:28:26 -0800 Subject: [PATCH 03/17] remove usgs.jar dep --- .classpath | 2 +- .project | 6 +- .settings/org.eclipse.jdt.core.prefs | 6 +- dependency-reduced-pom.xml | 43 +++++++++- docs/README.html | 12 +++ pom.xml | 78 +++++++++++++++++-- .../gov/usgs/volcanoes/pensive/Channel.java | 6 +- .../pensive/plot/ChannelPlotter.java | 15 ++-- .../volcanoes/pensive/plot/FullPlotter.java | 6 +- .../volcanoes/pensive/plot/SubnetPlotter.java | 4 +- .../pensive/plot/ThumbnailPlotter.java | 6 +- 11 files changed, 151 insertions(+), 33 deletions(-) create mode 100644 docs/README.html diff --git a/.classpath b/.classpath index 932fd5c..49432dc 100644 --- a/.classpath +++ b/.classpath @@ -6,7 +6,7 @@ - + diff --git a/.project b/.project index 57c151d..e6b91b6 100644 --- a/.project +++ b/.project @@ -11,17 +11,17 @@ - org.eclipse.m2e.core.maven2Builder + ch.acanda.eclipse.pmd.builder.PMDBuilder - ch.acanda.eclipse.pmd.builder.PMDBuilder + net.sf.eclipsecs.core.CheckstyleBuilder - net.sf.eclipsecs.core.CheckstyleBuilder + org.eclipse.m2e.core.maven2Builder diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 8e4055a..107056a 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,12 +1,12 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.compliance=1.6 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.source=1.5 +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml index 8bd3f86..90b7aaa 100644 --- a/dependency-reduced-pom.xml +++ b/dependency-reduced-pom.xml @@ -4,7 +4,7 @@ gov.usgs.volcanoes pensive Pensive - 1.3.5 + 1.4.0-SNAPSHOT http://volcanoes.usgs.gov/software/pensive GitHub @@ -99,6 +99,30 @@ freemarker/** + + com.jgoodies:jgoodies-common + + ** + + + + com.jgoodies:jgoodies-forms + + ** + + + + com.jgoodies:jgoodies-looks + + ** + + + + opensymphony:oscache + + ** + + @@ -108,6 +132,11 @@ net.sourceforge.jtransforms:jtransforms org.slf4j:* org.apache:log4j + net.alomax:* + com.jgoodies:* + edu.iris:JavaSeedLite + opensymphony:oscache + edu.sc.seis:seisFile @@ -194,6 +223,14 @@ http://volcanoes.usgs.gov/software/maven2/ + + + edu.iris + seedCodec + 1.0.10 + compile + + @@ -273,9 +310,11 @@ + 1.6 src/main/resources/Version.java.template - src/main/java/gov/usgs/volcanoes/pensive/Version.java + 1.6 UTF-8 + src/main/java/gov/usgs/volcanoes/pensive/Version.java diff --git a/docs/README.html b/docs/README.html new file mode 100644 index 0000000..db87276 --- /dev/null +++ b/docs/README.html @@ -0,0 +1,12 @@ +

Pensive

+ +

Build Status

+ +

A Java application designed to allow visualizing, in near real-time, spectral content of continuous seismic waveforms from a number of sensors deployed on active volcanoes. The application was designed with ease of use in mind. Pensive strives to use sensible defaults in all areas while proving an expressive configuration file to permit fine-grained control when needed.

+ +

Requirements

+ +
    +
  • Java SE runtime. Pensive has been tested with Java virtual machines from Oracle, OpenJDK, and Apple. Any JVM that supports Java 7 or later should do the trick.
  • +
  • Source of wave data. Pensive can request data using either the Winston wave server protocol or the Earthworm WaveServerV protocol.
  • +
diff --git a/pom.xml b/pom.xml index 287aa81..0c652b9 100644 --- a/pom.xml +++ b/pom.xml @@ -13,6 +13,8 @@ UTF-8 src/main/resources/Version.java.template src/main/java/gov/usgs/volcanoes/pensive/Version.java + 1.6 + 1.6 @@ -164,6 +166,30 @@ freemarker/** + + com.jgoodies:jgoodies-common + + ** + + + + com.jgoodies:jgoodies-forms + + ** + + + + com.jgoodies:jgoodies-looks + + ** + + + + opensymphony:oscache + + ** + + @@ -174,6 +200,10 @@ org.slf4j:* org.apache:log4j net.alomax:* + com.jgoodies:* + edu.iris:JavaSeedLite + opensymphony:oscache + edu.sc.seis:seisFile @@ -333,15 +363,10 @@ log4j 1.2.13 - - gov.usgs.volcanoes - usgs - 1.3.1 - gov.usgs.volcanoes swarm - 2.5-SNAPSHOT + 2.8.3 gov.usgs.volcanoes @@ -353,5 +378,46 @@ seedlink_lite 1.2.2 + + com.jgoodies + jgoodies-common + 1.8.1 + + + com.jgoodies + jgoodies-forms + 1.8.0 + + + com.jgoodies + jgoodies-looks + 2.6.0 + + + edu.iris + JavaSeedLite + 1.0 + + + edu.iris + seedCodec + 1.0.10 + + + opensymphony + oscache + 2.4.1 + + + javax.jms + jms + + + + + edu.sc.seis + seisFile + 1.8.0-JDK7 + diff --git a/src/main/java/gov/usgs/volcanoes/pensive/Channel.java b/src/main/java/gov/usgs/volcanoes/pensive/Channel.java index 806d0e3..8df3b5b 100644 --- a/src/main/java/gov/usgs/volcanoes/pensive/Channel.java +++ b/src/main/java/gov/usgs/volcanoes/pensive/Channel.java @@ -6,10 +6,10 @@ package gov.usgs.volcanoes.pensive; -import gov.usgs.plot.data.SliceWave; -import gov.usgs.plot.data.Wave; -import gov.usgs.plot.render.Renderer; import gov.usgs.volcanoes.core.configfile.ConfigFile; +import gov.usgs.volcanoes.core.data.SliceWave; +import gov.usgs.volcanoes.core.data.Wave; +import gov.usgs.volcanoes.core.legacy.plot.render.Renderer; import gov.usgs.volcanoes.core.time.J2kSec; import gov.usgs.volcanoes.core.time.Time; import gov.usgs.volcanoes.pensive.plot.ChannelPlotter; diff --git a/src/main/java/gov/usgs/volcanoes/pensive/plot/ChannelPlotter.java b/src/main/java/gov/usgs/volcanoes/pensive/plot/ChannelPlotter.java index afbc5ed..8a55ce0 100644 --- a/src/main/java/gov/usgs/volcanoes/pensive/plot/ChannelPlotter.java +++ b/src/main/java/gov/usgs/volcanoes/pensive/plot/ChannelPlotter.java @@ -5,14 +5,15 @@ package gov.usgs.volcanoes.pensive.plot; -import gov.usgs.plot.data.SliceWave; -import gov.usgs.plot.data.Spectrogram; -import gov.usgs.plot.render.BasicFrameRenderer; -import gov.usgs.plot.render.TextRenderer; -import gov.usgs.plot.render.wave.MinuteMarkingWaveRenderer; -import gov.usgs.plot.render.wave.SliceWaveRenderer; -import gov.usgs.plot.render.wave.SpectrogramRenderer; + import gov.usgs.volcanoes.core.configfile.ConfigFile; +import gov.usgs.volcanoes.core.data.SliceWave; +import gov.usgs.volcanoes.core.data.Spectrogram; +import gov.usgs.volcanoes.core.legacy.plot.render.BasicFrameRenderer; +import gov.usgs.volcanoes.core.legacy.plot.render.TextRenderer; +import gov.usgs.volcanoes.core.legacy.plot.render.wave.MinuteMarkingWaveRenderer; +import gov.usgs.volcanoes.core.legacy.plot.render.wave.SliceWaveRenderer; +import gov.usgs.volcanoes.core.legacy.plot.render.wave.SpectrogramRenderer; import gov.usgs.volcanoes.core.time.J2kSec; import gov.usgs.volcanoes.core.time.Time; diff --git a/src/main/java/gov/usgs/volcanoes/pensive/plot/FullPlotter.java b/src/main/java/gov/usgs/volcanoes/pensive/plot/FullPlotter.java index 9b8ef4d..9d464cc 100644 --- a/src/main/java/gov/usgs/volcanoes/pensive/plot/FullPlotter.java +++ b/src/main/java/gov/usgs/volcanoes/pensive/plot/FullPlotter.java @@ -6,10 +6,10 @@ package gov.usgs.volcanoes.pensive.plot; -import gov.usgs.plot.render.TextRenderer; -import gov.usgs.plot.render.wave.SliceWaveRenderer; -import gov.usgs.plot.render.wave.SpectrogramRenderer; import gov.usgs.volcanoes.core.configfile.ConfigFile; +import gov.usgs.volcanoes.core.legacy.plot.render.TextRenderer; +import gov.usgs.volcanoes.core.legacy.plot.render.wave.SliceWaveRenderer; +import gov.usgs.volcanoes.core.legacy.plot.render.wave.SpectrogramRenderer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/gov/usgs/volcanoes/pensive/plot/SubnetPlotter.java b/src/main/java/gov/usgs/volcanoes/pensive/plot/SubnetPlotter.java index 1a0b0c3..ab69cd5 100644 --- a/src/main/java/gov/usgs/volcanoes/pensive/plot/SubnetPlotter.java +++ b/src/main/java/gov/usgs/volcanoes/pensive/plot/SubnetPlotter.java @@ -5,9 +5,9 @@ package gov.usgs.volcanoes.pensive.plot; -import gov.usgs.plot.Plot; -import gov.usgs.plot.PlotException; import gov.usgs.volcanoes.core.configfile.ConfigFile; +import gov.usgs.volcanoes.core.legacy.plot.Plot; +import gov.usgs.volcanoes.core.legacy.plot.PlotException; import gov.usgs.volcanoes.core.time.Time; import gov.usgs.volcanoes.pensive.Channel; import gov.usgs.volcanoes.swarm.data.SeismicDataSource; diff --git a/src/main/java/gov/usgs/volcanoes/pensive/plot/ThumbnailPlotter.java b/src/main/java/gov/usgs/volcanoes/pensive/plot/ThumbnailPlotter.java index 4956d1f..6dffdc5 100644 --- a/src/main/java/gov/usgs/volcanoes/pensive/plot/ThumbnailPlotter.java +++ b/src/main/java/gov/usgs/volcanoes/pensive/plot/ThumbnailPlotter.java @@ -6,10 +6,10 @@ package gov.usgs.volcanoes.pensive.plot; -import gov.usgs.plot.render.TextRenderer; -import gov.usgs.plot.render.wave.SliceWaveRenderer; -import gov.usgs.plot.render.wave.SpectrogramRenderer; import gov.usgs.volcanoes.core.configfile.ConfigFile; +import gov.usgs.volcanoes.core.legacy.plot.render.TextRenderer; +import gov.usgs.volcanoes.core.legacy.plot.render.wave.SliceWaveRenderer; +import gov.usgs.volcanoes.core.legacy.plot.render.wave.SpectrogramRenderer; import java.awt.Dimension; import java.awt.Font; From 0f0cc23249db8993f654d44510d85c02a2ceba18 Mon Sep 17 00:00:00 2001 From: tparker Date: Wed, 28 Mar 2018 20:06:30 -0800 Subject: [PATCH 04/17] checkpoint --- pom.xml | 2 +- .../gov/usgs/volcanoes/pensive/Channel.java | 16 +- .../volcanoes/pensive/SeedLinkClient.java | 224 ++++++++++++++++++ .../volcanoes/pensive/SeedLinkSource.java | 60 +++++ .../usgs/volcanoes/pensive/WaveSource.java | 7 +- 5 files changed, 302 insertions(+), 7 deletions(-) create mode 100644 src/main/java/gov/usgs/volcanoes/pensive/SeedLinkClient.java create mode 100644 src/main/java/gov/usgs/volcanoes/pensive/SeedLinkSource.java diff --git a/pom.xml b/pom.xml index 0c652b9..c41ecf1 100644 --- a/pom.xml +++ b/pom.xml @@ -366,7 +366,7 @@ gov.usgs.volcanoes swarm - 2.8.3 + 2.8.4-SNAPSHOT gov.usgs.volcanoes diff --git a/src/main/java/gov/usgs/volcanoes/pensive/Channel.java b/src/main/java/gov/usgs/volcanoes/pensive/Channel.java index 8df3b5b..f3f15c0 100644 --- a/src/main/java/gov/usgs/volcanoes/pensive/Channel.java +++ b/src/main/java/gov/usgs/volcanoes/pensive/Channel.java @@ -1,22 +1,25 @@ /** - * I waive copyright and related rights in the this work worldwide - * through the CC0 1.0 Universal public domain dedication. - * https://creativecommons.org/publicdomain/zero/1.0/legalcode + * I waive copyright and related rights in the this work worldwide through the CC0 1.0 Universal + * public domain dedication. https://creativecommons.org/publicdomain/zero/1.0/legalcode */ package gov.usgs.volcanoes.pensive; import gov.usgs.volcanoes.core.configfile.ConfigFile; +import gov.usgs.volcanoes.core.data.Scnl; import gov.usgs.volcanoes.core.data.SliceWave; import gov.usgs.volcanoes.core.data.Wave; import gov.usgs.volcanoes.core.legacy.plot.render.Renderer; import gov.usgs.volcanoes.core.time.J2kSec; import gov.usgs.volcanoes.core.time.Time; +import gov.usgs.volcanoes.core.time.TimeSpan; +import gov.usgs.volcanoes.core.util.UtilException; import gov.usgs.volcanoes.pensive.plot.ChannelPlotter; import gov.usgs.volcanoes.pensive.plot.FullPlotter; import gov.usgs.volcanoes.pensive.plot.SubnetPlotter; import gov.usgs.volcanoes.pensive.plot.ThumbnailPlotter; import gov.usgs.volcanoes.swarm.data.SeismicDataSource; +import gov.usgs.volcanoes.swarm.data.seedlink.SeedLinkSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -76,6 +79,7 @@ public class Channel { /** data file timestamp format. */ private final String dataTimestampFormat; + /** * Class constructor. * @@ -116,7 +120,11 @@ public Channel(final String channel, final int index, final Dimension plotDimens public void updateWave(final long plotEndMs, final SeismicDataSource dataSource) { final double t2 = J2kSec.fromEpoch(plotEndMs); final double t1 = t2 - SubnetPlotter.DURATION_S; - final Wave w = dataSource.getWave(name.replace('_', ' '), t1, t2); + + Wave w2; + w2 = dataSource.getWave(name.replace('_', ' '), t1, t2); + + final Wave w = w2; if (w != null && w.numSamples() > 0) { w.detrend(); w.removeMean(); diff --git a/src/main/java/gov/usgs/volcanoes/pensive/SeedLinkClient.java b/src/main/java/gov/usgs/volcanoes/pensive/SeedLinkClient.java new file mode 100644 index 0000000..eccf0f8 --- /dev/null +++ b/src/main/java/gov/usgs/volcanoes/pensive/SeedLinkClient.java @@ -0,0 +1,224 @@ +package gov.usgs.volcanoes.pensive; + +import edu.iris.Fissures.seed.container.Blockette; +import edu.iris.Fissures.seed.container.Btime; +import edu.iris.Fissures.seed.container.Waveform; +import edu.iris.Fissures.seed.exception.SeedException; + +import gov.usgs.volcanoes.core.data.Scnl; +import gov.usgs.volcanoes.core.data.Wave; +import gov.usgs.volcanoes.core.time.J2kSec; +import gov.usgs.volcanoes.core.time.Time; +import gov.usgs.volcanoes.core.time.TimeSpan; + +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.TimeZone; + +import nl.knmi.orfeus.SLClient; +import nl.knmi.orfeus.seedlink.SLPacket; +import nl.knmi.orfeus.seedlink.SeedLinkException; + +public class SeedLinkClient extends SLClient { + + static final String DATE_FORMAT = "yyyy,MM,dd,HH,mm,ss"; + + private List waveList; + + public SeedLinkClient(String host, int port) { + super(); + + slconn.setNetDelay(10); + slconn.setNetTimout(30); + slconn.setSLAddress(host + ":" + port); + } + + public boolean packetHandler(int count, SLPacket slpack) throws Exception { + System.err.println("TOMP SAYS: " + slpack); + if (slpack == null || slpack == SLPacket.SLNOPACKET || slpack == SLPacket.SLERROR) { + return false; // do not close the connection + } + + // get basic packet info + final int type = slpack.getType(); + + // process INFO packets here + // return if unterminated + if (type == SLPacket.TYPE_SLINF) { + return false; // do not close the connection + } + // process message and return if terminated + if (type == SLPacket.TYPE_SLINFT) { + // LOGGER.debug("received INFO packet:\n{}", slconn.getInfoString()); + if (infolevel != null) { + return true; // close the connection + } else { + return false; // do not close the connection + } + } + + // if here, must be a blockette + final Blockette blockette = slpack.getBlockette(); + final Waveform waveform = blockette.getWaveform(); + // if waveform and FSDH + if (waveform != null && blockette.getType() == 999) { + // convert waveform to wave (also done in + // gov.usgs.swarm.data.FileDataSource) + try { + final Btime bTime = getBtime(blockette, 8); + final double factor = getDouble(blockette, 10); + final double multiplier = getDouble(blockette, 11); + final double startTime = J2kSec.fromDate(btimeToDate(bTime)); + final double samplingRate = getSampleRate(factor, multiplier); + final Wave wave = new Wave(); + wave.setSamplingRate(samplingRate); + wave.setStartTime(startTime); + wave.buffer = waveform.getDecodedIntegers(); + wave.register(); + System.err.println("TOMP SAYS: samp " + wave.numSamples()); + waveList.add(wave); + } catch (Exception ex) { + ex.printStackTrace(); + return true; // close the connection + } + } + return false; // do not close the connection + } + + /** + * taken from swarm + */ + + private Date btimeToDate(Btime btime) { + Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); + cal.set(Calendar.YEAR, btime.getYear()); + cal.set(Calendar.DAY_OF_YEAR, btime.getDayOfYear()); + cal.set(Calendar.HOUR_OF_DAY, btime.getHour()); + cal.set(Calendar.MINUTE, btime.getMinute()); + cal.set(Calendar.SECOND, btime.getSecond()); + cal.set(Calendar.MILLISECOND, btime.getTenthMill() / 10); + return cal.getTime(); + } + + /** + * taken from swarm + */ + private static Btime getBtime(Blockette blockette, int fieldNum) throws SeedException { + Object obj = blockette.getFieldVal(fieldNum); + if (obj instanceof Btime) { + return (Btime) obj; + } + return new Btime(obj.toString()); + } + + /** + * taken from swarm + */ + private static double getDouble(Blockette blockette, int fieldNum) throws SeedException { + Object obj = blockette.getFieldVal(fieldNum); + if (obj instanceof Number) { + return ((Number) obj).doubleValue(); + } + return Double.parseDouble(obj.toString()); + } + + /* + * taken from Robert Casey's PDCC seed code. + */ + private float getSampleRate(double factor, double multiplier) { + float sampleRate = (float) 10000.0; // default (impossible) value; + if ((factor * multiplier) != 0.0) { // in the case of log records + sampleRate = (float) (java.lang.Math.pow(java.lang.Math.abs(factor), + (factor / java.lang.Math.abs(factor))) + * java.lang.Math.pow(java.lang.Math.abs(multiplier), + (multiplier / java.lang.Math.abs(multiplier)))); + } + return sampleRate; + } + + public Wave getWave(Scnl scnl, TimeSpan timeSpan) { + waveList = new ArrayList(); + + slconn.setBeginTime(Time.format(DATE_FORMAT, timeSpan.startTime)); + slconn.setEndTime(Time.format(DATE_FORMAT, timeSpan.endTime)); + + String selector = + String.format("%s_%s:%s%s.d", scnl.network, scnl.station, scnl.location, scnl.channel); + multiselect = selector; + + System.err.println("TOMP SAYS: " + selector); + try { + edu.iris.Fissures.seed.container.BlocketteDecoratorFactory.reset(); + init(); + run(); + } catch (UnknownHostException e) { + e.printStackTrace(); + } catch (SeedLinkException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + +// slconn.disconnect(); +// slconn.terminate(); + + return Wave.join(waveList); + } + + /** + * + * Start this SLCient. + * + * @throws Exception + * @throws SeedLinkException on error. + * + */ + public void run() throws Exception { +System.err.println("TOM SAYS RUNNING"); + if (infolevel != null) { + slconn.requestInfo(infolevel); + } + + // Loop with the connection manager + SLPacket slpack = null; + int count = 1; + while ((slpack = slconn.collect()) != null) { + System.err.println("TOM SAYS got packet"); + + if (slpack == SLPacket.SLTERMINATE) { + break; + } + + try { + + // do something with packet + boolean terminate = packetHandler(count, slpack); + if (terminate) { + break; + } + + } catch (SeedLinkException sle) { + System.out.print(CLASS_NAME + ": " + sle); + } + + // 20081127 AJL - test modification to prevent "Error: out of java heap space" problem identified by pwiejacz@igf.edu.pl + if (count % 200 == 0) { + edu.iris.Fissures.seed.container.BlocketteDecoratorFactory.reset(); + } + if (count >= Integer.MAX_VALUE) { + count = 1; + System.out.println("DEBUG INFO: " + CLASS_NAME + ": Packet count reset to 1"); + } else { + count++; + } + } +System.err.println("TOMP SAYS DONE"); + // Close the SeedLinkConnection +// slconn.close(); + + } + +} diff --git a/src/main/java/gov/usgs/volcanoes/pensive/SeedLinkSource.java b/src/main/java/gov/usgs/volcanoes/pensive/SeedLinkSource.java new file mode 100644 index 0000000..ff60d6d --- /dev/null +++ b/src/main/java/gov/usgs/volcanoes/pensive/SeedLinkSource.java @@ -0,0 +1,60 @@ +package gov.usgs.volcanoes.pensive; + +import gov.usgs.volcanoes.core.data.HelicorderData; +import gov.usgs.volcanoes.core.data.Scnl; +import gov.usgs.volcanoes.core.data.Wave; +import gov.usgs.volcanoes.core.time.J2kSec; +import gov.usgs.volcanoes.core.time.TimeSpan; +import gov.usgs.volcanoes.core.util.UtilException; +import gov.usgs.volcanoes.swarm.data.GulperListener; +import gov.usgs.volcanoes.swarm.data.SeismicDataSource; + +import java.io.File; +import java.util.List; + +public class SeedLinkSource extends SeismicDataSource { + + private SeedLinkClient seedLinkClient; + private String host; + private int port; + + public SeedLinkSource(String host, int port) { + super(); + seedLinkClient = new SeedLinkClient(host, port); + } + + @Override + public List getChannels() { + throw new UnsupportedOperationException(); + } + + @Override + public Wave getWave(String station, double t1, double t2) { + Scnl scnl; + try { + scnl = Scnl.parse(station, " "); + } catch (UtilException e) { + e.printStackTrace(); + return null; + } + TimeSpan timeSpan = new TimeSpan(J2kSec.asEpoch(t1), J2kSec.asEpoch(t2)); + + return seedLinkClient.getWave(scnl, timeSpan); + } + + @Override + public HelicorderData getHelicorder(String station, double t1, double t2, GulperListener gl) { + throw new UnsupportedOperationException(); + } + + @Override + public String toConfigString() { + throw new UnsupportedOperationException(); + } + + @Override + public void parse(String params) { + throw new UnsupportedOperationException(); + } + +} diff --git a/src/main/java/gov/usgs/volcanoes/pensive/WaveSource.java b/src/main/java/gov/usgs/volcanoes/pensive/WaveSource.java index 0bbcbe0..ad91fc8 100644 --- a/src/main/java/gov/usgs/volcanoes/pensive/WaveSource.java +++ b/src/main/java/gov/usgs/volcanoes/pensive/WaveSource.java @@ -73,12 +73,15 @@ public WaveSource(final String name, final BlockingQueue plotJobs, String dsString = null; if (type.equals("wws")) { dsString = String.format("%s;wws:%s:%d:%d:%d", name, host, port, timeout * 1000, compress); + dataSource = DataSourceType.parseConfig(dsString); } else if (type.equals("wsv")) { dsString = String.format("%s;ws:%s:%d:%d:1800:1000:UTC", name, host, port, timeout * 1000); + dataSource = DataSourceType.parseConfig(dsString); } else if (type.equals("sls")) { - dsString = String.format("%s;sls:%s:%d", name, host, port); + dataSource = new SeedLinkSource(host, port); + } else { + throw new RuntimeException("Unknown wave server type"); } - dataSource = DataSourceType.parseConfig(dsString); dataSource.establish(); dataSource.setUseCache(false); } From 5c8df58c14537dc191da0a1bdeacb8bc73179dea Mon Sep 17 00:00:00 2001 From: Tom Parker Date: Fri, 21 Dec 2018 08:38:18 -0900 Subject: [PATCH 05/17] tweak log4j dep --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index c41ecf1..f3d6d5d 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ jar Pensive - http://volcanoes.usgs.gov/software/pensive + https://volcanoes.usgs.gov/software/pensive UTF-8 src/main/resources/Version.java.template @@ -328,7 +328,7 @@ true - http://volcanoes.usgs.gov/software/maven2/ + https://volcanoes.usgs.gov/software/maven2/ @@ -359,7 +359,7 @@ 1.7.1 - org.apache + log4j log4j 1.2.13 From 68e348d48ad7c2ce4ae3bbb8f4c7892c41307964 Mon Sep 17 00:00:00 2001 From: Tom Parker Date: Fri, 21 Dec 2018 08:38:32 -0900 Subject: [PATCH 06/17] tweak volcano-core dep --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f3d6d5d..a2af6be 100644 --- a/pom.xml +++ b/pom.xml @@ -371,7 +371,7 @@ gov.usgs.volcanoes volcano-core - [1.3.1,) + [1.4.7,) net.alomax From b0097437b43149290930971bfc8cf680ddf5e2e5 Mon Sep 17 00:00:00 2001 From: Tom Parker Date: Fri, 21 Dec 2018 08:40:37 -0900 Subject: [PATCH 07/17] remove args test. Noi longer needed --- .../usgs/volcanoes/pensive/args/ArgsTest.java | 50 ------------------- 1 file changed, 50 deletions(-) delete mode 100644 src/test/java/gov/usgs/volcanoes/pensive/args/ArgsTest.java diff --git a/src/test/java/gov/usgs/volcanoes/pensive/args/ArgsTest.java b/src/test/java/gov/usgs/volcanoes/pensive/args/ArgsTest.java deleted file mode 100644 index dd6af59..0000000 --- a/src/test/java/gov/usgs/volcanoes/pensive/args/ArgsTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package gov.usgs.volcanoes.pensive.args; - -import static org.junit.Assert.assertEquals; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.TimeZone; - -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; - -import com.martiansoftware.jsap.JSAPException; - -import gov.usgs.volcanoes.pensive.PensiveArgs; - -public class ArgsTest { - - private static final String START_DATE = "201510110000"; - private static final String END_DATE = "201510120000"; - - PensiveArgs args; - String[] commandLineArgs = { "-s", START_DATE, "-e", END_DATE }; - SimpleDateFormat format; - - @Before - public void setup() throws Exception { - - args = new PensiveArgs(commandLineArgs); - format = new SimpleDateFormat(PensiveArgs.INPUT_TIME_FORMAT); - format.setTimeZone(TimeZone.getTimeZone("UTC")); - } - - @Test - public void startTimeArg() throws ParseException { - long givenTime = format.parse(START_DATE).getTime(); - long derivedTime = args.startTime; - - assertEquals(derivedTime, givenTime); - } - - @Test - public void endTimeArg() throws ParseException { - long givenTime = format.parse(END_DATE).getTime(); - long derivedTime = args.endTime; - - assertEquals(derivedTime, givenTime); - } - -} From 0cc31b68702dbc57cfe8413725da7a78f940c7ad Mon Sep 17 00:00:00 2001 From: Tom Parker Date: Fri, 21 Dec 2018 12:35:15 -0900 Subject: [PATCH 08/17] Tweak command line arg processing --- .settings/org.eclipse.core.resources.prefs | 1 - .settings/org.eclipse.jdt.core.prefs | 315 ++++++++++++++++++ .settings/org.eclipse.jdt.ui.prefs | 64 ++++ pom.xml | 4 +- .../gov/usgs/volcanoes/pensive/Pensive.java | 28 +- .../usgs/volcanoes/pensive/PensiveArgs.java | 42 ++- 6 files changed, 428 insertions(+), 26 deletions(-) diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index 839d647..abdea9a 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -1,5 +1,4 @@ eclipse.preferences.version=1 encoding//src/main/java=UTF-8 encoding//src/main/resources=UTF-8 -encoding//src/test/java=UTF-8 encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 107056a..2cf6456 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,4 +1,14 @@ eclipse.preferences.version=1 +org.eclipse.jdt.core.codeComplete.argumentPrefixes= +org.eclipse.jdt.core.codeComplete.argumentSuffixes= +org.eclipse.jdt.core.codeComplete.fieldPrefixes= +org.eclipse.jdt.core.codeComplete.fieldSuffixes= +org.eclipse.jdt.core.codeComplete.localPrefixes= +org.eclipse.jdt.core.codeComplete.localSuffixes= +org.eclipse.jdt.core.codeComplete.staticFieldPrefixes= +org.eclipse.jdt.core.codeComplete.staticFieldSuffixes= +org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes= +org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes= org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve @@ -10,3 +20,308 @@ org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.source=1.6 +org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=16 +org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 +org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 +org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 +org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=0 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=0 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=0 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=2 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=false +org.eclipse.jdt.core.formatter.comment.format_block_comments=true +org.eclipse.jdt.core.formatter.comment.format_header=true +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false +org.eclipse.jdt.core.formatter.comment.format_line_comments=true +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false +org.eclipse.jdt.core.formatter.comment.indent_root_tags=true +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert +org.eclipse.jdt.core.formatter.comment.line_length=100 +org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=2 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true +org.eclipse.jdt.core.formatter.indentation.size=4 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.join_lines_in_comments=false +org.eclipse.jdt.core.formatter.join_wrapped_lines=false +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.lineSplit=100 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=3 +org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false +org.eclipse.jdt.core.formatter.tabulation.char=space +org.eclipse.jdt.core.formatter.tabulation.size=2 +org.eclipse.jdt.core.formatter.use_on_off_tags=false +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false +org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true +org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true +org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true +org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true +org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs index de57229..a0f60c7 100644 --- a/.settings/org.eclipse.jdt.ui.prefs +++ b/.settings/org.eclipse.jdt.ui.prefs @@ -1,5 +1,69 @@ +cleanup.add_default_serial_version_id=true +cleanup.add_generated_serial_version_id=false +cleanup.add_missing_annotations=true +cleanup.add_missing_deprecated_annotations=true +cleanup.add_missing_methods=false +cleanup.add_missing_nls_tags=false +cleanup.add_missing_override_annotations=true +cleanup.add_missing_override_annotations_interface_methods=true +cleanup.add_serial_version_id=false +cleanup.always_use_blocks=true +cleanup.always_use_parentheses_in_expressions=false +cleanup.always_use_this_for_non_static_field_access=false +cleanup.always_use_this_for_non_static_method_access=false +cleanup.convert_functional_interfaces=false +cleanup.convert_to_enhanced_for_loop=false +cleanup.correct_indentation=false +cleanup.format_source_code=false +cleanup.format_source_code_changes_only=false +cleanup.insert_inferred_type_arguments=false +cleanup.make_local_variable_final=true +cleanup.make_parameters_final=false +cleanup.make_private_fields_final=true +cleanup.make_type_abstract_if_missing_method=false +cleanup.make_variable_declarations_final=false +cleanup.never_use_blocks=false +cleanup.never_use_parentheses_in_expressions=true +cleanup.organize_imports=false +cleanup.qualify_static_field_accesses_with_declaring_class=false +cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true +cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true +cleanup.qualify_static_member_accesses_with_declaring_class=true +cleanup.qualify_static_method_accesses_with_declaring_class=false +cleanup.remove_private_constructors=true +cleanup.remove_redundant_type_arguments=false +cleanup.remove_trailing_whitespaces=false +cleanup.remove_trailing_whitespaces_all=true +cleanup.remove_trailing_whitespaces_ignore_empty=false +cleanup.remove_unnecessary_casts=true +cleanup.remove_unnecessary_nls_tags=true +cleanup.remove_unused_imports=true +cleanup.remove_unused_local_variables=false +cleanup.remove_unused_private_fields=true +cleanup.remove_unused_private_members=false +cleanup.remove_unused_private_methods=true +cleanup.remove_unused_private_types=true +cleanup.sort_members=false +cleanup.sort_members_all=false +cleanup.use_anonymous_class_creation=false +cleanup.use_blocks=false +cleanup.use_blocks_only_for_return_and_throw=false +cleanup.use_lambda=true +cleanup.use_parentheses_in_expressions=false +cleanup.use_this_for_non_static_field_access=false +cleanup.use_this_for_non_static_field_access_only_if_necessary=true +cleanup.use_this_for_non_static_method_access=false +cleanup.use_this_for_non_static_method_access_only_if_necessary=true +cleanup_profile=org.eclipse.jdt.ui.default.eclipse_clean_up_profile +cleanup_settings_version=2 eclipse.preferences.version=1 +formatter_profile=_GoogleStyle +formatter_settings_version=13 +org.eclipse.jdt.ui.exception.name=e +org.eclipse.jdt.ui.gettersetter.use.is=true org.eclipse.jdt.ui.ignorelowercasenames=true org.eclipse.jdt.ui.importorder=com;edu;gov;org;java;javax; +org.eclipse.jdt.ui.keywordthis=false org.eclipse.jdt.ui.ondemandthreshold=99 +org.eclipse.jdt.ui.overrideannotation=true org.eclipse.jdt.ui.staticondemandthreshold=99 diff --git a/pom.xml b/pom.xml index a2af6be..1c00c55 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ gov.usgs.volcanoes pensive - 1.4.0-SNAPSHOT + 1.4.1 jar Pensive @@ -155,7 +155,7 @@ true - org.apache:log4j + log4j:log4j org/apache/log4j/** diff --git a/src/main/java/gov/usgs/volcanoes/pensive/Pensive.java b/src/main/java/gov/usgs/volcanoes/pensive/Pensive.java index 86c047f..3aa83a1 100644 --- a/src/main/java/gov/usgs/volcanoes/pensive/Pensive.java +++ b/src/main/java/gov/usgs/volcanoes/pensive/Pensive.java @@ -11,6 +11,7 @@ import gov.usgs.volcanoes.pensive.schedule.BackfillPlotScheduler; import gov.usgs.volcanoes.pensive.schedule.RealtimePlotScheduler; +import org.apache.log4j.Level; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -53,7 +54,8 @@ public class Pensive { /** * Class constructor. * - * @param configFile my config file + * @param configFile + * my config file */ public Pensive(final ConfigFile configFile) { @@ -72,9 +74,12 @@ public Pensive(final ConfigFile configFile) { /** * Class constructor used for back-filling. * - * @param configFile my config file - * @param startTime time of first plot - * @param endTime time of last plot. May be in the future. + * @param configFile + * my config file + * @param startTime + * time of first plot + * @param endTime + * time of last plot. May be in the future. */ public Pensive(final ConfigFile configFile, final Date startTime, final Date endTime) { super(); @@ -235,8 +240,10 @@ public void stop() { /** * Where it all begins. * - * @param args command line args - * @throws Exception when things go wrong + * @param args + * command line args + * @throws Exception + * when things go wrong */ public static void main(final String[] args) throws Exception { final PensiveArgs config = new PensiveArgs(args); @@ -244,11 +251,16 @@ public static void main(final String[] args) throws Exception { ConfigFile cf = null; cf = new ConfigFile(config.configFileName); if (!cf.wasSuccessfullyRead()) { - LOGGER.error("Couldn't find config file " + config.configFileName - + ". Use '-c' to create an example config."); + LOGGER.error( + "Couldn't find config file " + config.configFileName + + ". Use '-c' to create an example config."); System.exit(1); } + if (config.squelchHTML) { + cf.put("writeHtml", "false", false); + } + final Pensive pensive = new Pensive(cf); if (config.startTime < 0) { pensive.createRealtimePlotSchedulers(); diff --git a/src/main/java/gov/usgs/volcanoes/pensive/PensiveArgs.java b/src/main/java/gov/usgs/volcanoes/pensive/PensiveArgs.java index 7345834..50363d7 100644 --- a/src/main/java/gov/usgs/volcanoes/pensive/PensiveArgs.java +++ b/src/main/java/gov/usgs/volcanoes/pensive/PensiveArgs.java @@ -8,14 +8,17 @@ import com.martiansoftware.jsap.JSAPResult; import com.martiansoftware.jsap.Parameter; +import com.martiansoftware.jsap.Switch; import gov.usgs.volcanoes.core.args.Args; import gov.usgs.volcanoes.core.args.Arguments; import gov.usgs.volcanoes.core.args.decorator.ConfigFileArg; import gov.usgs.volcanoes.core.args.decorator.CreateConfigArg; -import gov.usgs.volcanoes.core.args.decorator.DateRangeArg; +import gov.usgs.volcanoes.core.args.decorator.TimeSpanArg; import gov.usgs.volcanoes.core.args.decorator.VerboseArg; +import gov.usgs.volcanoes.core.time.TimeSpan; +import org.apache.log4j.Level; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,7 +41,9 @@ public class PensiveArgs { /** format of time on cmd line */ public static final String INPUT_TIME_FORMAT = "yyyyMMddHHmm"; - private static final Parameter[] PARAMETERS = new Parameter[] {}; + private static final Parameter[] PARAMETERS = new Parameter[] { + new Switch("squelchHTML", 's', "squelchHTML", "Produce images only, no HTML."), + }; /** If true, log more. */ public final boolean verbose; @@ -49,6 +54,9 @@ public class PensiveArgs { /** Time of last plot. May be in the future. */ public final long endTime; + /** squelch HTML. */ + public final boolean squelchHTML; + /** my config file. */ public final String configFileName; @@ -62,35 +70,39 @@ public PensiveArgs(final String[] commandLineArgs) throws Exception { args = new Args(PROGRAM_NAME, EXPLANATION, PARAMETERS); args = new ConfigFileArg(DEFAULT_CONFIG_FILENAME, args); args = new CreateConfigArg(EXAMPLE_CONFIG_FILENAME, args); - args = new DateRangeArg(INPUT_TIME_FORMAT, args); + args = new TimeSpanArg(INPUT_TIME_FORMAT, false, args); args = new VerboseArg(args); JSAPResult jsapResult = null; jsapResult = args.parse(commandLineArgs); verbose = jsapResult.getBoolean("verbose"); - LOGGER.debug("Setting: verbose={}", verbose); - - final Date startDate = jsapResult.getDate("startTime"); - if (startDate == null) { - startTime = Long.MIN_VALUE; + if (verbose) { + org.apache.log4j.Logger.getRootLogger().setLevel(Level.ALL); + System.out.println("TOMP SAYS VERBOSE"); } else { - startTime = jsapResult.getDate("startTime").getTime(); + org.apache.log4j.Logger.getRootLogger().setLevel(Level.INFO); } - LOGGER.debug("Setting: startTime={}", startTime); - final Date endDate = jsapResult.getDate("endTime"); - if (endDate == null) { - endTime = Long.MIN_VALUE; + LOGGER.debug("Setting: verbose={}", verbose); + + squelchHTML = jsapResult.getBoolean("squelchHTML"); + + final TimeSpan timeSpan = (TimeSpan) jsapResult.getObject("timeSpan"); + if (timeSpan == null) { + startTime = Long.MIN_VALUE; + endTime = Long.MAX_VALUE; } else { - endTime = jsapResult.getDate("endTime").getTime(); + startTime = timeSpan.startTime; + endTime = timeSpan.endTime; } + LOGGER.debug("Setting: startTime={}", startTime); LOGGER.debug("Setting: endTime={}", endTime); configFileName = jsapResult.getString("config-filename"); LOGGER.debug("Setting: config-filename={}", configFileName); - if (jsapResult.getBoolean("create-config")) { + if (jsapResult.getBoolean("create-config") || jsapResult.getBoolean("help")) { System.exit(1); } } From 2c8ad874c560f45f8e6fdc587080f3bfc256a94a Mon Sep 17 00:00:00 2001 From: tparker Date: Sat, 19 Oct 2019 10:13:12 -0800 Subject: [PATCH 09/17] remove seedlink source. Cannot use the swam data source here. --- .../volcanoes/pensive/SeedLinkClient.java | 224 ------------------ .../volcanoes/pensive/SeedLinkSource.java | 60 ----- 2 files changed, 284 deletions(-) delete mode 100644 src/main/java/gov/usgs/volcanoes/pensive/SeedLinkClient.java delete mode 100644 src/main/java/gov/usgs/volcanoes/pensive/SeedLinkSource.java diff --git a/src/main/java/gov/usgs/volcanoes/pensive/SeedLinkClient.java b/src/main/java/gov/usgs/volcanoes/pensive/SeedLinkClient.java deleted file mode 100644 index eccf0f8..0000000 --- a/src/main/java/gov/usgs/volcanoes/pensive/SeedLinkClient.java +++ /dev/null @@ -1,224 +0,0 @@ -package gov.usgs.volcanoes.pensive; - -import edu.iris.Fissures.seed.container.Blockette; -import edu.iris.Fissures.seed.container.Btime; -import edu.iris.Fissures.seed.container.Waveform; -import edu.iris.Fissures.seed.exception.SeedException; - -import gov.usgs.volcanoes.core.data.Scnl; -import gov.usgs.volcanoes.core.data.Wave; -import gov.usgs.volcanoes.core.time.J2kSec; -import gov.usgs.volcanoes.core.time.Time; -import gov.usgs.volcanoes.core.time.TimeSpan; - -import java.net.UnknownHostException; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.List; -import java.util.TimeZone; - -import nl.knmi.orfeus.SLClient; -import nl.knmi.orfeus.seedlink.SLPacket; -import nl.knmi.orfeus.seedlink.SeedLinkException; - -public class SeedLinkClient extends SLClient { - - static final String DATE_FORMAT = "yyyy,MM,dd,HH,mm,ss"; - - private List waveList; - - public SeedLinkClient(String host, int port) { - super(); - - slconn.setNetDelay(10); - slconn.setNetTimout(30); - slconn.setSLAddress(host + ":" + port); - } - - public boolean packetHandler(int count, SLPacket slpack) throws Exception { - System.err.println("TOMP SAYS: " + slpack); - if (slpack == null || slpack == SLPacket.SLNOPACKET || slpack == SLPacket.SLERROR) { - return false; // do not close the connection - } - - // get basic packet info - final int type = slpack.getType(); - - // process INFO packets here - // return if unterminated - if (type == SLPacket.TYPE_SLINF) { - return false; // do not close the connection - } - // process message and return if terminated - if (type == SLPacket.TYPE_SLINFT) { - // LOGGER.debug("received INFO packet:\n{}", slconn.getInfoString()); - if (infolevel != null) { - return true; // close the connection - } else { - return false; // do not close the connection - } - } - - // if here, must be a blockette - final Blockette blockette = slpack.getBlockette(); - final Waveform waveform = blockette.getWaveform(); - // if waveform and FSDH - if (waveform != null && blockette.getType() == 999) { - // convert waveform to wave (also done in - // gov.usgs.swarm.data.FileDataSource) - try { - final Btime bTime = getBtime(blockette, 8); - final double factor = getDouble(blockette, 10); - final double multiplier = getDouble(blockette, 11); - final double startTime = J2kSec.fromDate(btimeToDate(bTime)); - final double samplingRate = getSampleRate(factor, multiplier); - final Wave wave = new Wave(); - wave.setSamplingRate(samplingRate); - wave.setStartTime(startTime); - wave.buffer = waveform.getDecodedIntegers(); - wave.register(); - System.err.println("TOMP SAYS: samp " + wave.numSamples()); - waveList.add(wave); - } catch (Exception ex) { - ex.printStackTrace(); - return true; // close the connection - } - } - return false; // do not close the connection - } - - /** - * taken from swarm - */ - - private Date btimeToDate(Btime btime) { - Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); - cal.set(Calendar.YEAR, btime.getYear()); - cal.set(Calendar.DAY_OF_YEAR, btime.getDayOfYear()); - cal.set(Calendar.HOUR_OF_DAY, btime.getHour()); - cal.set(Calendar.MINUTE, btime.getMinute()); - cal.set(Calendar.SECOND, btime.getSecond()); - cal.set(Calendar.MILLISECOND, btime.getTenthMill() / 10); - return cal.getTime(); - } - - /** - * taken from swarm - */ - private static Btime getBtime(Blockette blockette, int fieldNum) throws SeedException { - Object obj = blockette.getFieldVal(fieldNum); - if (obj instanceof Btime) { - return (Btime) obj; - } - return new Btime(obj.toString()); - } - - /** - * taken from swarm - */ - private static double getDouble(Blockette blockette, int fieldNum) throws SeedException { - Object obj = blockette.getFieldVal(fieldNum); - if (obj instanceof Number) { - return ((Number) obj).doubleValue(); - } - return Double.parseDouble(obj.toString()); - } - - /* - * taken from Robert Casey's PDCC seed code. - */ - private float getSampleRate(double factor, double multiplier) { - float sampleRate = (float) 10000.0; // default (impossible) value; - if ((factor * multiplier) != 0.0) { // in the case of log records - sampleRate = (float) (java.lang.Math.pow(java.lang.Math.abs(factor), - (factor / java.lang.Math.abs(factor))) - * java.lang.Math.pow(java.lang.Math.abs(multiplier), - (multiplier / java.lang.Math.abs(multiplier)))); - } - return sampleRate; - } - - public Wave getWave(Scnl scnl, TimeSpan timeSpan) { - waveList = new ArrayList(); - - slconn.setBeginTime(Time.format(DATE_FORMAT, timeSpan.startTime)); - slconn.setEndTime(Time.format(DATE_FORMAT, timeSpan.endTime)); - - String selector = - String.format("%s_%s:%s%s.d", scnl.network, scnl.station, scnl.location, scnl.channel); - multiselect = selector; - - System.err.println("TOMP SAYS: " + selector); - try { - edu.iris.Fissures.seed.container.BlocketteDecoratorFactory.reset(); - init(); - run(); - } catch (UnknownHostException e) { - e.printStackTrace(); - } catch (SeedLinkException e) { - e.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); - } - -// slconn.disconnect(); -// slconn.terminate(); - - return Wave.join(waveList); - } - - /** - * - * Start this SLCient. - * - * @throws Exception - * @throws SeedLinkException on error. - * - */ - public void run() throws Exception { -System.err.println("TOM SAYS RUNNING"); - if (infolevel != null) { - slconn.requestInfo(infolevel); - } - - // Loop with the connection manager - SLPacket slpack = null; - int count = 1; - while ((slpack = slconn.collect()) != null) { - System.err.println("TOM SAYS got packet"); - - if (slpack == SLPacket.SLTERMINATE) { - break; - } - - try { - - // do something with packet - boolean terminate = packetHandler(count, slpack); - if (terminate) { - break; - } - - } catch (SeedLinkException sle) { - System.out.print(CLASS_NAME + ": " + sle); - } - - // 20081127 AJL - test modification to prevent "Error: out of java heap space" problem identified by pwiejacz@igf.edu.pl - if (count % 200 == 0) { - edu.iris.Fissures.seed.container.BlocketteDecoratorFactory.reset(); - } - if (count >= Integer.MAX_VALUE) { - count = 1; - System.out.println("DEBUG INFO: " + CLASS_NAME + ": Packet count reset to 1"); - } else { - count++; - } - } -System.err.println("TOMP SAYS DONE"); - // Close the SeedLinkConnection -// slconn.close(); - - } - -} diff --git a/src/main/java/gov/usgs/volcanoes/pensive/SeedLinkSource.java b/src/main/java/gov/usgs/volcanoes/pensive/SeedLinkSource.java deleted file mode 100644 index ff60d6d..0000000 --- a/src/main/java/gov/usgs/volcanoes/pensive/SeedLinkSource.java +++ /dev/null @@ -1,60 +0,0 @@ -package gov.usgs.volcanoes.pensive; - -import gov.usgs.volcanoes.core.data.HelicorderData; -import gov.usgs.volcanoes.core.data.Scnl; -import gov.usgs.volcanoes.core.data.Wave; -import gov.usgs.volcanoes.core.time.J2kSec; -import gov.usgs.volcanoes.core.time.TimeSpan; -import gov.usgs.volcanoes.core.util.UtilException; -import gov.usgs.volcanoes.swarm.data.GulperListener; -import gov.usgs.volcanoes.swarm.data.SeismicDataSource; - -import java.io.File; -import java.util.List; - -public class SeedLinkSource extends SeismicDataSource { - - private SeedLinkClient seedLinkClient; - private String host; - private int port; - - public SeedLinkSource(String host, int port) { - super(); - seedLinkClient = new SeedLinkClient(host, port); - } - - @Override - public List getChannels() { - throw new UnsupportedOperationException(); - } - - @Override - public Wave getWave(String station, double t1, double t2) { - Scnl scnl; - try { - scnl = Scnl.parse(station, " "); - } catch (UtilException e) { - e.printStackTrace(); - return null; - } - TimeSpan timeSpan = new TimeSpan(J2kSec.asEpoch(t1), J2kSec.asEpoch(t2)); - - return seedLinkClient.getWave(scnl, timeSpan); - } - - @Override - public HelicorderData getHelicorder(String station, double t1, double t2, GulperListener gl) { - throw new UnsupportedOperationException(); - } - - @Override - public String toConfigString() { - throw new UnsupportedOperationException(); - } - - @Override - public void parse(String params) { - throw new UnsupportedOperationException(); - } - -} From 4b6de9f4dd96441277309c6ec1495f2610ecc328 Mon Sep 17 00:00:00 2001 From: tparker Date: Sat, 19 Oct 2019 10:13:25 -0800 Subject: [PATCH 10/17] update deps --- pom.xml | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 1c00c55..dd4ddfc 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ gov.usgs.volcanoes pensive - 1.4.1 + 1.5.0 jar Pensive @@ -144,7 +144,7 @@ org.apache.maven.plugins maven-shade-plugin - 2.4.1 + 3.2.1 package @@ -189,6 +189,18 @@ ** + + + opensymphony:oscache + + ** + + + + commons-logging:commons-logging + + ** + @@ -204,6 +216,9 @@ edu.iris:JavaSeedLite opensymphony:oscache edu.sc.seis:seisFile + org.apache.httpcomponents:httpclient + org.apache.httpcomponents:httpcore + commons-logging:commons-logging @@ -366,7 +381,7 @@ gov.usgs.volcanoes swarm - 2.8.4-SNAPSHOT + 2.8.14-SNAPSHOT gov.usgs.volcanoes @@ -417,7 +432,7 @@ edu.sc.seis seisFile - 1.8.0-JDK7 + 1.8.2 From 5c0ae7708f9b3933efbf0bc5b46d2e9f04b862aa Mon Sep 17 00:00:00 2001 From: tparker Date: Sat, 19 Oct 2019 10:14:02 -0800 Subject: [PATCH 11/17] add FDSN-WS source --- .../usgs/volcanoes/pensive/FdsnwsSource.java | 186 ++++++++++++++++++ .../usgs/volcanoes/pensive/WaveSource.java | 9 +- .../volcanoes/pensive/plot/SubnetPlotter.java | 2 +- 3 files changed, 192 insertions(+), 5 deletions(-) create mode 100644 src/main/java/gov/usgs/volcanoes/pensive/FdsnwsSource.java diff --git a/src/main/java/gov/usgs/volcanoes/pensive/FdsnwsSource.java b/src/main/java/gov/usgs/volcanoes/pensive/FdsnwsSource.java new file mode 100644 index 0000000..4496b38 --- /dev/null +++ b/src/main/java/gov/usgs/volcanoes/pensive/FdsnwsSource.java @@ -0,0 +1,186 @@ +package gov.usgs.volcanoes.pensive; + +import edu.iris.dmc.seedcodec.Codec; +import edu.iris.dmc.seedcodec.CodecException; +import edu.iris.dmc.seedcodec.DecompressedData; +import edu.iris.dmc.seedcodec.UnsupportedCompressionType; +import edu.sc.seis.seisFile.SeisFileException; +import edu.sc.seis.seisFile.fdsnws.FDSNDataSelectQuerier; +import edu.sc.seis.seisFile.fdsnws.FDSNDataSelectQueryParams; +import edu.sc.seis.seisFile.fdsnws.FDSNWSException; +import edu.sc.seis.seisFile.mseed.Blockette; +import edu.sc.seis.seisFile.mseed.Blockette1000; +import edu.sc.seis.seisFile.mseed.Btime; +import edu.sc.seis.seisFile.mseed.DataHeader; +import edu.sc.seis.seisFile.mseed.DataRecord; +import edu.sc.seis.seisFile.mseed.DataRecordIterator; +import edu.sc.seis.seisFile.mseed.SeedFormatException; + +import gov.usgs.volcanoes.core.data.HelicorderData; +import gov.usgs.volcanoes.core.data.Wave; +import gov.usgs.volcanoes.core.time.J2kSec; +import gov.usgs.volcanoes.swarm.data.GulperListener; +import gov.usgs.volcanoes.swarm.data.SeismicDataSource; + +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.TimeZone; + +public class FdsnwsSource extends SeismicDataSource { + + private final String dataselectUri; + private final String user; + private final String password; + + public FdsnwsSource(String dataselectUri, String user, String password) { + this.dataselectUri = dataselectUri; + this.user = user; + this.password = password; + } + + + @Override + public List getChannels() { + throw new UnsupportedOperationException(); + } + + @Override + public void parse(String params) { + throw new UnsupportedOperationException(); + } + + private FDSNDataSelectQueryParams configureParams(String station, double t1, double t2) { + System.out.println("Station: " + station); + String[] parts = station.split("\\s+"); + FDSNDataSelectQueryParams queryParams = new FDSNDataSelectQueryParams(); + queryParams.setStartTime(J2kSec.asDate(t1)); + queryParams.setEndTime(J2kSec.asDate(t2)); + queryParams.appendToNetwork(parts[2]); + queryParams.appendToStation(parts[0]); + queryParams.appendToChannel(parts[1]); + if (parts.length > 3) { + queryParams.appendToLocation(parts[3]); + } + + URI uri; + try { + uri = new URI(dataselectUri); + queryParams.setScheme(uri.getScheme()); + queryParams.setPort(uri.getPort()); + queryParams.setFdsnwsPath(uri.getPath()); + queryParams.setHost(uri.getHost()); + System.out.println(queryParams.formURI()); + } catch (URISyntaxException e) { + throw new RuntimeException( + "Cannot parse URI " + dataselectUri + ": " + e.getLocalizedMessage()); + } + + return queryParams; + } + + private static double btimeToJ2k(Btime btime) { + Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); + cal.set(Calendar.YEAR, btime.getYear()); + cal.set(Calendar.DAY_OF_YEAR, btime.getDayOfYear()); + cal.set(Calendar.HOUR_OF_DAY, btime.getHour()); + cal.set(Calendar.MINUTE, btime.getMin()); + cal.set(Calendar.SECOND, btime.getSec()); + cal.set(Calendar.MILLISECOND, btime.getTenthMilli() / 10); + Date date = cal.getTime(); + + return J2kSec.fromDate(date); + } + + private static Wave createWave(DataRecord dr, Blockette1000 b1000) + throws UnsupportedCompressionType, CodecException { + DecompressedData decomp = + new Codec().decompress(b1000.getEncodingFormat(), dr.getData(), + dr.getHeader().getNumSamples(), b1000.getWordOrder() == 0); + + Wave wave = new Wave(); + DataHeader dh = dr.getHeader(); + wave.setSamplingRate(dh.getSampleRate()); + wave.setStartTime(btimeToJ2k(dh.getStartBtime())); + wave.buffer = decomp.getAsInt(); + wave.register(); + return wave; + } + + private Wave readResponse(DataRecordIterator it) + throws SeedFormatException, IOException, UnsupportedCompressionType, CodecException { + List waves = new ArrayList(); + if (!it.hasNext()) { + System.out.println("No Data"); + } + while (it.hasNext()) { + DataRecord dr = it.next(); + for (Blockette blockette : dr.getBlockettes(1000)) { + if (blockette instanceof Blockette1000) { + waves.add(createWave(dr, (Blockette1000) blockette)); + } + } + + } + return Wave.join(waves); + } + + + @Override + public Wave getWave(String station, double t1, double t2) { + FDSNDataSelectQueryParams queryParams = configureParams(station, t1, t2); + FDSNDataSelectQuerier querier = new FDSNDataSelectQuerier(queryParams); + if (user != null) { + querier.enableRestrictedData(user, password); + } + + DataRecordIterator it = null; + Wave wave = null; + try { + it = querier.getDataRecordIterator(); + wave = readResponse(it); + } catch (FDSNWSException e) { + System.out.println("No data found for " + station); + e.printStackTrace(); + } catch (SeisFileException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (UnsupportedCompressionType e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (CodecException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + if (it != null) { + it.close(); + } + } + + return wave; + + } + + @Override + public HelicorderData getHelicorder(String station, double t1, double t2, GulperListener gl) { + throw new UnsupportedOperationException(); + } + + @Override + public String toConfigString() { + throw new UnsupportedOperationException(); + } + + @Override + public void close() { + // do nothing + } +} diff --git a/src/main/java/gov/usgs/volcanoes/pensive/WaveSource.java b/src/main/java/gov/usgs/volcanoes/pensive/WaveSource.java index ad91fc8..a61b478 100644 --- a/src/main/java/gov/usgs/volcanoes/pensive/WaveSource.java +++ b/src/main/java/gov/usgs/volcanoes/pensive/WaveSource.java @@ -69,7 +69,7 @@ public WaveSource(final String name, final BlockingQueue plotJobs, final int port = config.getInt("port", DEFAULT_PORT); final int timeout = config.getInt("timeout", DEFAULT_TIMEOUT_S); final int compress = 1; - + String dsString = null; if (type.equals("wws")) { dsString = String.format("%s;wws:%s:%d:%d:%d", name, host, port, timeout * 1000, compress); @@ -77,12 +77,13 @@ public WaveSource(final String name, final BlockingQueue plotJobs, } else if (type.equals("wsv")) { dsString = String.format("%s;ws:%s:%d:%d:1800:1000:UTC", name, host, port, timeout * 1000); dataSource = DataSourceType.parseConfig(dsString); - } else if (type.equals("sls")) { - dataSource = new SeedLinkSource(host, port); + } else if (type.equals("fdsnws")) { + String user = config.getString("user", null); + String password = config.getString("password", null); + dataSource = new FdsnwsSource(config.getString("dataselectUrl"), user, password); } else { throw new RuntimeException("Unknown wave server type"); } - dataSource.establish(); dataSource.setUseCache(false); } diff --git a/src/main/java/gov/usgs/volcanoes/pensive/plot/SubnetPlotter.java b/src/main/java/gov/usgs/volcanoes/pensive/plot/SubnetPlotter.java index ab69cd5..12959d2 100644 --- a/src/main/java/gov/usgs/volcanoes/pensive/plot/SubnetPlotter.java +++ b/src/main/java/gov/usgs/volcanoes/pensive/plot/SubnetPlotter.java @@ -109,7 +109,7 @@ public SubnetPlotter(final String networkName, final String subnetName, final Co thumbDimension.height = config.getInt("thumbHeight", DEFAULT_THUMB_HEIGHT); channels = createChannels(config.getSubConfig(subnetName, true)); - } + } /** * Create Channel objects for each channel on this plot. From 639187d19d86376453ff3f9df5c6553f60deb5dc Mon Sep 17 00:00:00 2001 From: tparker Date: Sat, 19 Oct 2019 10:28:49 -0800 Subject: [PATCH 12/17] tweak gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 24c7510..4673919 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ /pensive.log.8 /pensive.log.9 /.DS_Store +/dependency-reduced-pom.xml From 26957442afdb4d2223c97b95fcebdda404a06bf8 Mon Sep 17 00:00:00 2001 From: tparker Date: Sat, 19 Oct 2019 10:29:07 -0800 Subject: [PATCH 13/17] cleanup --- dependency-reduced-pom.xml | 320 ------------------------------------- 1 file changed, 320 deletions(-) delete mode 100644 dependency-reduced-pom.xml diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml deleted file mode 100644 index 90b7aaa..0000000 --- a/dependency-reduced-pom.xml +++ /dev/null @@ -1,320 +0,0 @@ - - - 4.0.0 - gov.usgs.volcanoes - pensive - Pensive - 1.4.0-SNAPSHOT - http://volcanoes.usgs.gov/software/pensive - - GitHub - https://github.com/usgs/pensive - - - Travis - https://travis-ci.org/usgs/pensive/ - - - - tparker - Tom Parker - tparker@usgs.gov - U.S. Geological Survey, Alaska Volcano Observatory - - true - - - - - - CC0 1.0 Universal - http://creativecommons.org/publicdomain/zero/1.0/ - repo - - - - scm:git:git@github.com:usgs/pensive.git - scm:git:git@github.com:usgs/pensive.git - scm:git:git@github.com:pensive/penive.git - - - - - org.apache.maven.wagon - wagon-ssh-external - 1.0-beta-6 - - - - - - org.eclipse.m2e - lifecycle-mapping - 1.0.0 - - - - - - com.google.code.maven-replacer-plugin - maven-replacer-plugin - 1.4.0 - - replace - - - - - - source: - - - - - - - - - - maven-shade-plugin - 2.4.1 - - - package - - shade - - - true - - - org.apache:log4j - - org/apache/log4j/** - - - - org.freemarker:freemarker - - freemarker/** - - - - com.jgoodies:jgoodies-common - - ** - - - - com.jgoodies:jgoodies-forms - - ** - - - - com.jgoodies:jgoodies-looks - - ** - - - - opensymphony:oscache - - ** - - - - - - gov.usgs.volcanoes:* - org.freemarker:freemarker - com.martiansoftware:jsap - net.sourceforge.jtransforms:jtransforms - org.slf4j:* - org.apache:log4j - net.alomax:* - com.jgoodies:* - edu.iris:JavaSeedLite - opensymphony:oscache - edu.sc.seis:seisFile - - - - - - - - maven-jar-plugin - 2.6 - - - - true - gov.usgs.volcanoes.pensive.Pensive - - - - - - com.google.code.maven-replacer-plugin - maven-replacer-plugin - 1.4.0 - - - process-sources - - replace - - - - - ${version.template.file} - ${version.file} - - - @buildnumber@ - ${svn.revision} - - - @buildtime@ - ${maven.build.timestamp} - - - @pomversion@ - ${project.version} - - - - - - maven-site-plugin - 3.4 - - - org.apache.maven.wagon - wagon-scm - 2.9 - - - org.apache.maven.scm - maven-scm-manager-plexus - 1.9.4 - - - org.apache.maven.scm - maven-scm-provider-gitexe - 1.9.4 - - - org.apache.maven.scm - maven-scm-api - 1.9.4 - - - - - - - - - true - - volcanoes - http://volcanoes.usgs.gov/software/maven2/ - - - - - edu.iris - seedCodec - 1.0.10 - compile - - - - - - maven-pmd-plugin - 3.5 - - - /rulesets/java/braces.xml - /rulesets/java/naming.xml - .ruleset - - - - - org.codehaus.mojo - findbugs-maven-plugin - 3.0.0 - - Max - max - true - - - - maven-checkstyle-plugin - 2.16 - - - - checkstyle - - - - - - maven-jxr-plugin - 2.5 - - - maven-javadoc-plugin - 2.10.3 - - false - - - - org.codehaus.mojo - cobertura-maven-plugin - 2.7 - - - html - xml - - - - - org.codehaus.mojo - javancss-maven-plugin - 2.1 - - utf-8 - false - - - - - - - volcanoes.web - Volcanoes website - scpexe://vulcan4.wr.usgs.gov/webdata/volcanoes.usgs.gov/htdocs/software/maven2 - - - github.pages - scm:git:https://git@github.com/usgs/pensive.git - - - - 1.6 - src/main/resources/Version.java.template - 1.6 - UTF-8 - src/main/java/gov/usgs/volcanoes/pensive/Version.java - - - From 1ccc6bf54b4a50c42cdd61cb0176cdc654373cdf Mon Sep 17 00:00:00 2001 From: tparker Date: Tue, 22 Oct 2019 16:20:28 -0800 Subject: [PATCH 14/17] add FDSN-WS data source --- .../usgs/volcanoes/pensive/FdsnwsSource.java | 50 +++++++++++++++---- .../usgs/volcanoes/pensive/WaveSource.java | 4 +- 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/src/main/java/gov/usgs/volcanoes/pensive/FdsnwsSource.java b/src/main/java/gov/usgs/volcanoes/pensive/FdsnwsSource.java index 4496b38..bd955c4 100644 --- a/src/main/java/gov/usgs/volcanoes/pensive/FdsnwsSource.java +++ b/src/main/java/gov/usgs/volcanoes/pensive/FdsnwsSource.java @@ -4,6 +4,7 @@ import edu.iris.dmc.seedcodec.CodecException; import edu.iris.dmc.seedcodec.DecompressedData; import edu.iris.dmc.seedcodec.UnsupportedCompressionType; +import edu.sc.seis.seisFile.ChannelTimeWindow; import edu.sc.seis.seisFile.SeisFileException; import edu.sc.seis.seisFile.fdsnws.FDSNDataSelectQuerier; import edu.sc.seis.seisFile.fdsnws.FDSNDataSelectQueryParams; @@ -16,13 +17,13 @@ import edu.sc.seis.seisFile.mseed.DataRecordIterator; import edu.sc.seis.seisFile.mseed.SeedFormatException; +import gov.usgs.volcanoes.core.configfile.ConfigFile; import gov.usgs.volcanoes.core.data.HelicorderData; import gov.usgs.volcanoes.core.data.Wave; import gov.usgs.volcanoes.core.time.J2kSec; import gov.usgs.volcanoes.swarm.data.GulperListener; import gov.usgs.volcanoes.swarm.data.SeismicDataSource; -import java.io.DataOutputStream; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; @@ -38,10 +39,10 @@ public class FdsnwsSource extends SeismicDataSource { private final String user; private final String password; - public FdsnwsSource(String dataselectUri, String user, String password) { - this.dataselectUri = dataselectUri; - this.user = user; - this.password = password; + public FdsnwsSource(final ConfigFile config) { + this.dataselectUri = config.getString("dataselectUrl"); + this.user = config.getString("user", null); + this.password = config.getString("password", null); } @@ -55,7 +56,7 @@ public void parse(String params) { throw new UnsupportedOperationException(); } - private FDSNDataSelectQueryParams configureParams(String station, double t1, double t2) { + private FDSNDataSelectQueryParams configureParamsOld(String station, double t1, double t2) { System.out.println("Station: " + station); String[] parts = station.split("\\s+"); FDSNDataSelectQueryParams queryParams = new FDSNDataSelectQueryParams(); @@ -84,6 +85,25 @@ private FDSNDataSelectQueryParams configureParams(String station, double t1, dou return queryParams; } + private FDSNDataSelectQueryParams configureParams() { + FDSNDataSelectQueryParams queryParams = new FDSNDataSelectQueryParams(); + + URI uri; + try { + uri = new URI(dataselectUri); + queryParams.setScheme(uri.getScheme()); + queryParams.setPort(uri.getPort()); + queryParams.setFdsnwsPath(uri.getPath()); + queryParams.setHost(uri.getHost()); + System.out.println(queryParams.formURI()); + } catch (URISyntaxException e) { + throw new RuntimeException( + "Cannot parse URI " + dataselectUri + ": " + e.getLocalizedMessage()); + } + + return queryParams; + } + private static double btimeToJ2k(Btime btime) { Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); cal.set(Calendar.YEAR, btime.getYear()); @@ -133,11 +153,23 @@ private Wave readResponse(DataRecordIterator it) @Override public Wave getWave(String station, double t1, double t2) { - FDSNDataSelectQueryParams queryParams = configureParams(station, t1, t2); - FDSNDataSelectQuerier querier = new FDSNDataSelectQuerier(queryParams); + FDSNDataSelectQueryParams queryParams = configureParams(); + String[] parts = station.split("\\s+"); + String sta = parts[0]; + String cha = parts[1]; + String net = parts[2]; + String loc = ""; + if (parts.length > 3) { + loc = parts[3]; + } + + ChannelTimeWindow channelTime = new ChannelTimeWindow(net, sta, loc, cha, J2kSec.asDate(t1), J2kSec.asDate(t2)); + List request = new ArrayList(); + request.add(channelTime); + FDSNDataSelectQuerier querier = new FDSNDataSelectQuerier(queryParams, request); if (user != null) { querier.enableRestrictedData(user, password); - } + } DataRecordIterator it = null; Wave wave = null; diff --git a/src/main/java/gov/usgs/volcanoes/pensive/WaveSource.java b/src/main/java/gov/usgs/volcanoes/pensive/WaveSource.java index a61b478..ae35113 100644 --- a/src/main/java/gov/usgs/volcanoes/pensive/WaveSource.java +++ b/src/main/java/gov/usgs/volcanoes/pensive/WaveSource.java @@ -78,9 +78,7 @@ public WaveSource(final String name, final BlockingQueue plotJobs, dsString = String.format("%s;ws:%s:%d:%d:1800:1000:UTC", name, host, port, timeout * 1000); dataSource = DataSourceType.parseConfig(dsString); } else if (type.equals("fdsnws")) { - String user = config.getString("user", null); - String password = config.getString("password", null); - dataSource = new FdsnwsSource(config.getString("dataselectUrl"), user, password); + dataSource = new FdsnwsSource(config); } else { throw new RuntimeException("Unknown wave server type"); } From 7e6ed1d7c1364884788dc83ffd1c19df7a439dfe Mon Sep 17 00:00:00 2001 From: tparker Date: Thu, 31 Oct 2019 16:18:10 -0800 Subject: [PATCH 15/17] use swarm 2.8.13 --- pom.xml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index dd4ddfc..a9845f6 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ gov.usgs.volcanoes pensive - 1.5.0 + 1.5.1 jar Pensive @@ -201,6 +201,12 @@ ** + + + gov.usgs.volcanoes:swarm + + ** + @@ -381,7 +387,7 @@ gov.usgs.volcanoes swarm - 2.8.14-SNAPSHOT + 2.8.13 gov.usgs.volcanoes From d941c7a9dc2ca0eeb01fe4e3447342c520aa3f52 Mon Sep 17 00:00:00 2001 From: tparker Date: Fri, 22 Nov 2019 17:23:20 -0900 Subject: [PATCH 16/17] add replot option --- .../gov/usgs/volcanoes/pensive/PlotJob.java | 21 +++++++++++++++++-- .../volcanoes/pensive/plot/SubnetPlotter.java | 8 +++++-- .../schedule/RealtimePlotScheduler.java | 4 ++++ 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/main/java/gov/usgs/volcanoes/pensive/PlotJob.java b/src/main/java/gov/usgs/volcanoes/pensive/PlotJob.java index 0105b13..3974ff0 100644 --- a/src/main/java/gov/usgs/volcanoes/pensive/PlotJob.java +++ b/src/main/java/gov/usgs/volcanoes/pensive/PlotJob.java @@ -15,6 +15,10 @@ */ public class PlotJob implements Comparable { + /** if true replot the previous run */ + public static final boolean DO_PRINT_PREVIOUS = true; + public static final boolean NO_PRINT_PREVIOUS = false; + /** Time of last sample plotted. */ public final long plotEndMs; @@ -24,7 +28,6 @@ public class PlotJob implements Comparable { /** my subnet. */ public final SubnetPlotter subnet; - /** * Class constructor which uses the most recent time slice as the time of * the last sample to be plotted. @@ -32,8 +35,22 @@ public class PlotJob implements Comparable { * @param subnet my subnet */ public PlotJob(final SubnetPlotter subnet) { + this(subnet, false); + } + + /** + * Class constructor which uses the most recent time slice as the time of + * the last sample to be plotted. + * + * @param subnet my subnet + */ + public PlotJob(final SubnetPlotter subnet, boolean oneBehind) { this.subnet = subnet; - this.plotEndMs = findPlotEnd(); + long plotEndMs = findPlotEnd(); + if (oneBehind) { + plotEndMs -= SubnetPlotter.DURATION_S * 1000; + } + this.plotEndMs = plotEndMs; plotTimeMs = plotEndMs + subnet.embargoMs; } diff --git a/src/main/java/gov/usgs/volcanoes/pensive/plot/SubnetPlotter.java b/src/main/java/gov/usgs/volcanoes/pensive/plot/SubnetPlotter.java index 12959d2..eff51df 100644 --- a/src/main/java/gov/usgs/volcanoes/pensive/plot/SubnetPlotter.java +++ b/src/main/java/gov/usgs/volcanoes/pensive/plot/SubnetPlotter.java @@ -45,7 +45,8 @@ public class SubnetPlotter { private static final int DEFAULT_THUMB_WIDTH = 151; private static final int DEFAULT_THUMB_HEIGHT = 198; private static final int DEFAULT_EMBARGO = 5; - + private static final boolean DEFAULT_PRINT_PREVIOUS = false; + /** width of plot decorations in pixels. */ public static final int LABEL_HEIGHT = 35; @@ -79,6 +80,9 @@ public class SubnetPlotter { /** thumbnail dimension. */ private final Dimension thumbDimension; + /** Print the previous plot too. */ + public final boolean printPrevious; + /** Channels on this plot. */ private final List channels; @@ -99,7 +103,7 @@ public SubnetPlotter(final String networkName, final String subnetName, final Co filePathFormat = config.getString("filePathFormat", DEFAULT_FILE_PATH_FORMAT); fileSuffixFormat = config.getString("fileSuffixFormat", DEFAULT_FILE_SUFFIX_FORMAT); embargoMs = config.getInt("embargo", DEFAULT_EMBARGO) * 1000; - + printPrevious = config.getBoolean("replot", false); plotDimension = new Dimension(); plotDimension.width = config.getInt("plotWidth", DEFAULT_PLOT_WIDTH); plotDimension.height = config.getInt("plotHeight", DEFAULT_PLOT_HEIGHT); diff --git a/src/main/java/gov/usgs/volcanoes/pensive/schedule/RealtimePlotScheduler.java b/src/main/java/gov/usgs/volcanoes/pensive/schedule/RealtimePlotScheduler.java index 5da4306..fa37f94 100644 --- a/src/main/java/gov/usgs/volcanoes/pensive/schedule/RealtimePlotScheduler.java +++ b/src/main/java/gov/usgs/volcanoes/pensive/schedule/RealtimePlotScheduler.java @@ -37,6 +37,10 @@ protected void schedulePlots() { try { LOGGER.info("Scheduling subnet " + subnet.subnetName); plotJobs.put(new PlotJob(subnet)); + if (subnet.printPrevious) { + LOGGER.info("Scheduling previous plot for subnet " + subnet.subnetName); + plotJobs.put(new PlotJob(subnet, PlotJob.DO_PRINT_PREVIOUS)); + } } catch (final InterruptedException e) { LOGGER.info("Interrupted. Unable to schedule " + subnet.subnetName); } From 4ea5ff5c26a2025b14f4cc0d3906a9dd31f261ef Mon Sep 17 00:00:00 2001 From: tparker Date: Fri, 22 Nov 2019 17:23:59 -0900 Subject: [PATCH 17/17] version bump --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a9845f6..811f548 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ gov.usgs.volcanoes pensive - 1.5.1 + 1.6.0 jar Pensive