From ff609bc68db7d10a0c4230e3932df7a6914f9d21 Mon Sep 17 00:00:00 2001 From: appleb_m Date: Wed, 20 May 2026 16:11:33 +0200 Subject: [PATCH] DAQ: added end points for local contact panel, needs fixing --- src/aare/daq/server.py | 73 +++++++++++++++++++++++++++++++----------- 1 file changed, 55 insertions(+), 18 deletions(-) diff --git a/src/aare/daq/server.py b/src/aare/daq/server.py index 056e51d0..e136bbb2 100644 --- a/src/aare/daq/server.py +++ b/src/aare/daq/server.py @@ -40,6 +40,7 @@ from aare.daq.server_exception_handler import register_exception_handlers from aare.common.exception_handler import ( SampleException, UserRightsException, + MaintenanceStateException, ) logger = setup_logger("aareDAQ") @@ -548,25 +549,45 @@ async def initialise_smargon(token: str = Depends(oauth2_scheme)) -> dict: "message": "Smargon initialised.", } +def bec_load_user_macros(self): + self.__cfg.try_set_busy(timeout=360) + try: + self.__devs.bec_worker.load_user_macros() + self.__cfg.state_busy = False + except Exception as e: + self.__cfg.state_busy = False + logger.error(f"Failed to load BEC user macros: {e}") + raise -@app.post("/detector/initialize") -async def initialise_detector(token: str = Depends(oauth2_scheme)) -> dict: - """ - Initialise the detector. Staff only. +def initialise_aerotech(self): + self.__cfg.try_set_busy(timeout=360) + try: + self.__devs.aerotech.home_aerotech() + self.__cfg.state_busy = False + except Exception as e: + self.__cfg.state_busy = False + logger.error(f"Failed to initialise Aerotech: {e}") + raise - Args: - token: OAuth2 access token. +def detector_take_pedestal(self): + self.__cfg.try_set_busy(timeout=360) + try: + self.__jfjoch.take_pedestal() + self.__cfg.state_busy = False + except Exception as e: + self.__cfg.state_busy = False + logger.error(f"Failed to take detector pedestal: {e}") + raise - Returns: - Dictionary with status and message. - """ - data = auth.parse_token(token) - auth.check_jwt_staff_only(data) - daq.initialise_detector() - return { - "ok": True, - "message": "Detector initialised.", - } +def initialise_detector(self): + self.__cfg.try_set_busy(timeout=360) + try: + self.__jfjoch.initialize() + self.__cfg.state_busy = False + except Exception as e: + self.__cfg.state_busy = False + logger.error(f"Failed to initialise detector: {e}") + raise @app.post("/beamline/goto_abr_meas_pos") async def goto_abr_meas_pos(token: str = Depends(oauth2_scheme)): @@ -787,7 +808,7 @@ async def park_and_dry(token: str = Depends(oauth2_scheme)): Dictionary with status and message. """ auth.check_jwt_rw(cfg, auth.parse_token(token)) - daq.park_and_dry() + daq.park_and_dry(park=True) return { "ok": True, "message": "TELL has been dried and parked", @@ -806,7 +827,7 @@ async def tell_dry(token: str = Depends(oauth2_scheme)) -> dict: """ data = auth.parse_token(token) auth.check_jwt_staff_only(data) - daq.tell_dry() + daq.park_and_dry(park=False) return { "ok": True, "message": "TELL dry cycle completed.", @@ -2195,6 +2216,22 @@ async def set_camera_source(use_zmq: bool, token: str = Depends(oauth2_scheme)): daq._AareDAQ__devs.set_camera_source(use_zmq) return {"source": daq._AareDAQ__devs.samcam_source} +@app.post("/state/maintenance") +async def maintenance(token: str = Depends(oauth2_scheme)) -> str: + """ + Transition beamline state to Maintenance. Staff only. + + Args: + token: OAuth2 access token. + + Returns: + "OK" on success. + """ + auth.check_jwt_staff(cfg, auth.parse_token(token)) + cfg.state = BeamlineStateEnum.Maintenance + logger.warning("Beamline state set to Maintenance via protected endpoint.") + raise MaintenanceStateException("Beamline was set to Maintenance. Automation must stop.") + def main(): # Remove in production!