]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
feat(dnsdist): create pdns::trace::dnsdist::getCloserForInternalSpan function
authorPieter Lexis <pieter.lexis@powerdns.com>
Wed, 1 Apr 2026 13:31:06 +0000 (15:31 +0200)
committerPieter Lexis <pieter.lexis@powerdns.com>
Mon, 1 Jun 2026 10:51:43 +0000 (12:51 +0200)
pdns/dnsdistdist/dnsdist-opentelemetry.cc
pdns/dnsdistdist/dnsdist-opentelemetry.hh
pdns/dnsdistdist/dnsdist.cc

index 043a8e10ccf17525f7fa4db110eb79a96cabf531..aae37d61a743bdd2d8287d1c37016ea80f67b3de 100644 (file)
@@ -414,4 +414,15 @@ bool addTraceparentEdnsOptionToPacketBuffer([[maybe_unused]] PacketBuffer& origB
 #endif
 }
 
+std::optional<pdns::trace::dnsdist::Tracer::Closer> getCloserForInternalSpan([[maybe_unused]] std::shared_ptr<pdns::trace::dnsdist::Tracer>& tracer, [[maybe_unused]] const std::string& spanName)
+{
+#ifndef DISABLE_PROTOBUF
+  if (tracer != nullptr) {
+    auto ret = std::make_optional(tracer->openSpan(spanName));
+    ret->setKind(SpanKind::SPAN_KIND_INTERNAL);
+    return ret;
+  }
+#endif
+  return std::nullopt;
+}
 } // namespace pdns::trace::dnsdist
index 541eface47d06823b17a2450028a3e12767422c4..c0245a0365acf09891406202ce4c1b3660a94280 100644 (file)
@@ -24,6 +24,7 @@
 #include <memory>
 #include <string>
 #include <vector>
+#include <optional>
 
 #include "ednsoptions.hh"
 
@@ -392,5 +393,13 @@ private:
 };
 
 std::vector<uint8_t> makeEDNSTraceParentOption(const std::shared_ptr<Tracer>& tracer);
-bool addTraceparentEdnsOptionToPacketBuffer(PacketBuffer& origBuf, const std::shared_ptr<Tracer>& tracer, size_t qnameWireLength, size_t proxyProtocolPayloadSize, uint16_t traceparentOptionCode = EDNSOptionCode::TRACEPARENT, bool isTCP = false);
+bool addTraceparentEdnsOptionToPacketBuffer(PacketBuffer& origBuf, const std::shared_ptr<Tracer>& tracer, const size_t qnameWireLength, const size_t proxyProtocolPayloadSize, const uint16_t traceparentOptionCode = EDNSOptionCode::TRACEPARENT, const bool isTCP = false);
+
+/*
+ * @brief Use this to *maybe* get an Internal Kind Closer in the current scope
+ *
+ * @param tracer A shared_ptr to a Tracer, if it is a nullptr, the returned closer is a nullopt
+ * @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);
 } // namespace pdns::trace::dnsdist
index 382cc9869edf4de4831de6878ec55179db256d39..a3ebb7fad9f41d8a751eb887d020863a86e5892d 100644 (file)
@@ -2474,18 +2474,6 @@ static void udpClientThread(std::vector<ClientState*> states)
   }
 }
 
-static std::optional<pdns::trace::dnsdist::Tracer::Closer> getCloser([[maybe_unused]] std::shared_ptr<pdns::trace::dnsdist::Tracer>& tracer, [[maybe_unused]] const std::string& spanName)
-{
-#ifndef DISABLE_PROTOBUF
-  if (tracer != nullptr) {
-    auto ret = std::make_optional(tracer->openSpan(spanName));
-    ret->setKind(SpanKind::SPAN_KIND_INTERNAL);
-    return ret;
-  }
-#endif
-  return std::nullopt;
-}
-
 static void maintThread()
 {
   setThreadName("dnsdist/main");
@@ -2503,23 +2491,23 @@ static void maintThread()
     if (tracer != nullptr) {
       tracer->setScopeSpanName("dnsdist/maintenance");
     }
-    auto maint_closer = getCloser(tracer, "maintenanceThread");
+    auto maint_closer = pdns::trace::dnsdist::getCloserForInternalSpan(tracer, "maintenanceThread");
     auto lua = g_lua.lock();
 
     pdns::trace::dnsdist::runWithLuaTracing(*lua, tracer, [&lua, &tracer, &secondsToWaitLog]() {
       try {
         auto maintenanceCallback = lua->readVariable<std::optional<std::function<void()>>>("maintenance");
         if (maintenanceCallback) {
-          auto closer = getCloser(tracer, "maintenanceFunction");
+          auto closer = pdns::trace::dnsdist::getCloserForInternalSpan(tracer, "maintenanceFunction");
           (*maintenanceCallback)();
         }
         {
-          auto closer = getCloser(tracer, "maintenanceHooks");
-          dnsdist::lua::hooks::runMaintenanceHooks(*lua);
+          auto closer = pdns::trace::dnsdist::getCloserForInternalSpan(tracer, "maintenanceHooks");
+          dnsdist::lua::hooks::runMaintenanceHooks(*lua, tracer);
         }
 #if !defined(DISABLE_DYNBLOCKS)
         {
-          auto closer = getCloser(tracer, "DynamicBlocks::runRegisteredGroups");
+          auto closer = pdns::trace::dnsdist::getCloserForInternalSpan(tracer, "DynamicBlocks::runRegisteredGroups");
           dnsdist::DynamicBlocks::runRegisteredGroups(*lua);
         }
 #endif /* DISABLE_DYNBLOCKS */
@@ -2537,7 +2525,7 @@ static void maintThread()
 
     counter++;
     if (counter >= dnsdist::configuration::getCurrentRuntimeConfiguration().d_cacheCleaningDelay) {
-      auto closer = getCloser(tracer, "CacheClean");
+      auto closer = pdns::trace::dnsdist::getCloserForInternalSpan(tracer, "CacheClean");
       /* keep track, for each cache, of whether we should keep
        expired entries */
       std::map<std::shared_ptr<DNSDistPacketCache>, bool> caches;