From a65c8f6b951a01ec0c0f15dc207ec95f90331e48 Mon Sep 17 00:00:00 2001 From: Cagri Yonca Date: Mon, 30 Jun 2025 09:38:20 +0200 Subject: [PATCH] feat: added single method option to configuration.yaml Signed-off-by: Cagri Yonca --- src/instana/util/config.py | 20 ++++++++++++++------ tests/util/test_config.py | 11 +++++++++++ tests/util/test_config_reader.py | 1 + tests/util/test_configuration-2.yaml | 1 + 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/instana/util/config.py b/src/instana/util/config.py index b53f8177..93c6e7c2 100644 --- a/src/instana/util/config.py +++ b/src/instana/util/config.py @@ -82,18 +82,26 @@ def parse_endpoints_of_service( """ if service == "kafka" and isinstance(methods, list): for rule in methods: - for method, endpoint in itertools.product( - rule["methods"], rule["endpoints"] - ): - ignore_endpoints.append( - f"{service.lower()}.{method.lower()}.{endpoint.lower()}" - ) + ignore_endpoints.extend(parse_kafka_methods(rule)) else: for method in methods: ignore_endpoints.append(f"{service.lower()}.{method.lower()}") return ignore_endpoints +def parse_kafka_methods(rule: Union[str, Dict[str, any]]) -> List[str]: + parsed_rule = [] + if isinstance(rule, dict): + for method, endpoint in itertools.product(rule["methods"], rule["endpoints"]): + parsed_rule.append(f"kafka.{method.lower()}.{endpoint.lower()}") + elif isinstance(rule, list): + for method in rule: + parsed_rule.append(f"kafka.{method.lower()}.*") + else: + parsed_rule.append(f"kafka.{rule.lower()}.*") + return parsed_rule + + def parse_ignored_endpoints(params: Union[Dict[str, Any], str]) -> List[str]: """ Parses input to prepare a list for ignored endpoints. diff --git a/tests/util/test_config.py b/tests/util/test_config.py index 908035d7..83b3a796 100644 --- a/tests/util/test_config.py +++ b/tests/util/test_config.py @@ -4,6 +4,7 @@ parse_endpoints_of_service, parse_ignored_endpoints, parse_ignored_endpoints_dict, + parse_kafka_methods, parse_service_pair, ) @@ -157,3 +158,13 @@ def test_parse_endpoints_of_service(self) -> None: "kafka.method6.endpoint1", "kafka.method6.endpoint2", ] + + def test_parse_kafka_methods_as_dict(self) -> None: + test_rule_as_dict = {"methods": ["send"], "endpoints": ["topic1"]} + parsed_rule = parse_kafka_methods(test_rule_as_dict) + assert parsed_rule == ["kafka.send.topic1"] + + def test_parse_kafka_methods_as_str(self) -> None: + test_rule_as_str = ["send"] + parsed_rule = parse_kafka_methods(test_rule_as_str) + assert parsed_rule == ["kafka.send.*"] diff --git a/tests/util/test_config_reader.py b/tests/util/test_config_reader.py index 0c9c3ede..b9bb063d 100644 --- a/tests/util/test_config_reader.py +++ b/tests/util/test_config_reader.py @@ -47,6 +47,7 @@ def test_load_configuration_legacy(self, caplog: pytest.LogCaptureFixture) -> No "redis.get", "redis.type", "dynamodb.query", + "kafka.send.*", "kafka.consume.span-topic", "kafka.consume.topic1", "kafka.consume.topic2", diff --git a/tests/util/test_configuration-2.yaml b/tests/util/test_configuration-2.yaml index 582202f0..b418cd55 100644 --- a/tests/util/test_configuration-2.yaml +++ b/tests/util/test_configuration-2.yaml @@ -9,6 +9,7 @@ com.instana.tracing: dynamodb: - query kafka: + - send - methods: ["consume", "send"] endpoints: ["span-topic", "topic1", "topic2"] - methods: ["consume"]