From 8e6e3936c1b945de1acbd29af746c0c5af935b13 Mon Sep 17 00:00:00 2001 From: Joe Keen Date: Tue, 26 Sep 2017 15:48:41 -0600 Subject: [PATCH] Don't drop batch on one bad metric Change-Id: I313cfc26fa6ab6abf0415a4e43889c2a7a2b7cfe --- monasca_agent/collector/checks/check.py | 21 +++++----- tests/test_agent_check.py | 52 +++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 9 deletions(-) create mode 100644 tests/test_agent_check.py diff --git a/monasca_agent/collector/checks/check.py b/monasca_agent/collector/checks/check.py index 396fd449..222109a8 100644 --- a/monasca_agent/collector/checks/check.py +++ b/monasca_agent/collector/checks/check.py @@ -79,15 +79,18 @@ class AgentCheck(util.Dimensions): for dim_kv in dim_key_values.items(): if dim_kv[0] not in dimensions_white_list.keys(): dimensions_white_list[dim_kv[0]] = dim_kv[1] - self.aggregator.submit_metric(metric, - value, - metric_type, - dimensions_white_list, - delegated_tenant, - hostname, - device_name, - value_meta, - timestamp) + try: + self.aggregator.submit_metric(metric, + value, + metric_type, + dimensions_white_list, + delegated_tenant, + hostname, + device_name, + value_meta, + timestamp) + except Exception as e: + self.log.exception("invalid metric: {}".format(e)) def gauge(self, metric, value, dimensions=None, delegated_tenant=None, hostname=None, device_name=None, timestamp=None, value_meta=None): diff --git a/tests/test_agent_check.py b/tests/test_agent_check.py new file mode 100644 index 00000000..1756843d --- /dev/null +++ b/tests/test_agent_check.py @@ -0,0 +1,52 @@ +# (C) Copyright 2017 Hewlett Packard Enterprise Development Company LP +import unittest + +import os + +import monasca_agent.common.config as configuration +import monasca_agent.common.metrics as metrics_pkg + +from monasca_agent.collector.checks import AgentCheck + +base_config = configuration.Config(os.path.join(os.path.dirname(__file__), + 'test-agent.yaml')) + + +class TestAgentCheck(unittest.TestCase): + def testBadMetricKeepBatch(self): + agent_config = base_config.get_config(sections='Main') + + check = AgentCheck("foo", {}, agent_config) + + dimensions = {'A': 'B', 'B': 'C', 'D': 'E'} + check.submit_metric("Foo", + 5, + metrics_pkg.Gauge, + dimensions=dimensions, + delegated_tenant=None, + hostname=None, + device_name=None, + value_meta=None) + self.assertEqual(len(check.aggregator.metrics), 1) + + dimensions = {'A': '()', 'B': 'C', 'D': 'E'} + check.submit_metric("Bar", + 5, + metrics_pkg.Gauge, + dimensions=dimensions, + delegated_tenant=None, + hostname=None, + device_name=None, + value_meta=None) + self.assertEqual(len(check.aggregator.metrics), 1) + + dimensions = {'A': 'B', 'B': 'C', 'D': 'E'} + check.submit_metric("Baz", + 5, + metrics_pkg.Gauge, + dimensions=dimensions, + delegated_tenant=None, + hostname=None, + device_name=None, + value_meta=None) + self.assertEqual(len(check.aggregator.metrics), 2)