Add Parsing of the routeros version for capsman metrics

This commit is contained in:
mjkantti
2024-01-20 10:46:28 +09:00
parent 7cb89a65d6
commit 23b55b266c
3 changed files with 35 additions and 1 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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.