From 038184439c90fd88bfffbfe1663a2caa4d29658e Mon Sep 17 00:00:00 2001 From: Daniel Valent Date: Tue, 5 Dec 2023 16:42:04 +0100 Subject: [PATCH] SIMPLE-6020 sped up syncing operational by removing unneeded API calls (#72) * SIMPLE-6020 sped up syncing operational by removing unneeded API calls --- tests/conftest.py | 14 ++++++++++++++ virl2_client/models/lab.py | 12 +++++++++--- virl2_client/models/node.py | 2 +- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 12e73f9..b674adb 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -118,9 +118,23 @@ def respx_mock_with_labs(respx_mock): respx_mock.get( FAKE_HOST_API + f"labs/444a78d1-575c-4746-8469-696e580f17b6/nodes/{node}?operational=true" + f"&exclude_configurations=true" ).respond( json={"operational": {"compute_id": "99c887f5-052e-4864-a583-49fa7c4b68a9"}} ) + respx_mock.get( + FAKE_HOST_API + + "labs/444a78d1-575c-4746-8469-696e580f17b6/nodes?data=true&operational=true&" + "exclude_configurations=true" + ).respond( + json=[ + { + "id": node, + "operational": {"compute_id": "99c887f5-052e-4864-a583-49fa7c4b68a9"}, + } + for node in nodes + ] + ) resp_from_files = ( "labs", "populate_lab_tiles", diff --git a/virl2_client/models/lab.py b/virl2_client/models/lab.py index bf4d0e3..a248f25 100644 --- a/virl2_client/models/lab.py +++ b/virl2_client/models/lab.py @@ -57,6 +57,8 @@ class Lab: "lab": "labs/{lab_id}", "nodes": "labs/{lab_id}/nodes", "nodes_populated": "labs/{lab_id}/nodes?populate_interfaces=true", + "nodes_operational": "labs/{lab_id}/nodes?data=true&operational=true" + "&exclude_configurations=true", "links": "labs/{lab_id}/links", "interfaces": "labs/{lab_id}/interfaces", "simulation_stats": "labs/{lab_id}/simulation_stats", @@ -1652,7 +1654,11 @@ def sync_operational(self) -> None: response = self._session.get(url).json() res_pools = self._resource_pool_manager.get_resource_pools_by_ids(response) self._resource_pools = list(res_pools.values()) - self._last_sync_operational_time = time.time() - for node in self._nodes.values(): - node.sync_operational() + url = self._url_for("nodes_operational") + response: list[dict] = self._session.get(url).json() + for node_data in response: + if node := self._nodes.get(node_data["id"]): + node.sync_operational(node_data) + + self._last_sync_operational_time = time.time() diff --git a/virl2_client/models/node.py b/virl2_client/models/node.py index 0de2e0f..61e3525 100644 --- a/virl2_client/models/node.py +++ b/virl2_client/models/node.py @@ -57,7 +57,7 @@ class Node: "console_key": "{lab}/nodes/{id}/keys/console", "vnc_key": "{lab}/nodes/{id}/keys/vnc", "layer3_addresses": "{lab}/nodes/{id}/layer3_addresses", - "operational": "{lab}/nodes/{id}?operational=true", + "operational": "{lab}/nodes/{id}?operational=true&exclude_configurations=true", } def __init__(