From 64e93522ade211912b79ba27758254811113aaf8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Thu, 12 Dec 2024 19:36:41 +0100 Subject: [PATCH] dnsdist: skip metrics with labels for carbon export and stats dump --- pdns/dnsdistdist/dnsdist-carbon.cc | 5 +++++ pdns/dnsdistdist/dnsdist-lua-inspection.cc | 14 +++++++++++--- pdns/dnsdistdist/dnsdist-lua.cc | 6 +++--- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/pdns/dnsdistdist/dnsdist-carbon.cc b/pdns/dnsdistdist/dnsdist-carbon.cc index 040783b68a..66ec734250 100644 --- a/pdns/dnsdistdist/dnsdist-carbon.cc +++ b/pdns/dnsdistdist/dnsdist-carbon.cc @@ -57,6 +57,11 @@ static bool doOneCarbonExport(const Carbon::Endpoint& endpoint) { auto entries = dnsdist::metrics::g_stats.entries.read_lock(); for (const auto& entry : *entries) { + // Skip non-empty labels, since labels are not supported in Carbon + if (!entry.d_labels.empty()) { + continue; + } + str << namespace_name << "." << hostname << "." << instance_name << "." << entry.d_name << ' '; if (const auto& val = std::get_if(&entry.d_value)) { str << (*val)->load(); diff --git a/pdns/dnsdistdist/dnsdist-lua-inspection.cc b/pdns/dnsdistdist/dnsdist-lua-inspection.cc index 2ad3999f7c..26d37f7122 100644 --- a/pdns/dnsdistdist/dnsdist-lua-inspection.cc +++ b/pdns/dnsdistdist/dnsdist-lua-inspection.cc @@ -19,7 +19,9 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include #include +#include #include "dnsdist.hh" #include "dnsdist-console.hh" @@ -811,12 +813,18 @@ void setupLuaInspection(LuaContext& luaCtx) boost::format fmt("%-35s\t%+11s"); g_outputBuffer.clear(); auto entries = *dnsdist::metrics::g_stats.entries.read_lock(); - sort(entries.begin(), entries.end(), + + // Filter entries to just the ones without label, for clearer output + std::vector> unlabeledEntries; + std::copy_if(entries.begin(), entries.end(), std::back_inserter(unlabeledEntries), [](const decltype(entries)::value_type& triple) { return triple.d_labels.empty(); }); + + sort(unlabeledEntries.begin(), unlabeledEntries.end(), [](const decltype(entries)::value_type& lhs, const decltype(entries)::value_type& rhs) { return lhs.d_name < rhs.d_name; }); boost::format flt(" %9.1f"); - for (const auto& entry : entries) { + for (const auto& entryRef : unlabeledEntries) { + const auto& entry = entryRef.get(); string second; if (const auto& val = std::get_if(&entry.d_value)) { second = std::to_string((*val)->load()); @@ -828,7 +836,7 @@ void setupLuaInspection(LuaContext& luaCtx) second = std::to_string((*func)(entry.d_name)); } - if (leftcolumn.size() < entries.size() / 2) { + if (leftcolumn.size() < unlabeledEntries.size() / 2) { leftcolumn.push_back((fmt % entry.d_name % second).str()); } else { diff --git a/pdns/dnsdistdist/dnsdist-lua.cc b/pdns/dnsdistdist/dnsdist-lua.cc index ff4e05587e..eec7e4dc97 100644 --- a/pdns/dnsdistdist/dnsdist-lua.cc +++ b/pdns/dnsdistdist/dnsdist-lua.cc @@ -3413,7 +3413,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck) newThread.detach(); }); - luaCtx.writeFunction("declareMetric", [](const std::string& name, const std::string& type, const std::string& description, const boost::optional>& opts) { + luaCtx.writeFunction("declareMetric", [](const std::string& name, const std::string& type, const std::string& description, boost::optional> opts) { bool withLabels = false; std::optional customName = std::nullopt; if (opts) { @@ -3436,7 +3436,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck) } return true; }); - luaCtx.writeFunction("incMetric", [](const std::string& name, const boost::optional>& opts) { + luaCtx.writeFunction("incMetric", [](const std::string& name, boost::optional> opts) { auto incOpts = opts.get_value_or(1); uint64_t step = 1; std::unordered_map labels; @@ -3457,7 +3457,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck) } return std::get(result); }); - luaCtx.writeFunction("decMetric", [](const std::string& name, const boost::optional>& opts) { + luaCtx.writeFunction("decMetric", [](const std::string& name, boost::optional> opts) { auto decOpts = opts.get_value_or(1); uint64_t step = 1; std::unordered_map labels; -- 2.47.2