From 1af5a3fecb00e21a466dc0382ecb33c40f302457 Mon Sep 17 00:00:00 2001 From: Dmitry Ozerov Date: Sat, 5 Oct 2019 15:07:06 +0200 Subject: [PATCH] protect against writting to /dev/null. try to retrieve data in case first attempt is not successful --- cadump/cadump.py | 29 +++++++++++++++++++++++++---- setup.py | 9 +++++++-- tests/test_download_data.py | 4 ++-- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/cadump/cadump.py b/cadump/cadump.py index 6d54b27..7dd5370 100644 --- a/cadump/cadump.py +++ b/cadump/cadump.py @@ -58,9 +58,12 @@ def download_data(config): # append _CA to the filename filename = config["parameters"]["output_file"] - new_filename = filename[:-3]+"_CA"+filename[-3:] + if filename != "/dev/null": + new_filename = filename[:-3]+"_CA"+filename[-3:] + else: + new_filename = None - logger.info("Retrieving data for interval start: " + str(start_date) + " end: " + str(end_date)) + logger.info("Retrieving data for interval start: " + str(start_date) + " end: " + str(end_date) + " . From " + base_url) # data = data_api.get_data(channel_list, start=start_date, end=end_date, base_url=base_url) data = get_data(channel_list, start=start_date, end=end_date, base_url=base_url) @@ -69,8 +72,9 @@ def download_data(config): open(new_filename+"_NO_DATA", 'a').close() else: - logger.info("Persist data to hdf5 file") - data_api.to_hdf5(data, new_filename, overwrite=True, compression=None, shuffle=False) + if new_filename: + logger.info("Persist data to hdf5 file") + data_api.to_hdf5(data, new_filename, overwrite=True, compression=None, shuffle=False) def read_channels(filename): @@ -92,12 +96,29 @@ def get_data(channel_list, start=None, end=None, base_url=None): "channels": channel_list, "fields": ["pulseId", "globalSeconds", "globalDate", "value", "eventCount"]} + logger.info(query) + response = requests.post(base_url + '/query', json=query) # Check for successful return of data + if response.status_code != 200: + #raise RuntimeError("Unable to retrieve data from server: ", response) + logger.info("Data retrievali failed, sleep for another time and try") + + itry = 0 + while itry < 5: + itry += 1 + time.sleep(60) + response = requests.post(base_url + '/query', json=query) + if response.status_code == 200: + break + logger.info("Data retrieval failed, post attempt %d" % itry) + if response.status_code != 200: raise RuntimeError("Unable to retrieve data from server: ", response) + logger.info("Data retieval is successful") + data = response.json() return data_api.client._build_pandas_data_frame(data, index_field="globalDate") diff --git a/setup.py b/setup.py index 9072d51..69ac8de 100644 --- a/setup.py +++ b/setup.py @@ -6,5 +6,10 @@ setup( author="Paul Scherrer Institute", author_email="daq@psi.ch", description="Interface to dump data from archiver/databuffer", - packages=["cadump"] -) \ No newline at end of file + packages=["cadump"], + entry_points={ + 'console_scripts': [ + 'cadump_server = cadump.cadump:main', + ], + } +) diff --git a/tests/test_download_data.py b/tests/test_download_data.py index b85e1a0..87a7194 100644 --- a/tests/test_download_data.py +++ b/tests/test_download_data.py @@ -8,8 +8,8 @@ class TestDownloadData(TestCase): def test_download_data(self): config = { 'range': { - 'startPulseId': 7314794868, - 'endPulseId': 7314798868 + 'startPulseId': 9618913001, + 'endPulseId': 9618923000 }, 'parameters': {