Skip to content
Snippets Groups Projects
Commit a4645706 authored by Taya Snijder's avatar Taya Snijder
Browse files

addded reconnect option

parent 5c9b0348
No related branches found
No related tags found
1 merge request!155L2SS-399: added reconnect option
......@@ -54,6 +54,16 @@ class tcp_receiver(receiver):
super().__init__(fd=self.sock.fileno())
def reconnect(self):
try:
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.connect((self.host, self.port))
self.fd = self.sock.fileno()
return True
except ConnectionRefusedError:
return False
class file_receiver(receiver):
def __init__(self, filename):
self.filename = filename
......
......@@ -2,6 +2,9 @@ import argparse
from receiver import tcp_receiver, file_receiver
from hdf5_writer import hdf5_writer
import time
from datetime import datetime
import sys
import signal
......@@ -10,15 +13,16 @@ logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("statistics_writer")
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('-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('-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('-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('-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('-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('-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('-o', '--output_dir', type=str, default=".", nargs="?", help='Specifies the folder to write all the files. (default: %(default)s)')
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__":
......@@ -31,8 +35,9 @@ if __name__ == "__main__":
output_dir = args.output_dir
interval = args.interval
mode = args.mode
debug = args.debug
decimation = args.decimation
debug = args.debug
reconnect = args.reconnect
if decimation < 1:
raise ValueError("Please use an integer --Decimation value 1 or higher to only store one every n statistics' ")
......@@ -60,13 +65,22 @@ if __name__ == "__main__":
# start looping
try:
while True:
packet = receiver.get_packet()
writer.next_packet(packet)
try:
packet = receiver.get_packet()
writer.next_packet(packet)
except EOFError:
if reconnect and not filename:
logger.warning(f"{datetime.now()}\t Connection lost, attempting to reconnect")
while not receiver.reconnect():
time.sleep(10)
logger.warning("no connection")
logger.warning(f"{datetime.now()}\t Reconnected! Resuming operations")
else:
logger.info("End of input.")
raise SystemExit
except KeyboardInterrupt:
# user abort, don't complain
logger.warning("Received keyboard interrupt. Stopping.")
except EOFError:
# done processing all input, don't complain
logger.info("End of input.")
finally:
writer.close_writer()
writer.close_writer()
\ No newline at end of file
......@@ -45,6 +45,8 @@ while True:
time.sleep(INTERVAL)
conn.sendall(data)
except KeyboardInterrupt:
exit()
except Exception as 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