diff --git a/brian_polling_manager/error_report/cli.py b/brian_polling_manager/error_report/cli.py index 9e61a52d08e437205a9d91e814fb81bcb95c51a0..d21de54007022c314ec1d1fcbb907fe30f87502b 100644 --- a/brian_polling_manager/error_report/cli.py +++ b/brian_polling_manager/error_report/cli.py @@ -220,12 +220,19 @@ def select_error_fields(errors, mapping): def interface_errors( - client: InfluxDBClient, interface_info, errors, exclusions=(), raise_on_errors=False + error_points_today, + error_points_yesterday, + interface_info, + errors, + exclusions=(), + raise_on_errors=False, ): """ Retrieves error counters from influx - :param client: InfluxDBClient for connecting to influx + :param error_points_today: todays errors as a return value of ``get_error_points`` + :param error_points_yesterday: yesterdays errors as a return value of + ``get_error_points`` :param interface_info: a dict of {(router, interface): info_dict} with interface information coming from invprov (ie. the output from `get_relevant_interfaces`_) :param errors: A dict of (input_data_field: result_field) for every error to report @@ -236,11 +243,11 @@ def interface_errors( """ todays_data = { key: select_error_fields(val, mapping=errors) - for key, val in get_error_points(client, INFLUX_TIME_WINDOW_TODAY).items() + for key, val in error_points_today.items() } yesterdays_data = { key: select_error_fields(val, mapping=errors) - for key, val in get_error_points(client, INFLUX_TIME_WINDOW_YESTERDAY).items() + for key, val in error_points_yesterday.items() } result = {"interfaces": [], "excluded_interfaces": []} @@ -343,7 +350,10 @@ def main(config: dict): with client: logger.info("Retrieving error points from influxdb...") all_error_counters = interface_errors( - client, + error_points_today=get_error_points(client, INFLUX_TIME_WINDOW_TODAY), + error_points_yesterday=get_error_points( + client, INFLUX_TIME_WINDOW_YESTERDAY + ), interface_info=all_interfaces, errors=ERROR_FIELDS, exclusions=config["exclude-interfaces"], diff --git a/test/error_report/test_error_report.py b/test/error_report/test_error_report.py index f28fd00a57324efc9f95f21487cd86db2785c1e4..08e1dee23792b3b16c7d94cfef7e55dedea172da 100644 --- a/test/error_report/test_error_report.py +++ b/test/error_report/test_error_report.py @@ -44,6 +44,7 @@ def small_inventory(): @pytest.fixture def mock_influx_client(): + class FakeInfluxClient: """ Fake influx client, see `create_error_point` for usage how to set it up @@ -52,8 +53,8 @@ def mock_influx_client(): INFLUX_ERROR_FIELDS = {v.replace("-", "_"): k for k, v in ERROR_FIELDS.items()} def __init__(self) -> None: - self.today = [] - self.yesterday = [] + self.today = {} + self.yesterday = {} def __enter__(self): pass @@ -65,26 +66,37 @@ def mock_influx_client(): converted_payload = { self.INFLUX_ERROR_FIELDS[k]: v for k, v in payload.items() } - point = ( - ("errors", {"hostname": hostname, "interface_name": interface}), - iter([converted_payload]), - ) + if timestamp == "today": - return self.today.append(point) - if timestamp == "yesterday": - return self.yesterday.append(point) - raise ValueError( - "'timestamp' argument must be either 'today' or 'yesterday'" - ) + self.today[(hostname, interface)] = converted_payload + elif timestamp == "yesterday": + self.yesterday[(hostname, interface)] = converted_payload + else: + raise ValueError( + "'timestamp' argument must be either 'today' or 'yesterday'" + ) def query(self, q): result = Mock() if INFLUX_TIME_WINDOW_YESTERDAY in q: - result.items.return_value = self.yesterday + result.items.return_value = self.points_as_influx(self.yesterday) else: - result.items.return_value = self.today + result.items.return_value = self.points_as_influx(self.today) return result + @staticmethod + def points_as_influx(points: dict): + return [ + ( + ( + "errors", + {"hostname": hostname, "interface_name": interface}, + ), + iter([errors]), + ) + for (hostname, interface), errors in points.items() + ] + return FakeInfluxClient() @@ -115,7 +127,8 @@ def get_interface_errors(small_inventory, mock_influx_client): def _get_interface_errors(**kwargs): defaults = { - "client": mock_influx_client, + "error_points_today": mock_influx_client.today, + "error_points_yesterday": mock_influx_client.yesterday, "interface_info": interfaces, "errors": ERROR_FIELDS, }