Exemple #1
0
    def _read(self):
        """
        Read one line at a time, publish as a packet with TS of 0
        It is expected that the driver will use the internal timestamp
        of the record as the definitive timestamp
        """
        if self._filehandle is None and not self.files:
            log.msg('Completed reading specified port agent logs, exiting...')
            reactor.stop()
            return

        if self._filehandle is None:
            name = self.files.pop(0)
            log.msg('Begin reading:', name)
            self._filehandle = open(name, 'r')

        data = self._filehandle.read(1024)
        if data != '':
            header = PacketHeader(packet_type=PacketType.FROM_INSTRUMENT, payload_size=len(data), packet_time=0)
            header.set_checksum(data)
            packet = [Packet(payload=data, header=header)]
            self.router.got_data(packet)

        else:
            self._filehandle.close()
            self._filehandle = None

        # allow the reactor loop to process other events
        reactor.callLater(0.01, self._read)
Exemple #2
0
    def _read(self):
        """
        Read a chunk of data and inspect it for a complete DIGI ASCII record. When found, publish.
        """
        if self._filehandle is None and not self.files:
            log.msg('Completed reading specified port agent logs')
            return

        if self._filehandle is None:
            name = self.files.pop(0)
            log.msg('Begin reading:', name)
            self._filehandle = open(name, 'r')

        chunk = self._filehandle.read(1024)
        if chunk != '':
            self.buffer += chunk
            new_index = 0
            for match in self.ooi_ts_regex.finditer(self.buffer):
                payload = match.group(2)
                try:
                    packet_time = string_to_ntp_date_time(match.group(1))
                    header = PacketHeader(packet_type=PacketType.FROM_INSTRUMENT, payload_size=len(payload),
                                          packet_time=packet_time)
                    header.set_checksum(payload)
                    packet = Packet(payload=payload, header=header)
                    self.router.got_data([packet])
                except ValueError:
                    log.err('Unable to extract timestamp from record: %r' % match.group())
                new_index = match.end()

            if new_index > 0:
                self.buffer = self.buffer[new_index:]

            if len(self.buffer) > self.MAXBUF:
                self.buffer = self.buffer[-self.MAXBUF:]

        else:
            self._filehandle.close()
            self._filehandle = None

        # allow the reactor loop to process other events
        reactor.callLater(0.01, self._read)