Skip to content
Snippets Groups Projects
Commit 55f627d9 authored by Pelle Koster's avatar Pelle Koster
Browse files

small refactor of report-interface-errors

parent 5bf037af
No related branches found
No related tags found
No related merge requests found
...@@ -220,12 +220,19 @@ def select_error_fields(errors, mapping): ...@@ -220,12 +220,19 @@ def select_error_fields(errors, mapping):
def interface_errors( 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 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 :param interface_info: a dict of {(router, interface): info_dict} with interface
information coming from invprov (ie. the output from `get_relevant_interfaces`_) 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 :param errors: A dict of (input_data_field: result_field) for every error to report
...@@ -236,11 +243,11 @@ def interface_errors( ...@@ -236,11 +243,11 @@ def interface_errors(
""" """
todays_data = { todays_data = {
key: select_error_fields(val, mapping=errors) 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 = { yesterdays_data = {
key: select_error_fields(val, mapping=errors) 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": []} result = {"interfaces": [], "excluded_interfaces": []}
...@@ -343,7 +350,10 @@ def main(config: dict): ...@@ -343,7 +350,10 @@ def main(config: dict):
with client: with client:
logger.info("Retrieving error points from influxdb...") logger.info("Retrieving error points from influxdb...")
all_error_counters = interface_errors( 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, interface_info=all_interfaces,
errors=ERROR_FIELDS, errors=ERROR_FIELDS,
exclusions=config["exclude-interfaces"], exclusions=config["exclude-interfaces"],
......
...@@ -44,6 +44,7 @@ def small_inventory(): ...@@ -44,6 +44,7 @@ def small_inventory():
@pytest.fixture @pytest.fixture
def mock_influx_client(): def mock_influx_client():
class FakeInfluxClient: class FakeInfluxClient:
""" """
Fake influx client, see `create_error_point` for usage how to set it up Fake influx client, see `create_error_point` for usage how to set it up
...@@ -52,8 +53,8 @@ def mock_influx_client(): ...@@ -52,8 +53,8 @@ def mock_influx_client():
INFLUX_ERROR_FIELDS = {v.replace("-", "_"): k for k, v in ERROR_FIELDS.items()} INFLUX_ERROR_FIELDS = {v.replace("-", "_"): k for k, v in ERROR_FIELDS.items()}
def __init__(self) -> None: def __init__(self) -> None:
self.today = [] self.today = {}
self.yesterday = [] self.yesterday = {}
def __enter__(self): def __enter__(self):
pass pass
...@@ -65,26 +66,37 @@ def mock_influx_client(): ...@@ -65,26 +66,37 @@ def mock_influx_client():
converted_payload = { converted_payload = {
self.INFLUX_ERROR_FIELDS[k]: v for k, v in payload.items() 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": if timestamp == "today":
return self.today.append(point) self.today[(hostname, interface)] = converted_payload
if timestamp == "yesterday": elif timestamp == "yesterday":
return self.yesterday.append(point) self.yesterday[(hostname, interface)] = converted_payload
raise ValueError( else:
"'timestamp' argument must be either 'today' or 'yesterday'" raise ValueError(
) "'timestamp' argument must be either 'today' or 'yesterday'"
)
def query(self, q): def query(self, q):
result = Mock() result = Mock()
if INFLUX_TIME_WINDOW_YESTERDAY in q: if INFLUX_TIME_WINDOW_YESTERDAY in q:
result.items.return_value = self.yesterday result.items.return_value = self.points_as_influx(self.yesterday)
else: else:
result.items.return_value = self.today result.items.return_value = self.points_as_influx(self.today)
return result 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() return FakeInfluxClient()
...@@ -115,7 +127,8 @@ def get_interface_errors(small_inventory, mock_influx_client): ...@@ -115,7 +127,8 @@ def get_interface_errors(small_inventory, mock_influx_client):
def _get_interface_errors(**kwargs): def _get_interface_errors(**kwargs):
defaults = { defaults = {
"client": mock_influx_client, "error_points_today": mock_influx_client.today,
"error_points_yesterday": mock_influx_client.yesterday,
"interface_info": interfaces, "interface_info": interfaces,
"errors": ERROR_FIELDS, "errors": ERROR_FIELDS,
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment