diff --git a/cadump/cadump.py b/cadump/cadump.py index 55a0da2..075590e 100644 --- a/cadump/cadump.py +++ b/cadump/cadump.py @@ -5,6 +5,8 @@ import data_api import requests import dateutil.parser import pytz +import datetime +import time import logging logger = logging.getLogger("logger") @@ -48,6 +50,7 @@ def download_data(config): start_pulse = config["range"]["startPulseId"] end_pulse = config["range"]["endPulseId"] + logger.info("Retrieve pulse-id / data mapping for pulse ids") # start_date, end_date = data_api.get_global_date([start_pulse, end_pulse]) start_date, end_date = get_pulse_id_date_mapping([start_pulse, end_pulse]) @@ -77,32 +80,49 @@ def read_channels(filename): def get_pulse_id_date_mapping(pulse_ids): # See https://jira.psi.ch/browse/ATEST-897 for more details ... - + try: dates = [] for pulse_id in pulse_ids: - query = {"range": {"startPulseId": pulse_id,"endPulseId": 9223372036854775807}, + query = {"range": {"startPulseId": 0,"endPulseId": pulse_id}, "limit": 1, - "ordering": "asc", + "ordering": "desc", "channels": ["SIN-CVME-TIFGUN-EVR0:BEAMOK"], "fields": ["pulseId", "globalDate"]} - # Query server - response = requests.post("https://data-api.psi.ch/sf/query", json=query) + for c in range(1): + # Query server + response = requests.post("https://data-api.psi.ch/sf/query", json=query) - # Check for successful return of data - if response.status_code != 200: - raise RuntimeError("Unable to retrieve data from server: ", response) + # Check for successful return of data + if response.status_code != 200: + raise RuntimeError("Unable to retrieve data from server: ", response) - data = response.json() + data = response.json() - if not pulse_id == data[0]["data"][0]["pulseId"]: - raise RuntimeError('Unable to retrieve mapping') + if not pulse_id == data[0]["data"][0]["pulseId"]: + if c == 0: + ref_date = data[0]["data"][0]["globalDate"] + ref_date = dateutil.parser.parse(ref_date) - date = data[0]["data"][0]["globalDate"] - date = dateutil.parser.parse(date) - dates.append(date) + now_date = datetime.datetime.now() + now_date = pytz.timezone('Europe/Zurich').localize(now_date) + + check_date = ref_date+datetime.timedelta(seconds=20) + delta_date = check_date - now_date + + s = delta_date.seconds + logger.info("retry in " + str(s) + " seconds ") + if not s <= 0: + time.sleep(s) + continue + + raise RuntimeError('Unable to retrieve mapping') + + date = data[0]["data"][0]["globalDate"] + date = dateutil.parser.parse(date) + dates.append(date) return dates except Exception: diff --git a/conda-recipe/meta.yaml b/conda-recipe/meta.yaml index 85b3bd5..f1055c6 100644 --- a/conda-recipe/meta.yaml +++ b/conda-recipe/meta.yaml @@ -1,6 +1,6 @@ package: name: cadump - version: 0.0.4 + version: 0.0.5 source: path: .. diff --git a/setup.py b/setup.py index 27772a3..688de20 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup setup( name="cadump", - version="0.0.4", + version="0.0.5", author="Paul Scherrer Institute", author_email="daq@psi.ch", description="Interface to dump data from archiver/databuffer", diff --git a/tests/test_download_data.py b/tests/test_download_data.py index e5e30e1..c32f7c5 100644 --- a/tests/test_download_data.py +++ b/tests/test_download_data.py @@ -9,7 +9,7 @@ class TestDownloadData(TestCase): config = { 'range': { 'startPulseId': 7314794868, - 'endPulseId': 7314798868 + 'endPulseId': 7414798868 }, 'parameters': {