]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Apply clang-tidy's suggestions
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 16 Jun 2023 14:55:37 +0000 (16:55 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 27 Jun 2023 14:13:20 +0000 (16:13 +0200)
pdns/dnsdist-web.cc
pdns/dnsdistdist/dnsdist-lua-ffi.cc
pdns/dnsdistdist/dnsdist-metrics.cc
pdns/dnsdistdist/dnsdist-prometheus.hh
pdns/dnsdistdist/dnsdist-web.hh
pdns/dnsdistdist/test-dnsdist-lua-ffi.cc

index dfb9718b3bf4dbd944f752446849a2614112a602..d47f33cd63318759d7460850093b0a2c361d22a0 100644 (file)
@@ -213,9 +213,9 @@ std::map<std::string, MetricDefinition> MetricDefinitionStorage::metrics{
 };
 #endif /* DISABLE_PROMETHEUS */
 
-bool addMetricDefinition(const std::string& name, const std::string& type, const std::string& description, const std::string& customName) {
+bool addMetricDefinition(const dnsdist::prometheus::PrometheusMetricDefinition& def) {
 #ifndef DISABLE_PROMETHEUS
-  return MetricDefinitionStorage::addMetricDefinition(name, type, description, customName);
+  return MetricDefinitionStorage::addMetricDefinition(def);
 #else
   return true;
 #endif /* DISABLE_PROMETHEUS */
index bf46aadece445a3c0f3eff705da613f80b70dcf1..33e13b534fb7f9ccea4e1145d6af0fdee5f1f8a4 100644 (file)
@@ -1607,11 +1607,8 @@ bool dnsdist_ffi_metric_declare(const char* name, size_t nameLen, const char* ty
   if (name == nullptr || nameLen == 0 || type == nullptr || description == nullptr) {
     return false;
   }
-  auto result = dnsdist::metrics::declareCustomMetric(name, type, description, customName ? std::optional<std::string>(customName) : std::nullopt);
-  if (result) {
-    return false;
-  }
-  return true;
+  auto result = dnsdist::metrics::declareCustomMetric(name, type, description, customName != nullptr ? std::optional<std::string>(customName) : std::nullopt);
+  return !result;
 }
 
 void dnsdist_ffi_metric_inc(const char* metricName, size_t metricNameLen)
index b4c537aaddc60aa9330229b056c5d0cf02572897..e86439c89e98d8ec2ae143151b746624687e7ab0 100644 (file)
@@ -31,10 +31,18 @@ namespace dnsdist::metrics
 struct MutableCounter
 {
   MutableCounter() = default;
-  MutableCounter(MutableCounter&& rhs) :
+  MutableCounter(const MutableCounter&) = delete;
+  MutableCounter(MutableCounter&& rhs) noexcept :
     d_value(rhs.d_value.load())
   {
   }
+  MutableCounter& operator=(const MutableCounter&) = delete;
+  MutableCounter& operator=(MutableCounter&& rhs) noexcept
+  {
+    d_value = rhs.d_value.load();
+    return *this;
+  }
+  ~MutableCounter() = default;
 
   mutable stat_t d_value{0};
 };
@@ -42,10 +50,18 @@ struct MutableCounter
 struct MutableGauge
 {
   MutableGauge() = default;
-  MutableGauge(MutableGauge&& rhs) :
+  MutableGauge(const MutableGauge&) = delete;
+  MutableGauge(MutableGauge&& rhs) noexcept :
     d_value(rhs.d_value.load())
   {
   }
+  MutableGauge& operator=(const MutableGauge&) = delete;
+  MutableGauge& operator=(MutableGauge&& rhs) noexcept
+  {
+    d_value = rhs.d_value.load();
+    return *this;
+  }
+  ~MutableGauge() = default;
 
   mutable pdns::stat_t_trait<double> d_value{0};
 };
@@ -97,17 +113,17 @@ Stats::Stats() :
     {"uptime", uptimeOfProcess},
     {"real-memory-usage", getRealMemoryUsage},
     {"special-memory-usage", getSpecialMemoryUsage},
-    {"udp-in-errors", std::bind(udpErrorStats, "udp-in-errors")},
-    {"udp-noport-errors", std::bind(udpErrorStats, "udp-noport-errors")},
-    {"udp-recvbuf-errors", std::bind(udpErrorStats, "udp-recvbuf-errors")},
-    {"udp-sndbuf-errors", std::bind(udpErrorStats, "udp-sndbuf-errors")},
-    {"udp-in-csum-errors", std::bind(udpErrorStats, "udp-in-csum-errors")},
-    {"udp6-in-errors", std::bind(udp6ErrorStats, "udp6-in-errors")},
-    {"udp6-recvbuf-errors", std::bind(udp6ErrorStats, "udp6-recvbuf-errors")},
-    {"udp6-sndbuf-errors", std::bind(udp6ErrorStats, "udp6-sndbuf-errors")},
-    {"udp6-noport-errors", std::bind(udp6ErrorStats, "udp6-noport-errors")},
-    {"udp6-in-csum-errors", std::bind(udp6ErrorStats, "udp6-in-csum-errors")},
-    {"tcp-listen-overflows", std::bind(tcpErrorStats, "ListenOverflows")},
+    {"udp-in-errors", [](const std::string&) { return udpErrorStats("udp-in-errors"); }},
+    {"udp-noport-errors", [](const std::string&) { return udpErrorStats("udp-noport-errors"); }},
+    {"udp-recvbuf-errors", [](const std::string&) { return udpErrorStats("udp-recvbuf-errors"); }},
+    {"udp-sndbuf-errors", [](const std::string&) { return udpErrorStats("udp-sndbuf-errors"); }},
+    {"udp-in-csum-errors", [](const std::string&) { return udpErrorStats("udp-in-csum-errors"); }},
+    {"udp6-in-errors", [](const std::string&) { return udp6ErrorStats("udp6-in-errors"); }},
+    {"udp6-recvbuf-errors", [](const std::string&) { return udp6ErrorStats("udp6-recvbuf-errors"); }},
+    {"udp6-sndbuf-errors", [](const std::string&) { return udp6ErrorStats("udp6-sndbuf-errors"); }},
+    {"udp6-noport-errors", [](const std::string&) { return udp6ErrorStats("udp6-noport-errors"); }},
+    {"udp6-in-csum-errors", [](const std::string&) { return udp6ErrorStats("udp6-in-csum-errors"); }},
+    {"tcp-listen-overflows", [](const std::string&) { return tcpErrorStats("ListenOverflows"); }},
     {"noncompliant-queries", &nonCompliantQueries},
     {"noncompliant-responses", &nonCompliantResponses},
     {"proxy-protocol-invalid", &proxyProtocolInvalid},
@@ -149,7 +165,8 @@ std::optional<std::string> declareCustomMetric(const std::string& name, const st
     auto itp = customCounters->insert({name, MutableCounter()});
     if (itp.second) {
       g_stats.entries.write_lock()->emplace_back(Stats::EntryPair{name, &(*customCounters)[name].d_value});
-      addMetricDefinition(name, "counter", description, customName ? *customName : "");
+      dnsdist::prometheus::PrometheusMetricDefinition def{name, "counter", description, customName ? *customName : ""};
+      addMetricDefinition(def);
     }
   }
   else if (type == "gauge") {
@@ -157,7 +174,8 @@ std::optional<std::string> declareCustomMetric(const std::string& name, const st
     auto itp = customGauges->insert({name, MutableGauge()});
     if (itp.second) {
       g_stats.entries.write_lock()->emplace_back(Stats::EntryPair{name, &(*customGauges)[name].d_value});
-      addMetricDefinition(name, "gauge", description, customName ? *customName : "");
+      dnsdist::prometheus::PrometheusMetricDefinition def{name, "gauge", description, customName ? *customName : ""};
+      addMetricDefinition(def);
     }
   }
   else {
@@ -171,11 +189,8 @@ std::variant<uint64_t, Error> incrementCustomCounter(const std::string_view& nam
   auto customCounters = s_customCounters.read_lock();
   auto metric = customCounters->find(name);
   if (metric != customCounters->end()) {
-    if (step) {
-      metric->second.d_value += step;
-      return metric->second.d_value.load();
-    }
-    return ++(metric->second.d_value);
+    metric->second.d_value += step;
+    return metric->second.d_value.load();
   }
   return std::string("Unable to increment custom metric '") + std::string(name) + "': no such metric";
 }
@@ -185,11 +200,8 @@ std::variant<uint64_t, Error> decrementCustomCounter(const std::string_view& nam
   auto customCounters = s_customCounters.read_lock();
   auto metric = customCounters->find(name);
   if (metric != customCounters->end()) {
-    if (step) {
-      metric->second.d_value -= step;
-      return metric->second.d_value.load();
-    }
-    return --(metric->second.d_value);
+    metric->second.d_value -= step;
+    return metric->second.d_value.load();
   }
   return std::string("Unable to decrement custom metric '") + std::string(name) + "': no such metric";
 }
index 15567bff044893f408758f2ef90a11b949bf12fb..011053d32e29958d10a047f74f7e882c21141af6 100644 (file)
  */
 #pragma once
 
+namespace dnsdist::prometheus
+{
+struct PrometheusMetricDefinition
+{
+  const std::string& name;
+  const std::string& type;
+  const std::string& description;
+  const std::string& customName;
+};
+}
+
 #ifndef DISABLE_PROMETHEUS
 // Metric types for Prometheus
 enum class PrometheusMetricType: uint8_t {
@@ -56,16 +67,16 @@ struct MetricDefinitionStorage {
     return true;
   };
 
-  static bool addMetricDefinition(const std::string& name, const std::string& type, const std::string& description, const std::string& customName) {
+  static bool addMetricDefinition(const dnsdist::prometheus::PrometheusMetricDefinition& def) {
     static const std::map<std::string, PrometheusMetricType> namesToTypes = {
       {"counter", PrometheusMetricType::counter},
       {"gauge",   PrometheusMetricType::gauge},
     };
-    auto realtype = namesToTypes.find(type);
+    auto realtype = namesToTypes.find(def.type);
     if (realtype == namesToTypes.end()) {
       return false;
     }
-    metrics.emplace(name, MetricDefinition{realtype->second, description, customName});
+    metrics.emplace(def.name, MetricDefinition{realtype->second, def.description, def.customName});
     return true;
   }
 
index 3497d65a96b2dc6b5c84034b9dc6f86da1ac91b5..7325025823d77d6ca20b7e114973bbc1dfd83fb9 100644 (file)
@@ -1,6 +1,7 @@
 #pragma once
 
 #include "credentials.hh"
+#include "dnsdist-prometheus.hh"
 
 void setWebserverAPIKey(std::unique_ptr<CredentialsHolder>&& apiKey);
 void setWebserverPassword(std::unique_ptr<CredentialsHolder>&& password);
@@ -16,6 +17,6 @@ void dnsdistWebserverThread(int sock, const ComboAddress& local);
 void registerBuiltInWebHandlers();
 void clearWebHandlers();
 
-bool addMetricDefinition(const std::string& name, const std::string& type, const std::string& description, const std::string& customPrometheusName);
-
 std::string getWebserverConfig();
+
+bool addMetricDefinition(const dnsdist::prometheus::PrometheusMetricDefinition& def);
index 8a5a06763bff8991ebf0a912cbaf474234fd4498..81897a340d1ca88a152f5e45442af6c89d2e8282 100644 (file)
 
 #include "dnsdist-lua-ffi.hh"
 #include "dnsdist-rings.hh"
+#include "dnsdist-web.hh"
 #include "dnsparser.hh"
 #include "dnswriter.hh"
 
-bool addMetricDefinition(const std::string& name, const std::string& type, const std::string& description, const std::string& customPrometheusName)
+bool addMetricDefinition(const dnsdist::prometheus::PrometheusMetricDefinition& def)
 {
   return true;
 }