DNSResponseAction::Action action = DNSResponseAction::Action::None;
std::string ruleresult;
+ SpanID parentSpanID;
+ if (auto tracer = dnsResponse.ids.getTracer(); tracer != nullptr && dnsResponse.ids.tracingEnabled) {
+ parentSpanID = tracer->getLastSpanID();
+ }
+
for (const auto& rrule : respRuleActions) {
+ pdns::trace::dnsdist::Tracer::Closer ruleCloser;
+ if (auto tracer = dnsResponse.ids.getTracer(); tracer != nullptr && dnsResponse.ids.tracingEnabled) {
+ ruleCloser = tracer->openSpan("Rule: " + rrule.d_name, parentSpanID);
+ }
if (rrule.d_rule->matches(&dnsResponse)) {
++rrule.d_rule->d_matches;
action = (*rrule.d_action)(&dnsResponse, &ruleresult);
{
pdns::trace::dnsdist::Tracer::Closer closer;
if (auto tracer = dnsResponse.ids.getTracer(); tracer != nullptr && dnsResponse.ids.tracingEnabled) {
- closer = tracer->openSpan("processResponseAfterRules", tracer->getLastSpanID());
+ closer = tracer->openSpan("processResponseAfterRules", tracer->getLastSpanIDForName("processResponse"));
}
bool zeroScope = false;
if (!fixUpResponse(response, dnsResponse.ids.qname, dnsResponse.ids.origFlags, dnsResponse.ids.ednsAdded, dnsResponse.ids.ecsAdded, dnsResponse.ids.useZeroScope ? &zeroScope : nullptr)) {
string ruleresult;
bool drop = false;
+ SpanID parentSpanID;
+ if (auto tracer = dnsQuestion.ids.getTracer(); tracer != nullptr) {
+ parentSpanID = tracer->getLastSpanID();
+ }
+
for (const auto& rule : rules) {
if (!rule.d_rule->matches(&dnsQuestion)) {
continue;
}
+ pdns::trace::dnsdist::Tracer::Closer ruleCloser;
+ if (auto tracer = dnsQuestion.ids.getTracer(); tracer != nullptr) {
+ ruleCloser = tracer->openSpan("Rule: " + rule.d_name, parentSpanID);
+ }
+
rule.d_rule->d_matches++;
action = (*rule.d_action)(&dnsQuestion, &ruleresult);
if (processRulesResult(action, dnsQuestion, ruleresult, drop)) {
{
pdns::trace::dnsdist::Tracer::Closer closer;
if (auto tracer = dnsQuestion.ids.getTracer(); tracer != nullptr && dnsQuestion.ids.tracingEnabled) {
- closer = tracer->openSpan("selectBackendForOutgoingQuery", tracer->getLastSpanID());
+ // Not exactly processQuery, but it works for now
+ closer = tracer->openSpan("selectBackendForOutgoingQuery", tracer->getLastSpanIDForName("processQuery"));
}
const auto& policy = serverPool.policy != nullptr ? *serverPool.policy : *dnsdist::configuration::getCurrentRuntimeConfiguration().d_lbPolicy;
funcs = {
"processQuery",
"applyRulesToQuery",
+ "Rule: Enable tracing",
"selectBackendForOutgoingQuery",
"processResponse",
"applyRulesToResponse",
+ "Rule: Do PB logging",
}
if useTCP:
rl = newRemoteLogger('127.0.0.1:%d')
setOpenTelemetryTracing(true)
-addAction(AllRule(), SetTraceAction(true))
-addResponseAction(AllRule(), RemoteLogResponseAction(rl))
+addAction(AllRule(), SetTraceAction(true), {name="Enable tracing"})
+addResponseAction(AllRule(), RemoteLogResponseAction(rl), {name="Do PB logging"})
"""
def testBasic(self):
rl = newRemoteLogger('127.0.0.1:%d')
setOpenTelemetryTracing(true)
-addAction(AllRule(), SetTraceAction(true))
-addResponseAction(AllRule(), RemoteLogResponseAction(rl, nil, false, {}, {}, true))
+addAction(AllRule(), SetTraceAction(true), {name="Enable tracing"})
+addResponseAction(AllRule(), RemoteLogResponseAction(rl, nil, false, {}, {}, true), {name="Do PB logging"})
"""
def testBasic(self):