Don't drop batch on one bad metric

Change-Id: I313cfc26fa6ab6abf0415a4e43889c2a7a2b7cfe
This commit is contained in:
Joe Keen 2017-09-26 15:48:41 -06:00 committed by Joe Keen
parent cd53cafa7b
commit 8e6e3936c1
2 changed files with 64 additions and 9 deletions

View File

@ -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):

52
tests/test_agent_check.py Normal file
View File

@ -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)