Merge "change config parameter from 'datasource' to 'datasources'"

This commit is contained in:
Zuul
2019-02-19 02:45:41 +00:00
committed by Gerrit Code Review
3 changed files with 61 additions and 50 deletions

View File

@@ -68,6 +68,7 @@ class VMWorkloadConsolidation(base.ServerConsolidationBaseStrategy):
HOST_CPU_USAGE_METRIC_NAME = 'compute.node.cpu.percent' HOST_CPU_USAGE_METRIC_NAME = 'compute.node.cpu.percent'
INSTANCE_CPU_USAGE_METRIC_NAME = 'cpu_util' INSTANCE_CPU_USAGE_METRIC_NAME = 'cpu_util'
AGGREGATION = 'mean'
DATASOURCE_METRICS = ['instance_ram_allocated', 'instance_cpu_usage', DATASOURCE_METRICS = ['instance_ram_allocated', 'instance_cpu_usage',
'instance_ram_usage', 'instance_root_disk_size'] 'instance_ram_usage', 'instance_root_disk_size']
@@ -140,11 +141,14 @@ class VMWorkloadConsolidation(base.ServerConsolidationBaseStrategy):
@classmethod @classmethod
def get_config_opts(cls): def get_config_opts(cls):
return [ return [
cfg.StrOpt( cfg.ListOpt(
"datasource", "datasources",
help="Data source to use in order to query the needed metrics", help="Datasources to use in order to query the needed metrics."
default="gnocchi", " If one of strategy metric isn't available in the first"
choices=["ceilometer", "gnocchi"]) " datasource, the next datasource will be chosen.",
item_type=cfg.types.String(choices=['gnocchi', 'ceilometer',
'monasca']),
default=['gnocchi', 'ceilometer', 'monasca'])
] ]
def get_available_compute_nodes(self): def get_available_compute_nodes(self):
@@ -281,36 +285,29 @@ class VMWorkloadConsolidation(base.ServerConsolidationBaseStrategy):
if instance.uuid in self.datasource_instance_data_cache.keys(): if instance.uuid in self.datasource_instance_data_cache.keys():
return self.datasource_instance_data_cache.get(instance.uuid) return self.datasource_instance_data_cache.get(instance.uuid)
cpu_util_metric = self.METRIC_NAMES[ instance_cpu_util = self.datasource_backend.get_instance_cpu_usage(
self.config.datasource]['cpu_util_metric'] instance.uuid,
ram_util_metric = self.METRIC_NAMES[ self.period,
self.config.datasource]['ram_util_metric'] self.AGGREGATION,
ram_alloc_metric = self.METRIC_NAMES[
self.config.datasource]['ram_alloc_metric']
disk_alloc_metric = self.METRIC_NAMES[
self.config.datasource]['disk_alloc_metric']
instance_cpu_util = self.datasource_backend.statistic_aggregation(
resource_id=instance.uuid,
meter_name=cpu_util_metric,
period=self.period,
granularity=self.granularity) granularity=self.granularity)
instance_ram_util = self.datasource_backend.statistic_aggregation( instance_ram_util = self.datasource_backend.get_instance_memory_usage(
resource_id=instance.uuid, instance.uuid,
meter_name=ram_util_metric, self.period,
period=self.period, self.AGGREGATION,
granularity=self.granularity) granularity=self.granularity)
if not instance_ram_util: if not instance_ram_util:
instance_ram_util = self.datasource_backend.statistic_aggregation( instance_ram_util = (
resource_id=instance.uuid, self.datasource_backend.get_instance_ram_allocated(
meter_name=ram_alloc_metric, instance.uuid,
period=self.period, self.period,
granularity=self.granularity) self.AGGREGATION,
instance_disk_util = self.datasource_backend.statistic_aggregation( granularity=self.granularity))
resource_id=instance.uuid, instance_disk_util = (
meter_name=disk_alloc_metric, self.datasource_backend.get_instance_root_disk_allocated(
period=self.period, instance.uuid,
granularity=self.granularity) self.period,
self.AGGREGATION,
granularity=self.granularity))
if instance_cpu_util: if instance_cpu_util:
total_cpu_utilization = ( total_cpu_utilization = (

View File

@@ -88,15 +88,19 @@ class FakeCeilometerMetrics(object):
period=300, granularity=300, dimensions=None, period=300, granularity=300, dimensions=None,
aggregation='avg', group_by='*'): aggregation='avg', group_by='*'):
if meter_name == "compute.node.cpu.percent": if meter_name == "compute.node.cpu.percent":
return self.get_node_cpu_util(resource_id) return self.get_node_cpu_util(resource_id, period,
aggregation, granularity)
elif meter_name == "cpu_util": elif meter_name == "cpu_util":
return self.get_instance_cpu_util(resource_id) return self.get_instance_cpu_util(resource_id, period,
aggregation, granularity)
elif meter_name == "memory.resident": elif meter_name == "memory.resident":
return self.get_instance_ram_util(resource_id) return self.get_instance_ram_util(resource_id, period,
aggregation, granularity)
elif meter_name == "disk.root.size": elif meter_name == "disk.root.size":
return self.get_instance_disk_root_size(resource_id) return self.get_instance_disk_root_size(resource_id, period,
aggregation, granularity)
def get_node_cpu_util(self, r_id): def get_node_cpu_util(self, r_id, period, aggregation, granularity):
"""Calculates node utilization dynamicaly. """Calculates node utilization dynamicaly.
node CPU utilization should consider node CPU utilization should consider
@@ -118,7 +122,7 @@ class FakeCeilometerMetrics(object):
return util_sum * 100.0 return util_sum * 100.0
@staticmethod @staticmethod
def get_instance_cpu_util(r_id): def get_instance_cpu_util(r_id, period, aggregation, granularity):
instance_cpu_util = dict() instance_cpu_util = dict()
instance_cpu_util['INSTANCE_0'] = 10 instance_cpu_util['INSTANCE_0'] = 10
instance_cpu_util['INSTANCE_1'] = 30 instance_cpu_util['INSTANCE_1'] = 30
@@ -133,7 +137,7 @@ class FakeCeilometerMetrics(object):
return instance_cpu_util[str(r_id)] return instance_cpu_util[str(r_id)]
@staticmethod @staticmethod
def get_instance_ram_util(r_id): def get_instance_ram_util(r_id, period, aggregation, granularity):
instance_ram_util = dict() instance_ram_util = dict()
instance_ram_util['INSTANCE_0'] = 1 instance_ram_util['INSTANCE_0'] = 1
instance_ram_util['INSTANCE_1'] = 2 instance_ram_util['INSTANCE_1'] = 2
@@ -148,7 +152,7 @@ class FakeCeilometerMetrics(object):
return instance_ram_util[str(r_id)] return instance_ram_util[str(r_id)]
@staticmethod @staticmethod
def get_instance_disk_root_size(r_id): def get_instance_disk_root_size(r_id, period, aggregation, granularity):
instance_disk_util = dict() instance_disk_util = dict()
instance_disk_util['INSTANCE_0'] = 10 instance_disk_util['INSTANCE_0'] = 10
instance_disk_util['INSTANCE_1'] = 15 instance_disk_util['INSTANCE_1'] = 15
@@ -171,15 +175,19 @@ class FakeGnocchiMetrics(object):
period=300, granularity=300, dimensions=None, period=300, granularity=300, dimensions=None,
aggregation='avg', group_by='*'): aggregation='avg', group_by='*'):
if meter_name == "compute.node.cpu.percent": if meter_name == "compute.node.cpu.percent":
return self.get_node_cpu_util(resource_id) return self.get_node_cpu_util(resource_id, period,
aggregation, granularity)
elif meter_name == "cpu_util": elif meter_name == "cpu_util":
return self.get_instance_cpu_util(resource_id) return self.get_instance_cpu_util(resource_id, period,
aggregation, granularity)
elif meter_name == "memory.resident": elif meter_name == "memory.resident":
return self.get_instance_ram_util(resource_id) return self.get_instance_ram_util(resource_id, period,
aggregation, granularity)
elif meter_name == "disk.root.size": elif meter_name == "disk.root.size":
return self.get_instance_disk_root_size(resource_id) return self.get_instance_disk_root_size(resource_id, period,
aggregation, granularity)
def get_node_cpu_util(self, r_id): def get_node_cpu_util(self, r_id, period, aggregation, granularity):
"""Calculates node utilization dynamicaly. """Calculates node utilization dynamicaly.
node CPU utilization should consider node CPU utilization should consider
@@ -202,7 +210,7 @@ class FakeGnocchiMetrics(object):
return util_sum * 100.0 return util_sum * 100.0
@staticmethod @staticmethod
def get_instance_cpu_util(r_id): def get_instance_cpu_util(r_id, period, aggregation, granularity):
instance_cpu_util = dict() instance_cpu_util = dict()
instance_cpu_util['INSTANCE_0'] = 10 instance_cpu_util['INSTANCE_0'] = 10
instance_cpu_util['INSTANCE_1'] = 30 instance_cpu_util['INSTANCE_1'] = 30
@@ -217,7 +225,7 @@ class FakeGnocchiMetrics(object):
return instance_cpu_util[str(r_id)] return instance_cpu_util[str(r_id)]
@staticmethod @staticmethod
def get_instance_ram_util(r_id): def get_instance_ram_util(r_id, period, aggregation, granularity):
instance_ram_util = dict() instance_ram_util = dict()
instance_ram_util['INSTANCE_0'] = 1 instance_ram_util['INSTANCE_0'] = 1
instance_ram_util['INSTANCE_1'] = 2 instance_ram_util['INSTANCE_1'] = 2
@@ -232,7 +240,7 @@ class FakeGnocchiMetrics(object):
return instance_ram_util[str(r_id)] return instance_ram_util[str(r_id)]
@staticmethod @staticmethod
def get_instance_disk_root_size(r_id): def get_instance_disk_root_size(r_id, period, aggregation, granularity):
instance_disk_util = dict() instance_disk_util = dict()
instance_disk_util['INSTANCE_0'] = 10 instance_disk_util['INSTANCE_0'] = 10
instance_disk_util['INSTANCE_1'] = 15 instance_disk_util['INSTANCE_1'] = 15

View File

@@ -75,9 +75,15 @@ class TestVMWorkloadConsolidation(base.TestCase):
self.m_model.return_value = model_root.ModelRoot() self.m_model.return_value = model_root.ModelRoot()
self.m_datasource.return_value = mock.Mock( self.m_datasource.return_value = mock.Mock(
statistic_aggregation=self.fake_metrics.mock_get_statistics) get_instance_cpu_usage=(
self.fake_metrics.get_instance_cpu_util),
get_instance_memory_usage=(
self.fake_metrics.get_instance_ram_util),
get_instance_root_disk_allocated=(
self.fake_metrics.get_instance_disk_root_size),
)
self.strategy = strategies.VMWorkloadConsolidation( self.strategy = strategies.VMWorkloadConsolidation(
config=mock.Mock(datasource=self.datasource)) config=mock.Mock(datasources=self.datasource))
def test_exception_stale_cdm(self): def test_exception_stale_cdm(self):
self.fake_cluster.set_cluster_data_model_as_stale() self.fake_cluster.set_cluster_data_model_as_stale()