diff --git a/devices/clients/sst_client.py b/devices/clients/sst_client.py index c8506e07c75148707dcbc227931d01aa05434588..8ca72e75e7c771b711aafb3c193c616fd3dee1d5 100644 --- a/devices/clients/sst_client.py +++ b/devices/clients/sst_client.py @@ -159,7 +159,7 @@ class SST_collector(Thread): self.parameters = { "nof_packets": numpy.uint64(0), "last_packet_timestamp": numpy.uint64(0), - "queue_fill_percentage": numpy.float32(100 * self.queue.qsize() / self.queue.maxsize), + "queue_fill_percentage": numpy.float32(100 * self.queue.qsize() / self.queue.maxsize if self.queue.maxsize else 0), # Packet count for packets that could not be parsed as SSTs "nof_invalid_packets": numpy.uint64(0), @@ -172,7 +172,7 @@ class SST_collector(Thread): # Last value array we've constructed out of the packets "last_values": numpy.zeros((self.MAX_INPUTS, self.MAX_SUBBANDS), dtype=numpy.uint64), - "last_timestamps": numpy.zeros((self.MAX_INPUTS,), dtype=numpy.uint64), + "last_timestamps": numpy.zeros((self.MAX_INPUTS,), dtype=numpy.float64), "integration_intervals": numpy.zeros((self.MAX_INPUTS,), dtype=numpy.float32), } @@ -180,25 +180,26 @@ class SST_collector(Thread): self.start() def run(self): - logging.debug("starting SST thread") + logging.info("starting SST thread") while True: self.last_packet = self.queue.get() if self.last_packet is None: - self.queue.clear() + logging.info("shutting down SST thread") break self.process_packet(self.last_packet) - def __del__(self): + def join(self, timeout=0): + logging.info("sending shutdown to SST thread") self.queue.put(None) - self.join() + super().join(timeout) def process_packet(self, packet): self.parameters["nof_packets"] += 1 self.parameters["last_packet_timestamp"] = numpy.uint64(int(time.time())) - self.parameters["queue_fill_percentage"] = numpy.double(100 * self.queue.qsize() / self.queue.maxsize) + self.parameters["queue_fill_percentage"] = numpy.double(100 * self.queue.qsize() / self.queue.maxsize if self.queue.maxsize else 0) try: fields = StatisticsPacket(packet) @@ -226,6 +227,6 @@ class SST_collector(Thread): # process the packet self.parameters["nof_valid_packets"][input_index] += 1 - self.parameters["last_values"][input_index] = fields.payload_sst - self.parameters["last_timestamps"][input_index] = numpy.uint64(int(self.collecting_timestamp.timestamp())) + self.parameters["last_values"][input_index][:fields.nof_statistics_per_packet] = fields.payload_sst + self.parameters["last_timestamps"][input_index] = numpy.float64(fields.timestamp().timestamp()) self.parameters["integration_intervals"][input_index] = fields.integration_interval()