Follow-up on PR https://github.com/netalertx/NetAlertX/pull/1622 based on AI review - fallback to v1 clients endpoint if v2 fails.

- On failed controller version retrieval, attempt to use the v2 clients endpoint first and automatically fallback to the v1 endpoint if the v2 request fails.
- Improves compatibility with controllers where version detection is unreliable or unavailable.
This commit is contained in:
xfilo
2026-04-20 12:13:21 +02:00
parent 8168bb2d5b
commit 2fd7e5e700

View File

@@ -293,7 +293,7 @@ class OmadaAPI:
self.active_sites_dict = {}
self.access_token = None
self.refresh_token = None
self.controller_version = 0
self.controller_version = None
OmadaHelper.verbose("OmadaAPI initialized")
@@ -364,35 +364,56 @@ class OmadaAPI:
return OmadaHelper.response("error", f"Authentication failed - error: {response.get('response_message', 'Not provided')}")
def get_controller_status(self) -> Dict[str, Any]:
"""Make an endpoint request to get all online clients on a site."""
"""Make an endpoint request to get controller status."""
OmadaHelper.verbose(f"Retrieving controller status for CID: {getattr(self, 'omada_id')}")
endpoint = f"/openapi/v1/{getattr(self, 'omada_id')}/system/setting/controller-status"
response = self._make_request("GET", endpoint)
if response.get("response_type") == "success":
response_result = response.get("response_result")
self.controller_version = response_result.get("result").get("controllerVersion")
OmadaHelper.debug(f"Controller status: {response}")
return OmadaHelper.response("success", "Successfully retrieved controller status")
response_result = response.get("response_result") or {}
result = response_result.get("result") or {}
self.controller_version = result.get("controllerVersion")
if not self.controller_version:
self.controller_version = None
OmadaHelper.debug(f"Controller status: {response}")
return OmadaHelper.response("error", "Controller status response did not include controllerVersion")
else:
return OmadaHelper.response("success", "Successfully retrieved controller status")
OmadaHelper.debug(f"Controller status: {response}")
return OmadaHelper.response("error", "Failed to retrieve controller status")
return OmadaHelper.response("error", "Failed to call controller status endpoint")
def get_clients(self, site_id: str) -> Dict[str, Any]:
"""Make an endpoint request to get all online clients on a site."""
OmadaHelper.verbose(f"Retrieving clients for site: {site_id}")
if OmadaHelper.version_check(self.controller_version, "6.2.0.0", ">="):
endpoint = f"/openapi/v2/{getattr(self, 'omada_id')}/sites/{site_id}/clients"
payload = {
"page": 1,
"pageSize": getattr(self, 'page_size'),
"scope": 1
}
return self._make_request("POST", endpoint, json=payload)
else:
endpoint = f"/openapi/v1/{getattr(self, 'omada_id')}/sites/{site_id}/clients?page=1&pageSize={getattr(self, 'page_size')}"
page_size = getattr(self, 'page_size')
omada_id = getattr(self, 'omada_id')
def call_v2():
endpoint = f"/openapi/v2/{omada_id}/sites/{site_id}/clients"
payload = {
"page": 1,
"pageSize": page_size,
"scope": 1
}
return self._make_request("POST", endpoint, json=payload)
def call_v1():
endpoint = f"/openapi/v1/{omada_id}/sites/{site_id}/clients?page=1&pageSize={page_size}"
return self._make_request("GET", endpoint)
if self.controller_version is None:
OmadaHelper.verbose("Controller version unknown, trying v2 then v1")
resp = call_v2()
if resp and resp.get("response_type") == "success":
return resp
return call_v1()
if OmadaHelper.version_check(self.controller_version, "6.2.0.0", ">="):
return call_v2()
return call_v1()
def get_devices(self, site_id: str) -> Dict[str, Any]:
"""Make an endpoint request to get all online devices on a site."""
@@ -516,8 +537,11 @@ class OmadaData:
return plugin_objects
# Controller status
omada_api.get_controller_status()
OmadaHelper.verbose(f"Controller version: {omada_api.controller_version}")
status_result = omada_api.get_controller_status()
if status_result["response_type"] == "error":
OmadaHelper.verbose(f"Controller version lookup failed: {status_result['response_message']}")
else:
OmadaHelper.verbose(f"Controller version: {omada_api.controller_version}")
# Populate sites
sites_result = omada_api.populate_sites()