else if (const auto& adval = std::get_if<pdns::stat_t_trait<double>*>(&entry.d_value)) {
str << (*adval)->load();
}
- else if (const auto& dval = std::get_if<double*>(&entry.d_value)) {
- str << **dval;
- }
else if (const auto& func = std::get_if<dnsdist::metrics::Stats::statfunction_t>(&entry.d_value)) {
str << (*func)(entry.d_name);
}
else if (const auto& adval = std::get_if<pdns::stat_t_trait<double>*>(&entry.d_value)) {
second = (flt % (*adval)->load()).str();
}
- else if (const auto& dval = std::get_if<double*>(&entry.d_value)) {
- second = (flt % (**dval)).str();
- }
else if (const auto& func = std::get_if<dnsdist::metrics::Stats::statfunction_t>(&entry.d_value)) {
second = std::to_string((*func)(entry.d_name));
}
stat_t tcpQueryPipeFull{0};
stat_t tcpCrossProtocolQueryPipeFull{0};
stat_t tcpCrossProtocolResponsePipeFull{0};
- double latencyAvg100{0}, latencyAvg1000{0}, latencyAvg10000{0}, latencyAvg1000000{0};
- double latencyTCPAvg100{0}, latencyTCPAvg1000{0}, latencyTCPAvg10000{0}, latencyTCPAvg1000000{0};
- double latencyDoTAvg100{0}, latencyDoTAvg1000{0}, latencyDoTAvg10000{0}, latencyDoTAvg1000000{0};
- double latencyDoHAvg100{0}, latencyDoHAvg1000{0}, latencyDoHAvg10000{0}, latencyDoHAvg1000000{0};
- double latencyDoQAvg100{0}, latencyDoQAvg1000{0}, latencyDoQAvg10000{0}, latencyDoQAvg1000000{0};
- double latencyDoH3Avg100{0}, latencyDoH3Avg1000{0}, latencyDoH3Avg10000{0}, latencyDoH3Avg1000000{0};
+ pdns::stat_t_trait<double> latencyAvg100{0}, latencyAvg1000{0}, latencyAvg10000{0}, latencyAvg1000000{0};
+ pdns::stat_t_trait<double> latencyTCPAvg100{0}, latencyTCPAvg1000{0}, latencyTCPAvg10000{0}, latencyTCPAvg1000000{0};
+ pdns::stat_t_trait<double> latencyDoTAvg100{0}, latencyDoTAvg1000{0}, latencyDoTAvg10000{0}, latencyDoTAvg1000000{0};
+ pdns::stat_t_trait<double> latencyDoHAvg100{0}, latencyDoHAvg1000{0}, latencyDoHAvg10000{0}, latencyDoHAvg1000000{0};
+ pdns::stat_t_trait<double> latencyDoQAvg100{0}, latencyDoQAvg1000{0}, latencyDoQAvg10000{0}, latencyDoQAvg1000000{0};
+ pdns::stat_t_trait<double> latencyDoH3Avg100{0}, latencyDoH3Avg1000{0}, latencyDoH3Avg10000{0}, latencyDoH3Avg1000000{0};
using statfunction_t = std::function<uint64_t(const std::string&)>;
- using entry_t = std::variant<stat_t*, pdns::stat_t_trait<double>*, double*, statfunction_t>;
+ using entry_t = std::variant<stat_t*, pdns::stat_t_trait<double>*, statfunction_t>;
struct EntryPair
{
std::string d_name;
return SNMP_ERR_GENERR;
}
- if (const auto& val = std::get_if<double*>(&stIt->second)) {
- std::string str(std::to_string(**val));
+ if (const auto& val = std::get_if<pdns::stat_t_trait<double>*>(&stIt->second)) {
+ std::string str(std::to_string((*val)->load()));
snmp_set_var_typed_value(requests->requestvb,
ASN_OCTET_STR,
str.c_str(),
return SNMP_ERR_GENERR;
}
-static void registerFloatStat(const char* name, const OIDStat& statOID, double* ptr)
+static void registerFloatStat(const char* name, const OIDStat& statOID, pdns::stat_t_trait<double>* ptr)
{
if (statOID.size() != OID_LENGTH(queriesOID)) {
errlog("Invalid OID for SNMP Float statistic %s", name);
else if (const auto& adval = std::get_if<pdns::stat_t_trait<double>*>(&entry.d_value)) {
output << (*adval)->load();
}
- else if (const auto& dval = std::get_if<double*>(&entry.d_value)) {
- output << **dval;
- }
else if (const auto& func = std::get_if<dnsdist::metrics::Stats::statfunction_t>(&entry.d_value)) {
output << (*func)(entry.d_name);
}
else if (const auto& adval = std::get_if<pdns::stat_t_trait<double>*>(&entry.d_value)) {
obj.emplace(entry.d_name, (*adval)->load());
}
- else if (const auto& dval = std::get_if<double*>(&entry.d_value)) {
- obj.emplace(entry.d_name, (**dval));
- }
else if (const auto& func = std::get_if<dnsdist::metrics::Stats::statfunction_t>(&entry.d_value)) {
obj.emplace(entry.d_name, (double)(*func)(entry.d_name));
}
{"name", item.d_name},
{"value", (*adval)->load()}});
}
- else if (const auto& dval = std::get_if<double*>(&item.d_value)) {
- doc.emplace_back(Json::object{
- {"type", "StatisticItem"},
- {"name", item.d_name},
- {"value", (**dval)}});
- }
else if (const auto& func = std::get_if<dnsdist::metrics::Stats::statfunction_t>(&item.d_value)) {
doc.emplace_back(Json::object{
{"type", "StatisticItem"},
static void doLatencyStats(dnsdist::Protocol protocol, double udiff)
{
- constexpr auto doAvg = [](double& var, double n, double weight) {
- var = (weight - 1) * var / weight + n / weight;
+ constexpr auto doAvg = [](pdns::stat_t_trait<double>& var, double n, double weight) {
+ var.store((weight - 1) * var.load() / weight + n / weight);
};
if (protocol == dnsdist::Protocol::DoUDP || protocol == dnsdist::Protocol::DNSCryptUDP) {