summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-05-12 12:10:12 +0000
committerGerrit Code Review <review@openstack.org>2016-05-12 12:10:13 +0000
commit24abc354ff8592fcee66c1e67bb614e5eefcfddd (patch)
tree906245f95497b5eda3f024a03b4d804969ca0b5f
parenta86d0c9b9584d7025f54bd0728e740237ec34fa1 (diff)
parentc0dfe42382262f044471d0a852c6b724e8e81ad8 (diff)
downloadnova-24abc354ff8592fcee66c1e67bb614e5eefcfddd.tar.gz
Merge "Fix wrong CPU metric value in metrics_filter" into stable/liberty
-rw-r--r--nova/objects/monitor_metric.py14
-rw-r--r--nova/tests/unit/objects/test_monitor_metric.py12
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):