Exemplo n.º 1
0
    def __init__(self, req, ro, rs, fileName):
        self.req = req
        self.ro = ro
        self.rs = rs  # keep a reference to avoid crash
        self.rsInput = RecordInput(rs, Array.INT, Record.SAVE_RAW)

        self.fileName = fileName
        self.written = 0
Exemplo n.º 2
0
	def __init__(self, req, ro, rs, fileName):
		self.req = req
		self.ro = ro
		self.rs = rs # keep a reference to avoid crash
		self.rsInput = RecordInput(rs, Array.INT, Record.SAVE_RAW)

		self.fileName = fileName
		self.written = 0
Exemplo n.º 3
0
class _WaveformProducer:
	def __init__(self, req, ro, rs, fileName, tracker):
		self.req = req
		self.ro = ro
		self.rs = rs # keep a reference to avoid crash
		self.rsInput = RecordInput(rs, Array.INT, Record.SAVE_RAW)

		self.fileName = fileName
		self.written = 0

		self.tracker = tracker


	def resumeProducing(self):
		rec = None

		try: rec = self.rsInput.next()
		except Exception, e: Logging.warning("%s" % str(e))

		if self.written == 0:
			# read first record to test if any data exists at all
			if not rec:
				msg = "no waveform data found"
				data = HTTP.renderErrorPage(self.req, http.NO_CONTENT, msg, self.ro)
				if data:
					self.req.write(data)
				self.req.unregisterProducer()
				self.req.finish()

				if self.tracker:
					self.tracker.volume_status("fdsnws", "NODATA", 0, "")
					self.tracker.request_status("END", "")

				return

			self.req.setHeader('Content-Type', 'application/vnd.fdsn.mseed')
			self.req.setHeader('Content-Disposition', "attachment; " \
			                   "filename=%s" % self.fileName)

		if not rec:
			self.req.unregisterProducer()
			Logging.debug("%s: returned %i bytes of mseed data" % (
			               self.ro.service, self.written))
			utils.accessLog(self.req, self.ro, http.OK, self.written, None)
			self.req.finish()

			if self.tracker:
				self.tracker.volume_status("fdsnws", "OK", self.written, "")
				self.tracker.request_status("END", "")

			return

		data = rec.raw().str()
		self.req.write(data)
		self.written += len(data)

	def stopProducing(self): pass
Exemplo n.º 4
0
class _WaveformProducer:
    def __init__(self, req, ro, rs, fileName, tracker):
        self.req = req
        self.ro = ro
        self.rs = rs  # keep a reference to avoid crash
        self.rsInput = RecordInput(rs, Array.INT, Record.SAVE_RAW)

        self.fileName = fileName
        self.written = 0

        self.tracker = tracker

    def resumeProducing(self):
        rec = None

        try:
            rec = self.rsInput.next()
        except Exception, e:
            Logging.warning("%s" % str(e))

        if self.written == 0:
            # read first record to test if any data exists at all
            if not rec:
                msg = "no waveform data found"
                data = HTTP.renderErrorPage(self.req, http.NO_CONTENT, msg,
                                            self.ro)
                if data:
                    self.req.write(data)
                self.req.unregisterProducer()
                self.req.finish()

                if self.tracker:
                    self.tracker.volume_status("fdsnws", "NODATA", 0, "")
                    self.tracker.request_status("END", "")

                return

            self.req.setHeader('Content-Type', 'application/vnd.fdsn.mseed')
            self.req.setHeader('Content-Disposition', "attachment; " \
                               "filename=%s" % self.fileName)

        if not rec:
            self.req.unregisterProducer()
            Logging.debug("%s: returned %i bytes of mseed data" %
                          (self.ro.service, self.written))
            utils.accessLog(self.req, self.ro, http.OK, self.written, None)
            self.req.finish()

            if self.tracker:
                self.tracker.volume_status("fdsnws", "OK", self.written, "")
                self.tracker.request_status("END", "")

            return

        data = rec.raw().str()
        self.req.write(data)
        self.written += len(data)
