diff options
author | Jenkins <jenkins@review.openstack.org> | 2016-05-12 12:10:12 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2016-05-12 12:10:13 +0000 |
commit | 24abc354ff8592fcee66c1e67bb614e5eefcfddd (patch) | |
tree | 906245f95497b5eda3f024a03b4d804969ca0b5f | |
parent | a86d0c9b9584d7025f54bd0728e740237ec34fa1 (diff) | |
parent | c0dfe42382262f044471d0a852c6b724e8e81ad8 (diff) | |
download | nova-24abc354ff8592fcee66c1e67bb614e5eefcfddd.tar.gz |
Merge "Fix wrong CPU metric value in metrics_filter" into stable/liberty
-rw-r--r-- | nova/objects/monitor_metric.py | 14 | ||||
-rw-r--r-- | nova/tests/unit/objects/test_monitor_metric.py | 12 |
2 files changed, 24 insertions, 2 deletions
diff --git a/nova/objects/monitor_metric.py b/nova/objects/monitor_metric.py index 7d6c350a41..0ad599b366 100644 --- a/nova/objects/monitor_metric.py +++ b/nova/objects/monitor_metric.py @@ -97,8 +97,18 @@ class MonitorMetricList(base.ObjectListBase, base.NovaObject): :returns: a MonitorMetricList Object. """ metrics = jsonutils.loads(metrics) if metrics else [] - metric_list = [ - MonitorMetric(**metric) for metric in metrics] + + # NOTE(suro-patz): While instantiating the MonitorMetric() from + # JSON-ified string, we need to re-convert the + # normalized metrics to avoid truncation to 0 by + # typecasting into an integer. + metric_list = [] + for metric in metrics: + if ('value' in metric and metric['name'] in + FIELDS_REQUIRING_CONVERSION): + metric['value'] = metric['value'] * 100 + metric_list.append(MonitorMetric(**metric)) + return MonitorMetricList(objects=metric_list) # NOTE(jaypipes): This method exists to convert the object to the diff --git a/nova/tests/unit/objects/test_monitor_metric.py b/nova/tests/unit/objects/test_monitor_metric.py index 30cea2ded7..a1df3ef2f0 100644 --- a/nova/tests/unit/objects/test_monitor_metric.py +++ b/nova/tests/unit/objects/test_monitor_metric.py @@ -10,6 +10,7 @@ # License for the specific language governing permissions and limitations # under the License. +from oslo_serialization import jsonutils from oslo_utils import timeutils from nova import objects @@ -73,6 +74,17 @@ class _TestMonitorMetricObject(object): source='nova.virt.libvirt.driver') self.assertEqual(_monitor_numa_metric_spec, obj.to_dict()) + def test_conversion_in_monitor_metric_list_from_json(self): + spec_list = [_monitor_metric_spec, _monitor_metric_perc_spec] + metrics = objects.MonitorMetricList.from_json( + jsonutils.dumps(spec_list)) + for metric, spec in zip(metrics, spec_list): + exp = spec['value'] + if (spec['name'] in + objects.monitor_metric.FIELDS_REQUIRING_CONVERSION): + exp = spec['value'] * 100 + self.assertEqual(exp, metric.value) + class TestMonitorMetricObject(test_objects._LocalTest, _TestMonitorMetricObject): |