Quantcast
Channel: Serverphorums.com - HAProxy
Viewing all articles
Browse latest Browse all 5112

[PATCH 1/1] MINOR: cli: Dump all resolvers stats if no resolver (no replies)

$
0
0
Hi all -

Below is a patch for the 'show stat resolvers' cli command. It changes
the command such that it will show all resolvers configured, if you do
not specify a resolver id.

I found this useful for debugging, and plan on using it in the hatop tool.

Let me know if you have any feedback on it!

Thanks -

Andrew Hayworth
--

From c4061d948d21cabb95f093b5d9655c9d226724af Mon Sep 17 00:00:00 2001
From: Andrew Hayworth <andrew.hayworth@getbraintree.com>
Date: Fri, 2 Oct 2015 20:33:01 +0000
Subject: [PATCH 1/1] MINOR: cli: Dump all resolvers stats if no resolver
section is given

This commit adds support for dumping all resolver stats. Specifically
if a command 'show stats resolvers' is issued withOUT a resolver section
id, we dump all known resolver sections. If none are configured, a
message is displayed indicating that.
---
doc/configuration.txt | 6 +++--
src/dumpstats.c | 72 +++++++++++++++++++++++++++------------------------
2 files changed, 42 insertions(+), 36 deletions(-)

diff --git a/doc/configuration.txt b/doc/configuration.txt
index 3102516..e519662 100644
--- a/doc/configuration.txt
+++ b/doc/configuration.txt
@@ -16043,8 +16043,10 @@ show stat [<iid> <type> <sid>]
A similar empty line appears at the end of the second block (stats) so that
the reader knows the output has not been truncated.

-show stat resolvers <resolvers section id>
- Dump statistics for the given resolvers section.
+show stat resolvers [<resolvers section id>]
+ Dump statistics for the given resolvers section, or all resolvers sections
+ if no section is supplied.
+
For each name server, the following counters are reported:
sent: number of DNS requests sent to this server
valid: number of DNS valid responses received from this server
diff --git a/src/dumpstats.c b/src/dumpstats.c
index 1a39258..ea3f49a 100644
--- a/src/dumpstats.c
+++ b/src/dumpstats.c
@@ -1166,23 +1166,19 @@ static int stats_sock_parse_request(struct
stream_interface *si, char *line)
if (strcmp(args[2], "resolvers") == 0) {
struct dns_resolvers *presolvers;

- if (!*args[3]) {
- appctx->ctx.cli.msg = "Missing resolver section identifier.\n";
- appctx->st0 = STAT_CLI_PRINT;
- return 1;
- }
-
- appctx->ctx.resolvers.ptr = NULL;
- list_for_each_entry(presolvers, &dns_resolvers, list) {
- if (strcmp(presolvers->id, args[3]) == 0) {
- appctx->ctx.resolvers.ptr = presolvers;
- break;
+ if (*args[3]) {
+ appctx->ctx.resolvers.ptr = NULL;
+ list_for_each_entry(presolvers, &dns_resolvers, list) {
+ if (strcmp(presolvers->id, args[3]) == 0) {
+ appctx->ctx.resolvers.ptr = presolvers;
+ break;
+ }
+ }
+ if (appctx->ctx.resolvers.ptr == NULL) {
+ appctx->ctx.cli.msg = "Can't find that resolvers section\n";
+ appctx->st0 = STAT_CLI_PRINT;
+ return 1;
}
- }
- if (appctx->ctx.resolvers.ptr == NULL) {
- appctx->ctx.cli.msg = "Can't find resolvers section.\n";
- appctx->st0 = STAT_CLI_PRINT;
- return 1;
}

appctx->st2 = STAT_ST_INIT;
@@ -6402,24 +6398,32 @@ static int
stats_dump_resolvers_to_buffer(struct stream_interface *si)
/* fall through */

case STAT_ST_LIST:
- presolvers = appctx->ctx.resolvers.ptr;
- chunk_appendf(&trash, "Resolvers section %s\n", presolvers->id);
- list_for_each_entry(pnameserver, &presolvers->nameserver_list, list) {
- chunk_appendf(&trash, " nameserver %s:\n", pnameserver->id);
- chunk_appendf(&trash, " sent: %ld\n", pnameserver->counters.sent);
- chunk_appendf(&trash, " valid: %ld\n", pnameserver->counters.valid);
- chunk_appendf(&trash, " update: %ld\n", pnameserver->counters.update);
- chunk_appendf(&trash, " cname: %ld\n", pnameserver->counters.cname);
- chunk_appendf(&trash, " cname_error: %ld\n",
pnameserver->counters.cname_error);
- chunk_appendf(&trash, " any_err: %ld\n", pnameserver->counters.any_err);
- chunk_appendf(&trash, " nx: %ld\n", pnameserver->counters.nx);
- chunk_appendf(&trash, " timeout: %ld\n", pnameserver->counters.timeout);
- chunk_appendf(&trash, " refused: %ld\n", pnameserver->counters.refused);
- chunk_appendf(&trash, " other: %ld\n", pnameserver->counters.other);
- chunk_appendf(&trash, " invalid: %ld\n", pnameserver->counters.invalid);
- chunk_appendf(&trash, " too_big: %ld\n", pnameserver->counters.too_big);
- chunk_appendf(&trash, " truncated: %ld\n",
pnameserver->counters.truncated);
- chunk_appendf(&trash, " outdated: %ld\n",
pnameserver->counters.outdated);
+ if (LIST_ISEMPTY(&dns_resolvers)) {
+ chunk_appendf(&trash, "No resolvers found\n");
+ }
+ else {
+ list_for_each_entry(presolvers, &dns_resolvers, list) {
+ if (appctx->ctx.resolvers.ptr != NULL &&
appctx->ctx.resolvers.ptr != presolvers) continue;
+
+ chunk_appendf(&trash, "Resolvers section %s\n", presolvers->id);
+ list_for_each_entry(pnameserver, &presolvers->nameserver_list, list) {
+ chunk_appendf(&trash, " nameserver %s:\n", pnameserver->id);
+ chunk_appendf(&trash, " sent: %ld\n", pnameserver->counters.sent);
+ chunk_appendf(&trash, " valid: %ld\n", pnameserver->counters.valid);
+ chunk_appendf(&trash, " update: %ld\n",
pnameserver->counters.update);
+ chunk_appendf(&trash, " cname: %ld\n", pnameserver->counters.cname);
+ chunk_appendf(&trash, " cname_error: %ld\n",
pnameserver->counters.cname_error);
+ chunk_appendf(&trash, " any_err: %ld\n",
pnameserver->counters.any_err);
+ chunk_appendf(&trash, " nx: %ld\n", pnameserver->counters.nx);
+ chunk_appendf(&trash, " timeout: %ld\n",
pnameserver->counters.timeout);
+ chunk_appendf(&trash, " refused: %ld\n",
pnameserver->counters.refused);
+ chunk_appendf(&trash, " other: %ld\n", pnameserver->counters.other);
+ chunk_appendf(&trash, " invalid: %ld\n",
pnameserver->counters.invalid);
+ chunk_appendf(&trash, " too_big: %ld\n",
pnameserver->counters.too_big);
+ chunk_appendf(&trash, " truncated: %ld\n",
pnameserver->counters.truncated);
+ chunk_appendf(&trash, " outdated: %ld\n",
pnameserver->counters.outdated);
+ }
+ }
}

/* display response */
--
2.1.3

Viewing all articles
Browse latest Browse all 5112

Latest Images

Trending Articles



Latest Images