diff --git a/mktxp/datasource/system_resource_ds.py b/mktxp/datasource/system_resource_ds.py index 3ebbba6..8c7ffb0 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 builtin_wifi_capsman_version class SystemResourceMetricsDataSource: @@ -28,3 +29,22 @@ 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 os_version(router_entry): + try: + system_version_records = router_entry.api_connection.router_api().get_resource('/system/resource').call('print', {'proplist':'version'}) + for record in system_version_records: + ver = record.get('version', None) + if ver: + return ver + + return None + 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 + + @staticmethod + def has_builtin_wifi_capsman(router_entry): + ver = SystemResourceMetricsDataSource.os_version(router_entry) + return builtin_wifi_capsman_version(ver) diff --git a/mktxp/flow/router_entry.py b/mktxp/flow/router_entry.py index fe4dfb9..36a4837 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): @@ -83,6 +84,8 @@ class RouterEntry: self._wireless_type = RouterEntryWirelessType.WIFIWAVE2 elif PackageMetricsDataSource.is_package_installed(router_entry, package_name = RouterEntryWirelessPackage.WIRELESS_PACKAGE): self._wireless_type = RouterEntryWirelessType.DUAL + elif SystemResourceMetricsDataSource.has_builtin_wifi_capsman(router_entry): + self._wireless_type = RouterEntryWirelessType.WIFI else: self._wireless_type = RouterEntryWirelessType.WIRELESS return self._wireless_type diff --git a/mktxp/utils/utils.py b/mktxp/utils/utils.py index ce9d9d3..5368424 100755 --- a/mktxp/utils/utils.py +++ b/mktxp/utils/utils.py @@ -324,6 +324,20 @@ def parse_ros_version(string): version, channel = re.findall(r'([\d\.]+).*?([\w]+)', string)[0] return packaging.version.parse(version), channel +def builtin_wifi_capsman_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 None + + 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.