diff --git a/analytics/fuel_analytics/api/resources/utils/oswl_stats_to_csv.py b/analytics/fuel_analytics/api/resources/utils/oswl_stats_to_csv.py index bc69c1b..be64404 100644 --- a/analytics/fuel_analytics/api/resources/utils/oswl_stats_to_csv.py +++ b/analytics/fuel_analytics/api/resources/utils/oswl_stats_to_csv.py @@ -96,12 +96,12 @@ class OswlStatsToCsv(object): return result def _add_oswl_to_clusters_versions_cache(self, oswl, clusters_versions): - """Adds oswl clusters info into clusters_versions cache. + """Adds oswl clusters version_info into clusters_versions cache. :param oswl: OSWL DB object :type oswl: fuel_analytics.api.db.model.OpenStackWorkloadStats :param clusters_versions: cache for saving cluster versions with - structure {mn_uid: {cluster_id: fuel_release}} + structure {mn_uid: {cluster_id: version_info}} :type clusters_versions: dict """ @@ -119,9 +119,18 @@ class OswlStatsToCsv(object): clusters_versions[mn_uid] = {} for cluster in oswl.clusters: - fuel_release = cluster.get('fuel_release') - if fuel_release: - clusters_versions[mn_uid][cluster['id']] = fuel_release + fuel_version = cluster.get('fuel_version') + if not fuel_version: + continue + + version_info = {'fuel_version': fuel_version} + release = cluster.get('release') + if release: + version_info['release_version'] = release.get('version') + version_info['release_os'] = release.get('os') + version_info['release_name'] = release.get('name') + + clusters_versions[mn_uid][cluster['id']] = version_info def handle_empty_version_info(self, oswl, clusters_versions): """Handles empty version info in oswl object @@ -129,8 +138,8 @@ class OswlStatsToCsv(object): For OSWLs with empty version_info data we compose version_info from InstallationStructure data and assign it to oswl object. We bound InstallationStructure.structure.clusters to the oswl - and extract fuel_release from clusters data. If fuel_release - info doesn't provided by clusters data then + and extract fuel_version and fuel_release from clusters data. + If fuel_version info doesn't provided by clusters data then InstallationStructure.structure.fuel_release is used. :param oswl: OSWL DB object @@ -147,18 +156,19 @@ class OswlStatsToCsv(object): mn_uid = oswl.master_node_uid cluster_id = oswl.cluster_id - # Fetching fuel_release info from cache - fuel_release = clusters_versions.get(mn_uid, {}).get(cluster_id) + # Fetching version_info info from cache + version_info = clusters_versions.get(mn_uid, {}).get(cluster_id) - # If clusters data doesn't contain fuel_release info we are using - # info from installation info - if fuel_release is None: - fuel_release = oswl.fuel_release_from_inst_info or {} - fuel_release = fuel_release.get('release') + # If clusters data doesn't contain fuel_version we are using + # data from installation info + if not version_info: + release = oswl.fuel_release_from_inst_info or {} + version_info = { + 'fuel_version': release.get('release'), + 'release_version': release.get('openstack_version') + } - oswl.version_info = { - 'fuel_release': fuel_release - } + oswl.version_info = version_info def get_flatten_resources(self, resource_type, oswl_keys_paths, resource_keys_paths, oswls): diff --git a/analytics/fuel_analytics/api/resources/utils/skeleton.py b/analytics/fuel_analytics/api/resources/utils/skeleton.py index 387605e..5b2855a 100644 --- a/analytics/fuel_analytics/api/resources/utils/skeleton.py +++ b/analytics/fuel_analytics/api/resources/utils/skeleton.py @@ -166,7 +166,7 @@ OSWL_SKELETONS = { 'stats_on_date': None, 'resource_type': None, 'version_info': { - 'fuel_release': None, + 'fuel_version': None, 'release_version': None, 'release_os': None, 'release_name': None, diff --git a/analytics/fuel_analytics/test/api/resources/utils/test_oswl_stats_to_csv.py b/analytics/fuel_analytics/test/api/resources/utils/test_oswl_stats_to_csv.py index 590c861..8fc77db 100644 --- a/analytics/fuel_analytics/test/api/resources/utils/test_oswl_stats_to_csv.py +++ b/analytics/fuel_analytics/test/api/resources/utils/test_oswl_stats_to_csv.py @@ -47,7 +47,7 @@ class OswlStatsToCsvTest(OswlTest, DbTest): self.assertNotIn(['external_id'], oswl_keys_paths) self.assertNotIn(['updated_time'], oswl_keys_paths) self.assertNotIn(['release'], oswl_keys_paths) - self.assertIn(['version_info', 'fuel_release'], oswl_keys_paths) + self.assertIn(['version_info', 'fuel_version'], oswl_keys_paths) self.assertIn(['version_info', 'release_version'], oswl_keys_paths) self.assertIn(['version_info', 'release_name'], oswl_keys_paths) @@ -588,7 +588,7 @@ class OswlStatsToCsvTest(OswlTest, DbTest): # Checking release value in flatten resources release_pos = csv_keys_paths.index( - ['version_info', 'fuel_release']) + ['version_info', 'fuel_version']) flatten_resources = exporter.get_flatten_resources( resource_type, oswl_keys_paths, resource_keys_paths, oswls) for flatten_resource in flatten_resources: @@ -678,11 +678,11 @@ class OswlStatsToCsvTest(OswlTest, DbTest): resource_checksum='with_version_info', resource_data={'current': [{'id': 1}]}, version_info={ - 'fuel_release': 'fr', - 'release_version': 'osr', - 'release_os': 'osos', - 'release_name': 'osn', - 'environment_version': '7.0' + 'release_version': 'liberty-9.0', + 'release_os': 'Ubuntu', + 'release_name': 'Liberty on Ubuntu 14.04', + 'fuel_version': '9.0', + 'environment_version': '9.0' } ), ] @@ -696,7 +696,7 @@ class OswlStatsToCsvTest(OswlTest, DbTest): oswl_keys_paths, resource_keys_paths, csv_keys_paths = \ exporter.get_resource_keys_paths(resource_type) fuel_release_pos = csv_keys_paths.index( - ['version_info', 'fuel_release']) + ['version_info', 'fuel_version']) flatten_resources = list(exporter.get_flatten_resources( resource_type, oswl_keys_paths, resource_keys_paths, oswls)) @@ -860,18 +860,26 @@ class OswlStatsToCsvTest(OswlTest, DbTest): exporter = OswlStatsToCsv() resource_type = consts.OSWL_RESOURCE_TYPES.vm version_from_cluster = '7.0' + release_version_from_cluster = 'from_cluster_7.0' version_from_version_info = '9.0' + release_version_from_version_info = 'from_version_info_9.0' + version_from_installation_info = '8.0' + release_version_from_inst_info = 'from_inst_info_8.0' installation_date = datetime.utcnow().date() - timedelta(days=3) # Upgraded Fuel and not upgraded cluster structure = InstallationStructure( master_node_uid=master_node_uid, structure={ - 'fuel_release': {'release': version_from_installation_info}, + 'fuel_release': { + 'release': version_from_installation_info, + 'openstack_version': release_version_from_inst_info + }, 'clusters_num': 2, 'clusters': [ - {'id': 1, 'fuel_release': version_from_cluster}, + {'id': 1, 'fuel_version': version_from_cluster, + 'release': {'version': release_version_from_cluster}}, {'id': 2} ], 'unallocated_nodes_num_range': 0, @@ -905,7 +913,10 @@ class OswlStatsToCsvTest(OswlTest, DbTest): resource_checksum='info_from_version_info', resource_data={'current': [{'id': 1}], 'added': [], 'modified': [], 'removed': []}, - version_info={'fuel_release': version_from_version_info} + version_info={ + 'fuel_version': version_from_version_info, + 'release_version': release_version_from_version_info + } ), OpenStackWorkloadStats( master_node_uid=master_node_uid, @@ -929,20 +940,28 @@ class OswlStatsToCsvTest(OswlTest, DbTest): oswl_keys_paths, resource_keys_paths, csv_keys_paths = \ exporter.get_resource_keys_paths(resource_type) fuel_release_pos = csv_keys_paths.index( - ['version_info', 'fuel_release']) + ['version_info', 'fuel_version']) + release_version_pos = csv_keys_paths.index( + ['version_info', 'release_version']) flatten_resources = list(exporter.get_flatten_resources( resource_type, oswl_keys_paths, resource_keys_paths, oswls_data)) self.assertEqual(len(oswls), len(flatten_resources)) - # Checking release info fetched from cluster + # Checking version info fetched from cluster self.assertEqual(version_from_cluster, flatten_resources[0][fuel_release_pos]) + self.assertEqual(release_version_from_cluster, + flatten_resources[0][release_version_pos]) - # Checking release info fetched from oswl.version_info + # Checking version info fetched from oswl.version_info self.assertEqual(version_from_version_info, flatten_resources[1][fuel_release_pos]) + self.assertEqual(release_version_from_version_info, + flatten_resources[1][release_version_pos]) - # Checking release info fetched from installation info + # Checking version info fetched from installation info self.assertEqual(version_from_installation_info, flatten_resources[2][fuel_release_pos]) + self.assertEqual(release_version_from_inst_info, + flatten_resources[2][release_version_pos])