Version info from OSWL is used in the CSV report

Proper name for fuel_version info is used in the CSV reports
generation process.
If version_info is not provided by OSWL, than OpenStack version,
OS name and release are fetched from cluster data.

Change-Id: If3e7442a5b336af5c1a4f5c257f280e332ab81cf
Closes-Bug: #1547565
This commit is contained in:
Alexander Kislitsky 2016-03-21 17:40:33 +03:00
parent e9ec2111a7
commit 91ea0c8876
3 changed files with 62 additions and 33 deletions

View File

@ -96,12 +96,12 @@ class OswlStatsToCsv(object):
return result return result
def _add_oswl_to_clusters_versions_cache(self, oswl, clusters_versions): 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 :param oswl: OSWL DB object
:type oswl: fuel_analytics.api.db.model.OpenStackWorkloadStats :type oswl: fuel_analytics.api.db.model.OpenStackWorkloadStats
:param clusters_versions: cache for saving cluster versions with :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 :type clusters_versions: dict
""" """
@ -119,9 +119,18 @@ class OswlStatsToCsv(object):
clusters_versions[mn_uid] = {} clusters_versions[mn_uid] = {}
for cluster in oswl.clusters: for cluster in oswl.clusters:
fuel_release = cluster.get('fuel_release') fuel_version = cluster.get('fuel_version')
if fuel_release: if not fuel_version:
clusters_versions[mn_uid][cluster['id']] = fuel_release 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): def handle_empty_version_info(self, oswl, clusters_versions):
"""Handles empty version info in oswl object """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 For OSWLs with empty version_info data we compose version_info
from InstallationStructure data and assign it to oswl object. from InstallationStructure data and assign it to oswl object.
We bound InstallationStructure.structure.clusters to the oswl We bound InstallationStructure.structure.clusters to the oswl
and extract fuel_release from clusters data. If fuel_release and extract fuel_version and fuel_release from clusters data.
info doesn't provided by clusters data then If fuel_version info doesn't provided by clusters data then
InstallationStructure.structure.fuel_release is used. InstallationStructure.structure.fuel_release is used.
:param oswl: OSWL DB object :param oswl: OSWL DB object
@ -147,19 +156,20 @@ class OswlStatsToCsv(object):
mn_uid = oswl.master_node_uid mn_uid = oswl.master_node_uid
cluster_id = oswl.cluster_id cluster_id = oswl.cluster_id
# Fetching fuel_release info from cache # Fetching version_info info from cache
fuel_release = clusters_versions.get(mn_uid, {}).get(cluster_id) version_info = clusters_versions.get(mn_uid, {}).get(cluster_id)
# If clusters data doesn't contain fuel_release info we are using # If clusters data doesn't contain fuel_version we are using
# info from installation info # data from installation info
if fuel_release is None: if not version_info:
fuel_release = oswl.fuel_release_from_inst_info or {} release = oswl.fuel_release_from_inst_info or {}
fuel_release = fuel_release.get('release') version_info = {
'fuel_version': release.get('release'),
oswl.version_info = { 'release_version': release.get('openstack_version')
'fuel_release': fuel_release
} }
oswl.version_info = version_info
def get_flatten_resources(self, resource_type, oswl_keys_paths, def get_flatten_resources(self, resource_type, oswl_keys_paths,
resource_keys_paths, oswls): resource_keys_paths, oswls):
"""Gets flatten vms data """Gets flatten vms data

View File

