#endif
}
+SpanID Tracer::getRootSpanID()
+{
+#ifdef DISABLE_PROTOBUF
+ return 0;
+#else
+ if (auto spans = d_preActivationSpans.read_only_lock(); spans->size() != 0) {
+ auto iter = std::find_if(spans->cbegin(), spans->cend(), [](const auto& span) { return span.parent_span_id == pdns::trace::s_emptySpanID; });
+ if (iter != spans->cend()) {
+ return iter->span_id;
+ }
+ }
+ return SpanID{};
+#endif
+}
+
SpanID Tracer::getLastSpanID()
{
#ifdef DISABLE_PROTOBUF
*/
void closeSpan(const SpanID& spanID);
+ /**
+ * @brief Get the top-most SpanID
+ *
+ * @return The SpanID of the root Span
+ */
+ [[nodiscard]] SpanID getRootSpanID();
+
/**
* @brief Get the last SpanID generated
*
{
pdns::trace::dnsdist::Tracer::Closer closer;
if (auto tracer = dnsResponse.ids.getTracer(); tracer != nullptr && dnsResponse.ids.tracingEnabled) {
- closer = tracer->openSpan("processResponse");
+ closer = tracer->openSpan("processResponse", tracer->getRootSpanID());
}
const auto& chains = dnsdist::configuration::getCurrentRuntimeConfiguration().d_ruleChains;