diff --git a/mktxp/datasource/system_resource_ds.py b/mktxp/datasource/system_resource_ds.py index 3ebbba6..250ccd2 100644 --- a/mktxp/datasource/system_resource_ds.py +++ b/mktxp/datasource/system_resource_ds.py @@ -13,6 +13,7 @@ from mktxp.datasource.base_ds import BaseDSProcessor +from mktxp.utils.utils import is_wifi_version class SystemResourceMetricsDataSource: @@ -28,3 +29,20 @@ class SystemResourceMetricsDataSource: except Exception as exc: print(f'Error getting system resource info from router{router_entry.router_name}@{router_entry.config_entry.hostname}: {exc}') return None + + @staticmethod + def is_os_with_wifi_builtin(router_entry): + try: + system_resource_records = router_entry.api_connection.router_api().get_resource('/system/resource').get() + version = '' + for record in system_resource_records: + if record['version']: + version = record['version'] + break + if not version: + return False + + return is_wifi_version(version) + except Exception as exc: + print(f'Error getting system resource info from router{router_entry.router_name}@{router_entry.config_entry.hostname}: {exc}') + return False \ No newline at end of file diff --git a/mktxp/flow/router_entry.py b/mktxp/flow/router_entry.py index fe4dfb9..a285a07 100644 --- a/mktxp/flow/router_entry.py +++ b/mktxp/flow/router_entry.py @@ -17,6 +17,7 @@ from collections import namedtuple from mktxp.cli.config.config import config_handler, MKTXPConfigKeys, CollectorKeys from mktxp.flow.router_connection import RouterAPIConnection from mktxp.datasource.package_ds import PackageMetricsDataSource +from mktxp.datasource.system_resource_ds import SystemResourceMetricsDataSource class RouterEntryWirelessType(IntEnum): @@ -75,7 +76,9 @@ class RouterEntry: def wireless_type(self): router_entry = self if self._wireless_type == RouterEntryWirelessType.NONE: - if PackageMetricsDataSource.is_package_installed(router_entry, package_name = RouterEntryWirelessPackage.WIFI_PACKAGE): + if SystemResourceMetricsDataSource.is_os_with_wifi_builtin(router_entry): + self._wireless_type = RouterEntryWirelessType.WIFI + elif PackageMetricsDataSource.is_package_installed(router_entry, package_name = RouterEntryWirelessPackage.WIFI_PACKAGE): self._wireless_type = RouterEntryWirelessType.WIFI elif PackageMetricsDataSource.is_package_installed(router_entry, package_name = RouterEntryWirelessPackage.WIFI_AC_PACKAGE): self._wireless_type = RouterEntryWirelessType.WIFI diff --git a/mktxp/utils/utils.py b/mktxp/utils/utils.py index ce9d9d3..f12d597 100755 --- a/mktxp/utils/utils.py +++ b/mktxp/utils/utils.py @@ -324,6 +324,19 @@ def parse_ros_version(string): version, channel = re.findall(r'([\d\.]+).*?([\w]+)', string)[0] return packaging.version.parse(version), channel +def is_wifi_version(string): + """Try to check if the version is Wifi version of RouterOS (> 7.13). + If anything goes wrong, return None. + Returns a boolean""" + try: + cur_version, _ = parse_ros_version(string) + if cur_version >= packaging.version.parse('7.13'): + return True + except Exception as err: + print(f'could not get current RouterOS version, because: {str(err)}') + + return False + def check_for_updates(cur_version): """Try to check if there is a newer version available. If anything goes wrong, it returns the same version.