diff --git a/geomagio/imfv283/GOESIMFV283Factory.py b/geomagio/imfv283/GOESIMFV283Factory.py index de090de238feec7cf68ae48c149f0d6c033153bb..9529d2dcf53ca4de9829737f30f21822d9ff66cb 100644 --- a/geomagio/imfv283/GOESIMFV283Factory.py +++ b/geomagio/imfv283/GOESIMFV283Factory.py @@ -2,6 +2,7 @@ from IMFV283Factory import IMFV283Factory import subprocess +import sys from obspy.core import Stream @@ -47,8 +48,9 @@ class GOESIMFV283Factory(IMFV283Factory): self.getdcpmessages = getdcpmessages self.server = server self.user = user - self.log_file_name = self.observatory + '.log' - self.criteria_file_name = self.observatory + '.sc' + self.observatories = observatory + self.observatory = observatory[0] + self.javaerror = 'java.io.IOException: Socket closed' def get_timeseries(self, starttime, endtime, observatory=None, channels=None, type=None, interval=None): @@ -59,6 +61,7 @@ class GOESIMFV283Factory(IMFV283Factory): """ observatory = observatory or self.observatory channels = channels or self.channels + self.criteria_file_name = observatory + '.sc' timeseries = Stream() output = self._retrieve_goes_messages(starttime, endtime, observatory) timeseries += self.parse_string(output) @@ -66,6 +69,11 @@ class GOESIMFV283Factory(IMFV283Factory): timeseries.merge() # trim to requested start/end time timeseries.trim(starttime, endtime) + # output the number of points we read for logging + if len(timeseries): + print >> sys.stderr, "Read %s points from %s" % \ + (timeseries[0].stats.npts, observatory) + self._post_process(timeseries) if observatory is not None: timeseries = timeseries.select(station=observatory) @@ -102,18 +110,29 @@ class GOESIMFV283Factory(IMFV283Factory): String Messages from getDcpMessages """ - self._fill_criteria_file(starttime, endtime) - output = subprocess.check_output( - [self.getdcpmessages, - '-h ' + self.server[0], - '-u ' + self.user, - '-f ' + self.directory + '/' + self.criteria_file_name, - '-l ' + self.directory + '/' + self.log_file_name, - '-t 60', - '-n']) + self._fill_criteria_file(starttime, endtime, observatory) + + for server in self.server: + print >> sys.stderr, server + proc = subprocess.Popen( + [self.getdcpmessages, + '-h ' + server, + '-u ' + self.user, + '-f ' + self.directory + '/' + self.criteria_file_name, + '-t 60', + '-n'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + (output, error) = proc.communicate() + print >> sys.stderr, error + if error.find(self.javaerror) >= 0: + print >> sys.stderr, \ + 'Error: could not connect to %s' % \ + server + continue + break + return output - def _fill_criteria_file(self, starttime, endtime): + def _fill_criteria_file(self, starttime, endtime, observatory): """Set Criteria Filename Notes @@ -145,8 +164,7 @@ class GOESIMFV283Factory(IMFV283Factory): buf.append(start.datetime.strftime('%y/%j %H:%M:%S\n')) buf.append('DAPS_UNTIL: ') buf.append(end.datetime.strftime('%y/%j %H:%M:%S\n')) - buf.append('NETWORK_LIST: ./opendcs/netlist/' + - self.observatory.lower() + '.nl\n') + buf.append('NETWORK_LIST: ' + observatory.lower() + '.nl\n') buf.append('DAPS_STATUS: N\n') buf.append('RETRANSMITTED: N\n') buf.append('ASCENDING_TIME: false\n')