From: bert hubert Date: Wed, 13 May 2015 18:05:36 +0000 (+0200) Subject: implement various averaged latency stats for dnsdist X-Git-Tag: dnsdist-1.0.0-alpha1~248^2~28^2~47 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e16fd59cb8fc839a26d56e3c49da89b763adf1ba;p=thirdparty%2Fpdns.git implement various averaged latency stats for dnsdist --- diff --git a/pdns/dnsdist-carbon.cc b/pdns/dnsdist-carbon.cc index f94cd3839e..3bdecc1259 100644 --- a/pdns/dnsdist-carbon.cc +++ b/pdns/dnsdist-carbon.cc @@ -42,7 +42,12 @@ try boost::replace_all(hostname, ".", "_"); } for(const auto& e : g_stats.entries) { - str<<"dnsdist."<load()<<' '<(&e.second)) + str<<(*val)->load(); + else + str<<*boost::get(e.second); + str<<' '< state) else if(udiff < 1000000) g_stats.latency100_1000++; else g_stats.latencySlow++; - g_stats.latency = (1023.0*g_stats.latency/1024.0) + udiff/1024.0; + auto doAvg = [](double& var, double n, double weight) { + var = (weight -1) * var/weight + n/weight; + }; + + doAvg(g_stats.latencyAvg100, udiff, 100); + doAvg(g_stats.latencyAvg1000, udiff, 1000); + doAvg(g_stats.latencyAvg10000, udiff, 10000); + doAvg(g_stats.latencyAvg1000000, udiff, 1000000); ids->origFD = -1; } @@ -882,7 +889,6 @@ struct int main(int argc, char** argv) try { - g_stats.latency=0; rl_attempted_completion_function = my_completion; rl_completion_append_character = 0; @@ -970,7 +976,7 @@ try if(g_cmdLine.beClient || !g_cmdLine.command.empty()) { setupLua(true, g_cmdLine.config); doClient(g_serverControl, g_cmdLine.command); - exit(EXIT_SUCCESS); + _exit(EXIT_SUCCESS); } auto todo=setupLua(false, g_cmdLine.config); diff --git a/pdns/dnsdist.hh b/pdns/dnsdist.hh index 4c0840c1dc..20a3b13310 100644 --- a/pdns/dnsdist.hh +++ b/pdns/dnsdist.hh @@ -6,6 +6,7 @@ #include "dnsname.hh" #include #include +#include #include #include #include "sholder.hh" @@ -27,8 +28,9 @@ struct DNSDistStats stat_t noPolicy{0}; stat_t latency0_1{0}, latency1_10{0}, latency10_50{0}, latency50_100{0}, latency100_1000{0}, latencySlow{0}; - double latency{0}; - std::vector> entries{ + double latencyAvg100{0}, latencyAvg1000{0}, latencyAvg10000{0}, latencyAvg1000000{0}; + typedef boost::variant entry_t; + std::vector> entries{ {"responses", &responses}, {"servfail-responses", &servfailResponses}, {"queries", &queries}, {"acl-drops", &aclDrops}, {"block-filter", &blockFilter}, {"rule-drop", &ruleDrop}, @@ -37,10 +39,13 @@ struct DNSDistStats {"trunc-failures", &truncFail}, {"no-policy", &noPolicy}, {"latency0-1", &latency0_1}, {"latency1-10", &latency1_10}, {"latency10-50", &latency10_50}, {"latency50-100", &latency50_100}, - {"latency100-1000", &latency100_1000}, {"latency-slow", &latencySlow} + {"latency100-1000", &latency100_1000}, {"latency-slow", &latencySlow}, + {"latency-avg100", &latencyAvg100}, {"latency-avg1000", &latencyAvg1000}, + {"latency-avg10000", &latencyAvg10000}, {"latency-avg1000000", &latencyAvg1000000} }; }; + extern struct DNSDistStats g_stats;