diff --git a/lofar_station_client/requests/prometheus.py b/lofar_station_client/requests/prometheus.py index fe318742aa75820b768f83d6d784df4f58f60ed8..192cb90943a2ab8fb28e387ee041d5e7d7e1e411 100644 --- a/lofar_station_client/requests/prometheus.py +++ b/lofar_station_client/requests/prometheus.py @@ -211,9 +211,9 @@ class PrometheusRequests: pass as `json["data"]["result"]` from raw json. """ - def ord_index(metric: dict) -> str: + def ord_index(metric: dict) -> Tuple[str]: """Generate the ordered dict index from json metric""" - return f"{metric['x']}.{metric['y']}" + return (metric['x'], metric['y']) result_dict = OrderedDict() for json_result in json_results: @@ -233,15 +233,14 @@ class PrometheusRequests: def _expand_convert_results_3d( merged_results: OrderedDict, ) -> List[List[List[Tuple[datetime, any]]]]: - """Expand the results into [x][y][tuple[datetime, value]] and convert values + """Expand the results into [y][x][tuple[datetime, value]] and convert values :param merged_results: Result from _merge_result_data """ - def str_to_coords(coordinate: str) -> (int, int): + def str_to_coords(coordinate: Tuple[str]) -> (int, int): """Convert the string coordinate""" - split = coordinate.split(".", 1) - return int(split[0]), int(split[1]) + return int(coordinate[0]), int(coordinate[1]) def convert_row(row: List[any], converter: Callable): return datetime.fromtimestamp(row[0]), converter(row[1]) @@ -250,13 +249,15 @@ class PrometheusRequests: for key, values in merged_results.items(): x_index, y_index = str_to_coords(key) + # Store as [y][x], just like Tango + # Ensure outermost array sufficiently sized - while len(results) <= x_index: + while len(results) <= y_index: results.append([[]]) # Ensure internal array sufficiently sized - while len(results[x_index]) <= y_index: - results[x_index].append([]) + while len(results[y_index]) <= x_index: + results[y_index].append([]) # Per result determine the callable type converter type_converter = PrometheusRequests._get_type_converter( @@ -264,6 +265,6 @@ class PrometheusRequests: ) result = [convert_row(row, type_converter) for row in values["values"]] - results[x_index][y_index].extend(result) + results[y_index][x_index].extend(result) return results diff --git a/tests/requests/test_prometheus.py b/tests/requests/test_prometheus.py index 6e5d4ef49151086ecc50d17fb7bd70065e394ae1..94cc0ea69fd47d539645becf5e16c8fd7a616e4e 100644 --- a/tests/requests/test_prometheus.py +++ b/tests/requests/test_prometheus.py @@ -301,7 +301,7 @@ class PrometheusTest(base.TestCase): for result in reference_data["data"]["result"]: metric = result["metric"] - index = f"{metric['x']}.{metric['y']}" + index = (metric['x'], metric['y']) result_dict_timestamps = [ result[0] for result in result_dict[index]["values"] @@ -318,8 +318,7 @@ class PrometheusTest(base.TestCase): def str_to_coords(coordinate: str) -> (int, int): """Convert the string coordinate""" - split = coordinate.split(".", 1) - return int(split[0]), int(split[1]) + return int(coordinate[0]), int(coordinate[1]) for key, result in result_dict.items(): x, y = str_to_coords(key)