Exemplo n.º 5
0
    def input(self):
        fastsdsPrefix = 'fastsds://'

        if self.__url.startswith(fastsdsPrefix):
            fastsds = SDS(self.__url[len(fastsdsPrefix):])

        else:
            fastsds = None

        for (net, sta, loc, cha, startt, endt, restricted,
             archNet) in self.__tw:
            if not archNet:
                archNet = net

            size = 0

            if fastsds:
                start = dateutil.parser.parse(
                    startt.iso()).replace(tzinfo=None)
                end = dateutil.parser.parse(endt.iso()).replace(tzinfo=None)

                for data in fastsds.getRawBytes(start, end, archNet, sta, loc,
                                                cha, self.__bufferSize):
                    size += len(data)

                    if archNet == net:
                        yield data

                    else:
                        try:
                            yield self.__override_network(data, net)

                        except Exception as e:
                            Logging.error(
                                "could not override network code: %s" % str(e))

            else:
                rs = RecordStream.Open(self.__url)

                if rs is None:
                    Logging.error("could not open record stream")
                    break

                rs.addStream(archNet, sta, loc, cha, startt, endt)
                rsInput = RecordInput(rs, Array.INT, Record.SAVE_RAW)
                eof = False

                while not eof:
                    data = b""

                    while len(data) < self.__bufferSize:
                        try:
                            rec = rsInput.next()

                        except Exception as e:
                            Logging.error("%s" % str(e))
                            eof = True
                            break

                        if rec is None:
                            eof = True
                            break

                        data += rec.raw().str()

                    if data:
                        size += len(data)

                        if archNet == net:
                            yield data

                        else:
                            try:
                                yield self.__override_network(data, net)

                            except Exception as e:
                                Logging.error("could not override network " \
                                              "code: %s" % str(e))

            for tracker in self.__trackerList:
                net_class = 't' if net[0] in "0123456789XYZ" else 'p'

                if size == 0:
                    tracker.line_status(startt, endt, net, sta, cha, loc,
                                        restricted, net_class, True, [],
                                        "fdsnws", "NODATA", 0, "")

                else:
                    tracker.line_status(startt, endt, net, sta, cha, loc,
                                        restricted, net_class, True, [],
                                        "fdsnws", "OK", size, "")
Exemplo n.º 6
0
    def input(self):
        fastsdsPrefix = 'fastsds://'

        if self.__url.startswith(fastsdsPrefix):
            fastsds = SDS(self.__url[len(fastsdsPrefix):])

        else:
            fastsds = None

        for (net, sta, loc, cha, startt, endt, restricted,
             archNet) in self.__tw:
            if not archNet:
                archNet = net

            size = 0

            if fastsds:
                start = dateutil.parser.parse(
                    startt.iso()).replace(tzinfo=None)
                end = dateutil.parser.parse(endt.iso()).replace(tzinfo=None)

                for data in fastsds.getRawBytes(start, end, archNet, sta, loc,
                                                cha, self.__bufferSize):
                    size += len(data)

                    if archNet == net:
                        yield data

                    else:
                        try:
                            yield self.__override_network(data, net)

                        except Exception, e:
                            Logging.error(
                                "could not override network code: %s" % str(e))

            else:
                rs = RecordStream.Open(self.__url)

                if rs is None:
                    Logging.error("could not open record stream")
                    break

                rs.addStream(archNet, sta, loc, cha, startt, endt)
                rsInput = RecordInput(rs, Array.INT, Record.SAVE_RAW)
                eof = False

                while not eof:
                    data = ""

                    while len(data) < self.__bufferSize:
                        try:
                            rec = rsInput.next()

                        except Exception, e:
                            Logging.error("%s" % str(e))
                            eof = True
                            break

                        if rec is None:
                            eof = True
                            break

                        data += rec.raw().str()

                    if data:
                        size += len(data)

                        if archNet == net:
                            yield data

                        else:
                            try:
                                yield self.__override_network(data, net)

                            except Exception, e:
                                Logging.error(
                                    "could not override network code: %s" %
                                    str(e))
Exemplo n.º 7
0
	def input(self):
		fastsdsPrefix = 'fastsds://'

		if self.__url.startswith(fastsdsPrefix):
			fastsds = SDS(self.__url[len(fastsdsPrefix):])

		else:
			fastsds = None

		for (net, sta, loc, cha, startt, endt, restricted, archNet) in self.__tw:
			if not archNet:
				archNet = net

			size = 0

			if fastsds:
				start = dateutil.parser.parse(startt.iso()).replace(tzinfo=None)
				end = dateutil.parser.parse(endt.iso()).replace(tzinfo=None)

				for data in fastsds.getRawBytes(start, end, archNet, sta, loc, cha, self.__bufferSize):
					size += len(data)

					if archNet == net:
						yield data

					else:
						try:
							yield self.__override_network(data, net)

						except Exception, e:
							Logging.error("could not override network code: %s" % str(e))

			else:
				rs = RecordStream.Open(self.__url)

				if rs is None:
					Logging.error("could not open record stream")
					break

				rs.addStream(archNet, sta, loc, cha, startt, endt)
				rsInput = RecordInput(rs, Array.INT, Record.SAVE_RAW)
				eof = False

				while not eof:
					data = ""

					while len(data) < self.__bufferSize:
						try:
							rec = rsInput.next()

						except Exception, e:
							Logging.error("%s" % str(e))
							eof = True
							break

						if rec is None:
							eof = True
							break

						data += rec.raw().str()

					if data:
						size += len(data)

						if archNet == net:
							yield data

						else:
							try:
								yield self.__override_network(data, net)

							except Exception, e:
								Logging.error("could not override network code: %s" % str(e))