diff --git a/gui/src/aaregui/gui.py b/gui/src/aaregui/gui.py index a8074443..56df6cff 100644 --- a/gui/src/aaregui/gui.py +++ b/gui/src/aaregui/gui.py @@ -1,101 +1,128 @@ import sys +import traceback from PySide6.QtCore import QCommandLineParser, QCommandLineOption -from PySide6.QtWidgets import QApplication, QDialog +from PySide6.QtWidgets import QApplication, QMessageBox + from aaredaqlib.logger_config import setup_logger from aaregui.main_window import MainWindow -from aaregui.widgets.login import LoginDialog +#from aaregui.widgets.login import LoginDialog from aaredaqlib.beamline import MXBeamline, mx_beamline from aaregui.auth import auth logger = setup_logger("aareGUI") if __name__ == "__main__": - app = QApplication(sys.argv) - - app.setApplicationName("AareGUI") - app.setApplicationVersion("0.1.0") - app.setOrganizationName("PSI") - app.setOrganizationDomain("psi.ch") - - # Create the parser - parser = QCommandLineParser() - parser.setApplicationDescription("PSI AareGUI") - parser.addHelpOption() # Adds --help option - parser.addVersionOption() # Adds --version option - - match mx_beamline(): - case MXBeamline.X06DA: - default_url = "http://mx-x06da-queue-01.psi.ch:5210" - default_zmq_addr = "tcp://x06da-pserv-01:9089" #129.129.110.12:9089 - default_pred_zmq_addr = "tcp://mx-ml:9091" - case MXBeamline.X10SA: - default_url = "http://mx-x10sa-queue-01.psi.ch:5210" - default_zmq_addr = "" - default_pred_zmq_addr = "" - case MXBeamline.X06SA: - default_url = "http://mx-x06sa-queue-01.psi.ch:5210" - default_zmq_addr = "" - default_pred_zmq_addr = "" - case _: - default_url = "" - default_zmq_addr = "" - default_pred_zmq_addr = "" - - # Add custom options as needed - urlOption = QCommandLineOption(["u", "aaredaq-url"], - "Base AareDAQ URL", - "url", default_url) - parser.addOption(urlOption) - - defaultImage = QCommandLineOption(["i", "image"], - "Default image to display in absence of the ZMQ stream", - "image") - parser.addOption(defaultImage) - - cameraZeroMQ = QCommandLineOption(["s", "sample-camera-zmq"], - "Sample camera ZeroMQ URL", - "sample-camera-zmq", - default_zmq_addr) - parser.addOption(cameraZeroMQ) - - predZmqOption = QCommandLineOption( - ["p", "pred-zmq"], - "Prediction ZeroMQ URL (PUB) to subscribe to (e.g. tcp://mx-ml:9091)", - "pred-zmq", - default_pred_zmq_addr - ) - parser.addOption(predZmqOption) - - parser.process(app) - - base_url = parser.value(urlOption) - if base_url == "" or base_url.lower() == "none": - base_url = None - - zmq_addr = parser.value(cameraZeroMQ) - if zmq_addr == "": - zmq_addr = None - - pred_zmq_addr = parser.value(predZmqOption) - if pred_zmq_addr == "": - pred_zmq_addr = None - - if parser.isSet(defaultImage): - default_image = parser.value(defaultImage) - else: - default_image = None try: - token = auth(base_url) + app = QApplication(sys.argv) + app.setApplicationName("AareGUI") + app.setApplicationVersion("0.1.0") + app.setOrganizationName("PSI") + app.setOrganizationDomain("psi.ch") + + # Create the parser + parser = QCommandLineParser() + parser.setApplicationDescription("PSI AareGUI") + parser.addHelpOption() # Adds --help option + parser.addVersionOption() # Adds --version option + + match mx_beamline(): + case MXBeamline.X06DA: + default_url = "http://mx-x06da-queue-01.psi.ch:5210" + default_zmq_addr = "tcp://x06da-pserv-01:9089" #129.129.110.12:9089 + default_pred_zmq_addr = "tcp://mx-ml:9091" + case MXBeamline.X10SA: + default_url = "http://mx-x10sa-queue-01.psi.ch:5210" + default_zmq_addr = "" + default_pred_zmq_addr = "" + case MXBeamline.X06SA: + default_url = "http://mx-x06sa-queue-01.psi.ch:5210" + default_zmq_addr = "" + default_pred_zmq_addr = "" + case _: + default_url = "" + default_zmq_addr = "" + default_pred_zmq_addr = "" + + # Add custom options as needed + urlOption = QCommandLineOption(["u", "aaredaq-url"], + "Base AareDAQ URL", + "url", default_url) + parser.addOption(urlOption) + + defaultImage = QCommandLineOption(["i", "image"], + "Default image to display in absence of the ZMQ stream", + "image") + parser.addOption(defaultImage) + + cameraZeroMQ = QCommandLineOption(["s", "sample-camera-zmq"], + "Sample camera ZeroMQ URL", + "sample-camera-zmq", + default_zmq_addr) + parser.addOption(cameraZeroMQ) + + predZmqOption = QCommandLineOption( + ["p", "pred-zmq"], + "Prediction ZeroMQ URL (PUB) to subscribe to (e.g. tcp://mx-ml:9091)", + "pred-zmq", + default_pred_zmq_addr + ) + parser.addOption(predZmqOption) + + parser.process(app) + + base_url = parser.value(urlOption) + if base_url == "" or base_url.lower() == "none": + base_url = None + + zmq_addr = parser.value(cameraZeroMQ) + if zmq_addr == "": + zmq_addr = None + + pred_zmq_addr = parser.value(predZmqOption) + if pred_zmq_addr == "": + pred_zmq_addr = None + + if parser.isSet(defaultImage): + default_image = parser.value(defaultImage) + else: + default_image = None + + try: + token = auth(base_url) + logger.info("Authentication successful") + except Exception as e: + logger.error(f"Cannot connect to AareDAQ server. Exiting. {e}") + logger.error(traceback.format_exc()) + QMessageBox.critical( + None, + "Authentication Error", + f"Cannot connect to AareDAQ server:\n{str(e)}\n\n Please check the server is running and your network connection." + ) + sys.exit(1) + + + win = MainWindow(base_url=base_url, + token=token, + default_image=default_image, + zmq_addr=zmq_addr, + pred_zmq_addr=pred_zmq_addr) + win.show() + sys.exit(app.exec()) except Exception as e: - logger.error(f"Cannot connect to AareDAQ server. Exiting. {e}") - sys.exit() + logger.error(f"Error starting GUI: {e}") + logger.error(f"Traceback: {traceback.format_exc()}") + + try: + QMessageBox.critical( + None, + "Fatal Error", + f"An error occurred during startup:\n\n{str(e)}\n\nSee console for details." + ) + except: + pass + + sys.exit(1) + - win = MainWindow(base_url=base_url, - token=token, - default_image=default_image, - zmq_addr=zmq_addr, - pred_zmq_addr=pred_zmq_addr) - win.show() - sys.exit(app.exec())