Skip to content
Snippets Groups Projects
Commit 326439fa authored by Jan David Mol's avatar Jan David Mol
Browse files

Merge branch 'L2SS-399_12-10-2021_add_statistics_writer_reconnect' into 'master'

L2SS-399: added reconnect option

Closes L2SS-399

See merge request !155
parents e926817a b00cc4e8
No related branches found
No related tags found
1 merge request!155L2SS-399: added reconnect option
...@@ -54,6 +54,15 @@ class tcp_receiver(receiver): ...@@ -54,6 +54,15 @@ class tcp_receiver(receiver):
super().__init__(fd=self.sock.fileno()) super().__init__(fd=self.sock.fileno())
def reconnect(self):
self.fd = None
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.connect((self.host, self.port))
self.fd = self.sock.fileno()
return True
class file_receiver(receiver): class file_receiver(receiver):
def __init__(self, filename): def __init__(self, filename):
self.filename = filename self.filename = filename
......
...@@ -2,23 +2,28 @@ import argparse ...@@ -2,23 +2,28 @@ import argparse
from receiver import tcp_receiver, file_receiver from receiver import tcp_receiver, file_receiver
from hdf5_writer import hdf5_writer from hdf5_writer import hdf5_writer
import time
from datetime import datetime
import sys import sys
import signal import signal
import logging import logging
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO, format = '%(asctime)s:%(levelname)s: %(message)s')
logger = logging.getLogger("statistics_writer") logger = logging.getLogger("statistics_writer")
parser = argparse.ArgumentParser(description='Converts a stream of statistics packets into HDF5 files.') parser = argparse.ArgumentParser(description='Converts a stream of statistics packets into HDF5 files.')
parser.add_argument('-a', '--host', type=str, help='the host to connect to') parser.add_argument('-a', '--host', type=str, help='The host to connect to.')
parser.add_argument('-p', '--port', type=int, default=0, help='the port to connect to, or 0 to use default port for the selected mode (default: %(default)s)') parser.add_argument('-p', '--port', type=int, default=0, help='The port to connect to, or 0 to use default port for the selected mode. (default: %(default)s)')
parser.add_argument('-f', '--file', type=str, help='the file to read from') parser.add_argument('-f', '--file', type=str, help='The file to read from. (will ignore --host and --port)')
parser.add_argument('-m', '--mode', type=str, choices=['SST', 'XST', 'BST'], default='SST', help='sets the statistics type to be decoded options (default: %(default)s)') parser.add_argument('-m', '--mode', type=str, choices=['SST', 'XST', 'BST'], default='SST', help='Sets the statistics type to be decoded options. (default: %(default)s)')
parser.add_argument('-i', '--interval', type=float, default=3600, nargs="?", help='The time between creating new files in seconds (default: %(default)s)') parser.add_argument('-i', '--interval', type=float, default=3600, nargs="?", help='The time between creating new files in seconds. (default: %(default)s)')
parser.add_argument('-o', '--output_dir', type=str, default=".", nargs="?", help='specifies the folder to write all the files (default: %(default)s)') parser.add_argument('-o', '--output_dir', type=str, default=".", nargs="?", help='Specifies the folder to write all the files. (default: %(default)s)')
parser.add_argument('-v', '--debug', dest='debug', action='store_true', default=False, help='increase log output') parser.add_argument('-d', '--decimation', type=int, default=1, help='Configure the writer to only store one every n samples. Saves storage space.')
parser.add_argument('-d', '--decimation', type=int, default=1, help='Configure the writer to only store one every n samples. Saves storage space') parser.add_argument('-v', '--debug', dest='debug', action='store_true', default=False, help='Increase log output.')
parser.add_argument('-r', '--reconnect', dest='reconnect', action='store_true', default=False, help='Set the writer to keep trying to reconnect whenever connection is lost. (default: %(default)s)')
if __name__ == "__main__": if __name__ == "__main__":
...@@ -31,8 +36,9 @@ if __name__ == "__main__": ...@@ -31,8 +36,9 @@ if __name__ == "__main__":
output_dir = args.output_dir output_dir = args.output_dir
interval = args.interval interval = args.interval
mode = args.mode mode = args.mode
debug = args.debug
decimation = args.decimation decimation = args.decimation
debug = args.debug
reconnect = args.reconnect
if decimation < 1: if decimation < 1:
raise ValueError("Please use an integer --Decimation value 1 or higher to only store one every n statistics' ") raise ValueError("Please use an integer --Decimation value 1 or higher to only store one every n statistics' ")
...@@ -60,13 +66,27 @@ if __name__ == "__main__": ...@@ -60,13 +66,27 @@ if __name__ == "__main__":
# start looping # start looping
try: try:
while True: while True:
packet = receiver.get_packet() try:
writer.next_packet(packet) packet = receiver.get_packet()
writer.next_packet(packet)
except EOFError:
if reconnect and not filename:
logger.warning("Connection lost, attempting to reconnect")
while True:
try:
receiver.reconnect()
except Exception as e:
logger.warning(f"Could not reconnect: {e.__class__.__name__}: {e}")
time.sleep(10)
else:
break
logger.warning("Reconnected! Resuming operations")
else:
logger.info("End of input.")
raise SystemExit
except KeyboardInterrupt: except KeyboardInterrupt:
# user abort, don't complain # user abort, don't complain
logger.warning("Received keyboard interrupt. Stopping.") logger.warning("Received keyboard interrupt. Stopping.")
except EOFError:
# done processing all input, don't complain
logger.info("End of input.")
finally: finally:
writer.close_writer() writer.close_writer()
...@@ -45,6 +45,9 @@ while True: ...@@ -45,6 +45,9 @@ while True:
time.sleep(INTERVAL) time.sleep(INTERVAL)
conn.sendall(data) conn.sendall(data)
except KeyboardInterrupt:
logger.info("Received keyboard interrupt. Stopping.")
exit()
except Exception as e: except Exception as e:
logger.warning(f"Exception occurred: {e}") logger.warning(f"Exception occurred: {e}")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment