boost::replace_all(serverName, ".", "_");
const string base = namespace_name + "." + hostname + "." + instance_name + ".servers." + serverName + ".";
str<<base<<"queries" << ' ' << state->queries.load() << " " << now << "\r\n";
+ str<<base<<"responses" << ' ' << state->responses.load() << " " << now << "\r\n";
str<<base<<"drops" << ' ' << state->reuseds.load() << " " << now << "\r\n";
str<<base<<"latency" << ' ' << (state->availability != DownstreamState::Availability::Down ? state->latencyUsec/1000.0 : 0) << " " << now << "\r\n";
str<<base<<"senderrors" << ' ' << state->sendErrors.load() << " " << now << "\r\n";
const string base = namespace_name + "." + hostname + "." + instance_name + ".frontends." + frontName + ".";
str<<base<<"queries" << ' ' << front->queries.load() << " " << now << "\r\n";
+ str<<base<<"responses" << ' ' << front->responses.load() << " " << now << "\r\n";
str<<base<<"tcpdiedreadingquery" << ' '<< front->tcpDiedReadingQuery.load() << " " << now << "\r\n";
str<<base<<"tcpdiedsendingresponse" << ' '<< front->tcpDiedSendingResponse.load() << " " << now << "\r\n";
str<<base<<"tcpgaveup" << ' '<< front->tcpGaveUp.load() << " " << now << "\r\n";
output << "# HELP " << statesbase << "queries " << "Amount of queries relayed to server" << "\n";
output << "# TYPE " << statesbase << "queries " << "counter" << "\n";
+ output << "# HELP " << statesbase << "responses " << "Amount of responses received from this server" << "\n";
+ output << "# TYPE " << statesbase << "responses " << "counter" << "\n";
output << "# HELP " << statesbase << "drops " << "Amount of queries not answered by server" << "\n";
output << "# TYPE " << statesbase << "drops " << "counter" << "\n";
output << "# HELP " << statesbase << "latency " << "Server's latency when answering questions in milliseconds" << "\n";
% serverName % state->remote.toStringWithPort());
output << statesbase << "queries" << label << " " << state->queries.load() << "\n";
+ output << statesbase << "responses" << label << " " << state->responses.load() << "\n";
output << statesbase << "drops" << label << " " << state->reuseds.load() << "\n";
output << statesbase << "latency" << label << " " << state->latencyUsec/1000.0 << "\n";
output << statesbase << "senderrors" << label << " " << state->sendErrors.load() << "\n";
const string frontsbase = "dnsdist_frontend_";
output << "# HELP " << frontsbase << "queries " << "Amount of queries received by this frontend" << "\n";
output << "# TYPE " << frontsbase << "queries " << "counter" << "\n";
+ output << "# HELP " << frontsbase << "responses " << "Amount of responses sent by this frontend" << "\n";
+ output << "# TYPE " << frontsbase << "responses " << "counter" << "\n";
output << "# HELP " << frontsbase << "tcpdiedreadingquery " << "Amount of TCP connections terminated while reading the query from the client" << "\n";
output << "# TYPE " << frontsbase << "tcpdiedreadingquery " << "counter" << "\n";
output << "# HELP " << frontsbase << "tcpdiedsendingresponse " << "Amount of TCP connections terminated while sending a response to the client" << "\n";
% frontName % proto);
output << frontsbase << "queries" << label << front->queries.load() << "\n";
+ output << frontsbase << "responses" << label << front->responses.load() << "\n";
if (front->isTCP()) {
output << frontsbase << "tcpdiedreadingquery" << label << front->tcpDiedReadingQuery.load() << "\n";
output << frontsbase << "tcpdiedsendingresponse" << label << front->tcpDiedSendingResponse.load() << "\n";
{"pools", pools},
{"latency", (double)(a->latencyUsec/1000.0)},
{"queries", (double)a->queries},
+ {"responses", (double)a->responses},
{"sendErrors", (double)a->sendErrors},
{"tcpDiedSendingQuery", (double)a->tcpDiedSendingQuery},
{"tcpDiedReadingResponse", (double)a->tcpDiedReadingResponse},
{ "tcp", front->tcpFD >= 0 },
{ "type", front->getType() },
{ "queries", (double) front->queries.load() },
+ { "responses", (double) front->responses.load() },
{ "tcpDiedReadingQuery", (double) front->tcpDiedReadingQuery.load() },
{ "tcpDiedSendingResponse", (double) front->tcpDiedSendingResponse.load() },
{ "tcpGaveUp", (double) front->tcpGaveUp.load() },
std::shared_ptr<DOHFrontend> dohFrontend{nullptr};
std::string interface;
std::atomic<uint64_t> queries{0};
+ mutable std::atomic<uint64_t> responses{0};
std::atomic<uint64_t> tcpDiedReadingQuery{0};
std::atomic<uint64_t> tcpDiedSendingResponse{0};
std::atomic<uint64_t> tcpGaveUp{0};
std::atomic<uint64_t> outstanding{0};
std::atomic<uint64_t> reuseds{0};
std::atomic<uint64_t> queries{0};
+ std::atomic<uint64_t> responses{0};
struct {
std::atomic<uint64_t> sendErrors{0};
std::atomic<uint64_t> reuseds{0};