From: Pieter Lexis Date: Tue, 7 Oct 2025 14:41:31 +0000 (+0200) Subject: fix(dnsdist): Move OT query information into the scope span X-Git-Tag: rec-5.4.0-alpha1~187^2~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7b5eee10f8d2821d6c09540622dcefc0e943e759;p=thirdparty%2Fpdns.git fix(dnsdist): Move OT query information into the scope span Signed-off-by: Pieter Lexis --- diff --git a/pdns/dnsdistdist/dnsdist-opentelemetry.cc b/pdns/dnsdistdist/dnsdist-opentelemetry.cc index 0beea05279..f5fea72056 100644 --- a/pdns/dnsdistdist/dnsdist-opentelemetry.cc +++ b/pdns/dnsdistdist/dnsdist-opentelemetry.cc @@ -44,12 +44,10 @@ TracesData Tracer::getTracesData() pdns::trace::KeyValue{ "service.name", pdns::trace::AnyValue{"dnsdist"}}, }}, - .scope_spans = std::vector{{}}}}}; - - otTrace.resource_spans.at(0).resource.attributes.insert( - otTrace.resource_spans.at(0).resource.attributes.end(), - d_attributes.begin(), - d_attributes.end()); + .scope_spans = std::vector{{.scope = { + .attributes = {d_attributes.begin(), d_attributes.end()}, + }, + .spans = {}}}}}}; { auto lockedPre = d_preActivationSpans.read_only_lock(); diff --git a/pdns/dnsdistdist/test-dnsdist-opentelemetry_cc.cc b/pdns/dnsdistdist/test-dnsdist-opentelemetry_cc.cc index f9501c45f5..847437aa32 100644 --- a/pdns/dnsdistdist/test-dnsdist-opentelemetry_cc.cc +++ b/pdns/dnsdistdist/test-dnsdist-opentelemetry_cc.cc @@ -205,6 +205,8 @@ BOOST_AUTO_TEST_CASE(attributes) BOOST_CHECK_EQUAL(trace.resource_spans.at(0).resource.attributes.size(), 1); BOOST_CHECK_EQUAL(trace.resource_spans.at(0).resource.attributes.at(0).key, "service.name"); + BOOST_ASSERT(trace.resource_spans.at(0).scope_spans.at(0).scope.attributes.size() == 0); + // Now activate and add 2 attributes tracer->activate(); tracer->setTraceAttribute("foo", AnyValue{"bar"}); @@ -212,12 +214,14 @@ BOOST_AUTO_TEST_CASE(attributes) trace = tracer->getTracesData(); - BOOST_ASSERT(trace.resource_spans.at(0).resource.attributes.size() == 3); - BOOST_CHECK_EQUAL(trace.resource_spans.at(0).resource.attributes.at(1).key, "foo"); - BOOST_CHECK_EQUAL(trace.resource_spans.at(0).resource.attributes.at(1).value, AnyValue{"bar"}); + BOOST_ASSERT(trace.resource_spans.at(0).resource.attributes.size() == 1); + BOOST_ASSERT(trace.resource_spans.at(0).scope_spans.at(0).scope.attributes.size() == 2); + + BOOST_CHECK_EQUAL(trace.resource_spans.at(0).scope_spans.at(0).scope.attributes.at(0).key, "foo"); + BOOST_CHECK_EQUAL(trace.resource_spans.at(0).scope_spans.at(0).scope.attributes.at(0).value, AnyValue{"bar"}); - BOOST_CHECK_EQUAL(trace.resource_spans.at(0).resource.attributes.at(2).key, "baz"); - BOOST_CHECK_EQUAL(trace.resource_spans.at(0).resource.attributes.at(2).value, AnyValue{256}); + BOOST_CHECK_EQUAL(trace.resource_spans.at(0).scope_spans.at(0).scope.attributes.at(1).key, "baz"); + BOOST_CHECK_EQUAL(trace.resource_spans.at(0).scope_spans.at(0).scope.attributes.at(1).value, AnyValue{256}); // Add a span and some attributes auto spanid = tracer->openSpan("anEvent").getSpanID(); @@ -239,7 +243,7 @@ BOOST_AUTO_TEST_CASE(getOTProtobuf) tracer->activate(); tracer->setTraceAttribute("foo", AnyValue{"bar"}); data = tracer->getOTProtobuf(); - BOOST_TEST(data.size() == 45U); + BOOST_TEST(data.size() == 49U); } BOOST_AUTO_TEST_SUITE_END() diff --git a/regression-tests.dnsdist/test_OpenTelemetryTracing.py b/regression-tests.dnsdist/test_OpenTelemetryTracing.py index 83350a5710..a2705a9524 100644 --- a/regression-tests.dnsdist/test_OpenTelemetryTracing.py +++ b/regression-tests.dnsdist/test_OpenTelemetryTracing.py @@ -62,26 +62,24 @@ class DNSDistOpenTelemetryProtobufBaseTest(DNSDistOpenTelemetryProtobufTest): ) self.assertEqual(len(ot_data["resource_spans"]), 1) - self.assertEqual(len(ot_data["resource_spans"][0]["resource"]["attributes"]), 4) + self.assertEqual(len(ot_data["resource_spans"][0]["resource"]["attributes"]), 1) # Ensure all attributes exist for field in ot_data["resource_spans"][0]["resource"]["attributes"]: - self.assertTrue( - field["key"] - in ["service.name", "query.qname", "query.qtype", "query.remote"] - ) + self.assertTrue(field["key"] in ["service.name"]) # Ensure the values are correct # TODO: query.remote with port - msg_attrs = { + msg_scope_attrs = { v["key"]: v["value"]["string_value"] - for v in ot_data["resource_spans"][0]["resource"]["attributes"] + for v in ot_data["resource_spans"][0]["scope_spans"][0]["scope"][ + "attributes" + ] if v["key"] != "query.remote" } self.assertDictEqual( - msg_attrs, + msg_scope_attrs, { - "service.name": "dnsdist", "query.qname": "query.ot.tests.powerdns.com", "query.qtype": "A", },