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)
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)