diff --git a/sumologic_collectd_metrics/metrics_config.py b/sumologic_collectd_metrics/metrics_config.py index 7dea503..00dd7ed 100644 --- a/sumologic_collectd_metrics/metrics_config.py +++ b/sumologic_collectd_metrics/metrics_config.py @@ -1,8 +1,7 @@ # -*- coding: utf-8 -*- -from .metrics_util import (validate_field, validate_non_empty, - validate_non_negative, validate_positive, - validate_string_type) +from .metrics_util import (validate_non_empty, validate_non_negative, + validate_positive, validate_string_type) class ConfigOptions(object): @@ -144,9 +143,6 @@ def _parse_tags(self, child): if len(child.values) % 2 != 0: raise Exception('Missing tags key/value in options %s.' % str(child.values)) - for value in child.values: - validate_field(value, child.key, 'Value', 'Key') - self.conf[child.key] = zip(*(iter(child.values),) * 2) self.collectd.info('Parsed %s tags %s' % (child.key, self.conf[child.key])) diff --git a/sumologic_collectd_metrics/metrics_converter.py b/sumologic_collectd_metrics/metrics_converter.py index 5041b83..0f5a3b6 100644 --- a/sumologic_collectd_metrics/metrics_converter.py +++ b/sumologic_collectd_metrics/metrics_converter.py @@ -2,7 +2,7 @@ import math -from .metrics_util import validate_field +from .metrics_util import sanitize_field class IntrinsicKeys(object): @@ -24,8 +24,8 @@ def gen_tag(key, value): """ Tag is of form key=value """ - key = validate_field(key, value, 'Key', 'Value') - value = validate_field(value, key, 'Value', 'Key') + key = sanitize_field(key) + value = sanitize_field(value) if not key: raise Exception('Key for value %s cannot be empty' % value) diff --git a/sumologic_collectd_metrics/metrics_util.py b/sumologic_collectd_metrics/metrics_util.py index 3b12da5..9bd2954 100644 --- a/sumologic_collectd_metrics/metrics_util.py +++ b/sumologic_collectd_metrics/metrics_util.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- _reserved_symbols = { - ' ': None, + ' ': '_', '=': ':', } @@ -31,7 +31,7 @@ def validate_string_type(value, field, label1, label2): (label1, value, label2, field, type(value))) -def validate_field(value, field, label1, label2): +def sanitize_field(value): """ Field must be string that does not contains '=' or ' ' """ @@ -41,30 +41,10 @@ def validate_field(value, field, label1, label2): for reserved_symbol, replacement in _reserved_symbols.items(): if reserved_symbol in value: - if replacement is None: - raise Exception('%s %s for %s %s must not contain reserved symbol \"%s\"' % - (label1, value, label2, field, reserved_symbol)) - value = value.replace(reserved_symbol, replacement) return value -def validate_type(data, types): - """ - Validate type are defined in types.db and matching data values - """ - - # Verify type is defined in types.db - if data.type not in types: - raise Exception('Do not know how to handle type %s. Do you have all your types.db files' - ' configured?' % data.type) - - # Verify values conform to the type defined - if len(data.values) != len(types[data.type]): - raise Exception('Number values %s differ from types defined for %s' % - (data.values, data.type)) - - class RecoverableException(Exception): """ Exception that are recoverable. diff --git a/test/test_metrics_config.py b/test/test_metrics_config.py index 8dc7bed..3b63c95 100644 --- a/test/test_metrics_config.py +++ b/test/test_metrics_config.py @@ -229,17 +229,6 @@ def test_invalid_http_post_interval_exception(): assert 'Specify HttpPostInterval' in str(e) -def test_contains_reserved_symbols_exception(): - with pytest.raises(Exception) as e: - met_config = Helper.default_config() - tags = ('meta_key1', 'meta_val1', 'meta_key2', 'meta val2') - config = CollectdConfig([Helper.url_node(), - tags_node(ConfigOptions.meta_tags, tags)]) - met_config.parse_config(config) - - assert 'Value meta val2 for Key Metadata must not contain reserved symbol " "' in str(e) - - def test_non_ascii_strings(): met_config = Helper.default_config() diff --git a/test/test_metrics_converter.py b/test/test_metrics_converter.py index 25f1b23..53be418 100644 --- a/test/test_metrics_converter.py +++ b/test/test_metrics_converter.py @@ -44,6 +44,10 @@ def test_gen_value_not_string_exception(): assert expected, value +def test_gen_value_reserved(): + assert gen_tag('tag_key space=', 'tag_value=t st') == 'tag_key_space:=tag_value:t_st' + + def test_tags_to_str(): tags = ['tag_key1=tag_val1', 'tag_key2=tag_val2', 'tag_key3=tag_val3'] tag_str = tags_to_str(tags)