From d1f7939db550dc921de07ef825d1297794c52f1e Mon Sep 17 00:00:00 2001 From: Hal Simpson <hasimpson@usgs.gov> Date: Wed, 9 Dec 2015 17:23:58 -0700 Subject: [PATCH] Changed from subprocess.check_output to subprocess.Popen, that allows us to retrieve error messages. Also Added a while loop, to use all servers passed in, instead of just the first one. Finally, added some error logging, and some data logging. --- geomagio/imfv283/GOESIMFV283Factory.py | 35 ++++++++++++++++++++------ 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/geomagio/imfv283/GOESIMFV283Factory.py b/geomagio/imfv283/GOESIMFV283Factory.py index de090de23..a3facbf39 100644 --- a/geomagio/imfv283/GOESIMFV283Factory.py +++ b/geomagio/imfv283/GOESIMFV283Factory.py @@ -46,9 +46,11 @@ class GOESIMFV283Factory(IMFV283Factory): self.directory = directory self.getdcpmessages = getdcpmessages self.server = server + self.maxserver = len(self.server) self.user = user self.log_file_name = self.observatory + '.log' self.criteria_file_name = self.observatory + '.sc' + self.javaerror = 'java.io.IOException: Socket closed' def get_timeseries(self, starttime, endtime, observatory=None, channels=None, type=None, interval=None): @@ -66,6 +68,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 "Read %s points from %s" % \ + (timeseries[0].stats.npts, observatory) + self._post_process(timeseries) if observatory is not None: timeseries = timeseries.select(station=observatory) @@ -103,14 +110,26 @@ class GOESIMFV283Factory(IMFV283Factory): 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']) + currentserver = 0 + + while (currentserver < self.maxserver): + print self.server[currentserver] + proc = subprocess.Popen( + [self.getdcpmessages, + '-h ' + self.server[currentserver], + '-u ' + self.user, + '-f ' + self.directory + '/' + self.criteria_file_name, + '-t 60', + '-n'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + (output, error) = proc.communicate() + print error + if error.find(self.javaerror) >= 0: + print 'Error: could not connect to %s' % \ + self.server[currentserver] + currentserver += 1 + continue + break + return output def _fill_criteria_file(self, starttime, endtime): -- GitLab