@ -166,7 +166,7 @@ OSWL_SKELETONS = {
'stats_on_date': None, 'stats_on_date': None,
'resource_type': None, 'resource_type': None,
'version_info': { 'version_info': {
'fuel_release': None, 'fuel_version': None,
'release_version': None, 'release_version': None,
'release_os': None, 'release_os': None,
'release_name': None, 'release_name': None,

View File

@ -47,7 +47,7 @@ class OswlStatsToCsvTest(OswlTest, DbTest):
self.assertNotIn(['external_id'], oswl_keys_paths) self.assertNotIn(['external_id'], oswl_keys_paths)
self.assertNotIn(['updated_time'], oswl_keys_paths) self.assertNotIn(['updated_time'], oswl_keys_paths)
self.assertNotIn(['release'], 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'], self.assertIn(['version_info', 'release_version'],
oswl_keys_paths) oswl_keys_paths)
self.assertIn(['version_info', 'release_name'], 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 # Checking release value in flatten resources
release_pos = csv_keys_paths.index( release_pos = csv_keys_paths.index(
['version_info', 'fuel_release']) ['version_info', 'fuel_version'])
flatten_resources = exporter.get_flatten_resources( flatten_resources = exporter.get_flatten_resources(
resource_type, oswl_keys_paths, resource_keys_paths, oswls) resource_type, oswl_keys_paths, resource_keys_paths, oswls)
for flatten_resource in flatten_resources: for flatten_resource in flatten_resources:
@ -678,11 +678,11 @@ class OswlStatsToCsvTest(OswlTest, DbTest):
resource_checksum='with_version_info', resource_checksum='with_version_info',
resource_data={'current': [{'id': 1}]}, resource_data={'current': [{'id': 1}]},
version_info={ version_info={
'fuel_release': 'fr', 'release_version': 'liberty-9.0',
'release_version': 'osr', 'release_os': 'Ubuntu',
'release_os': 'osos', 'release_name': 'Liberty on Ubuntu 14.04',
'release_name': 'osn', 'fuel_version': '9.0',
'environment_version': '7.0' 'environment_version': '9.0'
} }
), ),
] ]
@ -696,7 +696,7 @@ class OswlStatsToCsvTest(OswlTest, DbTest):
oswl_keys_paths, resource_keys_paths, csv_keys_paths = \ oswl_keys_paths, resource_keys_paths, csv_keys_paths = \
exporter.get_resource_keys_paths(resource_type) exporter.get_resource_keys_paths(resource_type)
fuel_release_pos = csv_keys_paths.index( fuel_release_pos = csv_keys_paths.index(
['version_info', 'fuel_release']) ['version_info', 'fuel_version'])
flatten_resources = list(exporter.get_flatten_resources( flatten_resources = list(exporter.get_flatten_resources(
resource_type, oswl_keys_paths, resource_keys_paths, oswls)) resource_type, oswl_keys_paths, resource_keys_paths, oswls))
@ -860,18 +860,26 @@ class OswlStatsToCsvTest(OswlTest, DbTest):
exporter = OswlStatsToCsv() exporter = OswlStatsToCsv()
resource_type = consts.OSWL_RESOURCE_TYPES.vm resource_type = consts.OSWL_RESOURCE_TYPES.vm
version_from_cluster = '7.0' version_from_cluster = '7.0'
release_version_from_cluster = 'from_cluster_7.0'
version_from_version_info = '9.0' version_from_version_info = '9.0'
release_version_from_version_info = 'from_version_info_9.0'
version_from_installation_info = '8.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) installation_date = datetime.utcnow().date() - timedelta(days=3)
# Upgraded Fuel and not upgraded cluster # Upgraded Fuel and not upgraded cluster
structure = InstallationStructure( structure = InstallationStructure(
master_node_uid=master_node_uid, master_node_uid=master_node_uid,
structure={ 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_num': 2,
'clusters': [ 'clusters': [
{'id': 1, 'fuel_release': version_from_cluster}, {'id': 1, 'fuel_version': version_from_cluster,
'release': {'version': release_version_from_cluster}},
{'id': 2} {'id': 2}
], ],
'unallocated_nodes_num_range': 0, 'unallocated_nodes_num_range': 0,
@ -905,7 +913,10 @@ class OswlStatsToCsvTest(OswlTest, DbTest):
resource_checksum='info_from_version_info', resource_checksum='info_from_version_info',
resource_data={'current': [{'id': 1}], resource_data={'current': [{'id': 1}],
'added': [], 'modified': [], 'removed': []}, '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( OpenStackWorkloadStats(
master_node_uid=master_node_uid, master_node_uid=master_node_uid,
@ -929,20 +940,28 @@ class OswlStatsToCsvTest(OswlTest, DbTest):
oswl_keys_paths, resource_keys_paths, csv_keys_paths = \ oswl_keys_paths, resource_keys_paths, csv_keys_paths = \
exporter.get_resource_keys_paths(resource_type) exporter.get_resource_keys_paths(resource_type)
fuel_release_pos = csv_keys_paths.index( 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( flatten_resources = list(exporter.get_flatten_resources(
resource_type, oswl_keys_paths, resource_keys_paths, oswls_data)) resource_type, oswl_keys_paths, resource_keys_paths, oswls_data))
self.assertEqual(len(oswls), len(flatten_resources)) self.assertEqual(len(oswls), len(flatten_resources))
# Checking release info fetched from cluster # Checking version info fetched from cluster
self.assertEqual(version_from_cluster, self.assertEqual(version_from_cluster,
flatten_resources[0][fuel_release_pos]) 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, self.assertEqual(version_from_version_info,
flatten_resources[1][fuel_release_pos]) 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, self.assertEqual(version_from_installation_info,
flatten_resources[2][fuel_release_pos]) flatten_resources[2][fuel_release_pos])
self.assertEqual(release_version_from_inst_info,
flatten_resources[2][release_version_pos])