mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2026-04-20 23:39:44 -04:00
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:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user