]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
feat(dnsdist): centralize sending OT PB messages
authorPieter Lexis <pieter.lexis@powerdns.com>
Thu, 2 Apr 2026 08:24:42 +0000 (10:24 +0200)
committerPieter Lexis <pieter.lexis@powerdns.com>
Mon, 1 Jun 2026 10:51:43 +0000 (12:51 +0200)
pdns/dnsdistdist/dnsdist-idstate.cc
pdns/dnsdistdist/dnsdist-opentelemetry.cc
pdns/dnsdistdist/dnsdist-opentelemetry.hh
pdns/dnsdistdist/dnsdist.cc

index 28bc945fbb839c65d889b6d349d02585a98691fe..63cac9b8b6562289240dd0874f2d79d46d009314 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "dnsdist-idstate.hh"
 #include "dnsdist-doh-common.hh"
+#include "dnsdist-opentelemetry.hh"
 #include "dnsdist-protobuf.hh"
 #include "doh3.hh"
 #include "doq.hh"
@@ -93,16 +94,7 @@ InternalQueryState::~InternalQueryState()
       }
     }
 
-    if (!ottraceLoggers.empty()) {
-      pbBuf.clear();
-      pdns::ProtoZero::Message minimalMsg{pbBuf};
-      minimalMsg.setType(pdns::ProtoZero::Message::MessageType::DNSQueryType);
-      minimalMsg.setOpenTelemetryData(OTData);
-      minimalMsg.setOpenTelemetryTraceID(d_OTTracer->getTraceID());
-      for (auto const& msg_logger : ottraceLoggers) {
-        msg_logger->queueData(pbBuf);
-      }
-    }
+    pdns::trace::dnsdist::sendTracesToRemoteLoggers(d_OTTracer, ottraceLoggers);
   }
   catch (...) {
     /* We don't want any uncaught exceptions in a dtor and
index aae37d61a743bdd2d8287d1c37016ea80f67b3de..f631698ae485e9b319964fa47676379c96fe5fa0 100644 (file)
@@ -28,6 +28,7 @@
 #include <vector>
 
 #ifndef DISABLE_PROTOBUF
+#include "protozero.hh"
 #include "protozero-trace.hh"
 #endif
 
@@ -425,4 +426,23 @@ std::optional<pdns::trace::dnsdist::Tracer::Closer> getCloserForInternalSpan([[m
 #endif
   return std::nullopt;
 }
+
+void sendTracesToRemoteLoggers(const std::shared_ptr<Tracer>& tracer, [[maybe_unused]] const std::vector<std::shared_ptr<RemoteLoggerInterface>>& remoteloggers)
+{
+  if (tracer == nullptr || remoteloggers.empty()) {
+    return;
+  }
+
+#ifndef DISABLE_PROTOBUF
+  static thread_local string pbBuf;
+  pbBuf.clear();
+  pdns::ProtoZero::Message minimalMsg{pbBuf};
+  minimalMsg.setType(pdns::ProtoZero::Message::MessageType::InternalType);
+  minimalMsg.setOpenTelemetryTraceID(tracer->getTraceID());
+  minimalMsg.setOpenTelemetryData(tracer->getOTProtobuf());
+  for (const auto& remotelogger : remoteloggers) {
+    remotelogger->queueData(pbBuf);
+  }
+#endif // DISABLE_PROTOBUF
+}
 } // namespace pdns::trace::dnsdist
index c0245a0365acf09891406202ce4c1b3660a94280..84b721191deeb0a27d0b589071560f087a8d0a40 100644 (file)
@@ -27,6 +27,7 @@
 #include <optional>
 
 #include "ednsoptions.hh"
+#include "remote_logger.hh"
 
 #ifndef DISABLE_PROTOBUF
 #include "protozero-trace.hh"
@@ -402,4 +403,9 @@ bool addTraceparentEdnsOptionToPacketBuffer(PacketBuffer& origBuf, const std::sh
  * @param spanName The name of the span
  */
 std::optional<pdns::trace::dnsdist::Tracer::Closer> getCloserForInternalSpan([[maybe_unused]] std::shared_ptr<pdns::trace::dnsdist::Tracer>& tracer, [[maybe_unused]] const std::string& spanName);
+
+/*
+ * @brief sends the protobuf for tracer to remoteloggers
+ */
+void sendTracesToRemoteLoggers(const std::shared_ptr<Tracer>& tracer, const std::vector<std::shared_ptr<RemoteLoggerInterface>>& remoteloggers);
 } // namespace pdns::trace::dnsdist
index a3ebb7fad9f41d8a751eb887d020863a86e5892d..e0f4b5dd53ae8165c2e2852f14315f2c147b3374 100644 (file)
@@ -2570,15 +2570,7 @@ static void maintThread()
 #ifndef DISABLE_PROTOBUF
     if (tracer != nullptr) {
       maint_closer = std::nullopt; // set the stop time by destructing the Closer
-      static thread_local string pbBuf;
-      pbBuf.clear();
-      pdns::ProtoZero::Message minimalMsg{pbBuf};
-      minimalMsg.setType(pdns::ProtoZero::Message::MessageType::InternalType);
-      minimalMsg.setOpenTelemetryTraceID(tracer->getTraceID());
-      minimalMsg.setOpenTelemetryData(tracer->getOTProtobuf());
-      for (const auto& remotelogger : dnsdist::configuration::getCurrentRuntimeConfiguration().d_maintenanceRemoteLoggers) {
-        remotelogger->queueData(pbBuf);
-      }
+      pdns::trace::dnsdist::sendTracesToRemoteLoggers(tracer, dnsdist::configuration::getCurrentRuntimeConfiguration().d_maintenanceRemoteLoggers);
     }
 #endif
   }