From 407bc0efd2a9ea1924d593cfeff83073401cd87a Mon Sep 17 00:00:00 2001 From: Dmitry Ozerov Date: Fri, 13 Aug 2021 10:47:51 +0200 Subject: [PATCH] generate acquisiton (unique) number and provide it via rest-api to clients --- sf_daq_broker/broker_manager.py | 35 +++++++++++++++++++++++++++++++++ sf_daq_broker/rest_api.py | 5 +++++ 2 files changed, 40 insertions(+) diff --git a/sf_daq_broker/broker_manager.py b/sf_daq_broker/broker_manager.py index c2cf950..2c88a1c 100644 --- a/sf_daq_broker/broker_manager.py +++ b/sf_daq_broker/broker_manager.py @@ -64,6 +64,41 @@ class BrokerManager(object): def __init__(self, broker_client): self.broker_client = broker_client + def get_next_acquistion_number(self, request=None, remote_ip=None): + + if not request: + return {"status" : "failed", "message" : "request parameters are empty"} + + if not remote_ip: + return {"status" : "failed", "message" : "can not identify from which machine request were made"} + + beamline = ip_to_console(remote_ip) + + if not beamline: + return {"status" : "failed", "message" : "can not determine from which console request came, rejected"} + + if "pgroup" not in request: + return {"status" : "failed", "message" : "no pgroup in request parameters"} + pgroup = request["pgroup"] + + path_to_pgroup = f'/sf/{beamline}/data/{pgroup}/raw/' + if not os.path.exists(path_to_pgroup): + return {"status" : "failed", "message" : f'pgroup directory {path_to_pgroup} not reachable'} + + daq_directory = f'{path_to_pgroup}{DIR_NAME_RUN_INFO}' + if not os.path.exists(daq_directory): + try: + os.mkdir(daq_directory) + except: + return {"status" : "failed", "message" : "no permission or possibility to make run_info directory in pgroup space"} + + if os.path.exists(f'{daq_directory}/CLOSED'): + return {"status" : "failed", "message" : f'{path_to_pgroup} is closed for writing'} + + next_run = get_current_run_number(daq_directory, file_run="LAST_ARUN") + + return {"status" : "ok", "message" : str(next_run) } + def power_on_detector(self, request=None, remote_ip=None): if not request: diff --git a/sf_daq_broker/rest_api.py b/sf_daq_broker/rest_api.py index f29890b..f5c25d4 100644 --- a/sf_daq_broker/rest_api.py +++ b/sf_daq_broker/rest_api.py @@ -30,6 +30,11 @@ def register_rest_interface(app, manager): def power_on_detector(): return manager.power_on_detector(request=bottle.request.json, remote_ip=bottle.request.remote_addr) + @app.get("/get_next_acquistion_number") + def get_next_acquistion_number(): + return manager.get_next_acquistion_number(request=bottle.request.json, remote_ip=bottle.request.remote_addr) + + @app.error(500) def error_handler_500(error): bottle.response.content_type = 'application/json'