mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-28 04:34:54 -04:00
Implement rndc reset-stats counter-name
This new rndc option allows to reset some statistics counters during runtime. At this moment only the high-water type counters are supported as such an ability to reset them after the initial peaks during the server's "warm-up" phase can be useful for some operators.
This commit is contained in:
parent
1d14612bb9
commit
bab20802b3
4 changed files with 59 additions and 0 deletions
|
|
@ -259,6 +259,9 @@ named_control_docommand(isccc_sexpr_t *message, bool readonly,
|
|||
result = named_server_refreshcommand(named_g_server, lex, text);
|
||||
} else if (command_compare(command, NAMED_COMMAND_RELOAD)) {
|
||||
result = named_server_reloadcommand(named_g_server, lex, text);
|
||||
} else if (command_compare(command, NAMED_COMMAND_RESETSTATS)) {
|
||||
result = named_server_resetstatscommand(named_g_server, lex,
|
||||
text);
|
||||
} else if (command_compare(command, NAMED_COMMAND_RESPONSELOG)) {
|
||||
result = named_server_setortoggle(named_g_server,
|
||||
"response logging",
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@
|
|||
#define NAMED_COMMAND_RECURSING "recursing"
|
||||
#define NAMED_COMMAND_REFRESH "refresh"
|
||||
#define NAMED_COMMAND_RELOAD "reload"
|
||||
#define NAMED_COMMAND_RESETSTATS "reset-stats"
|
||||
#define NAMED_COMMAND_RESPONSELOG "responselog"
|
||||
#define NAMED_COMMAND_RETRANSFER "retransfer"
|
||||
#define NAMED_COMMAND_SCAN "scan"
|
||||
|
|
|
|||
|
|
@ -153,6 +153,13 @@ named_server_reloadcommand(named_server_t *server, isc_lex_t *lex,
|
|||
* Act on a "reload" command from the command channel.
|
||||
*/
|
||||
|
||||
isc_result_t
|
||||
named_server_resetstatscommand(named_server_t *server, isc_lex_t *lex,
|
||||
isc_buffer_t **text);
|
||||
/*%<
|
||||
* Act on a "reset-stats" command from the command channel.
|
||||
*/
|
||||
|
||||
isc_result_t
|
||||
named_server_reconfigcommand(named_server_t *server);
|
||||
/*%<
|
||||
|
|
|
|||
|
|
@ -10487,6 +10487,54 @@ named_server_reloadcommand(named_server_t *server, isc_lex_t *lex,
|
|||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* Act on a "reset-stats" command from the command channel.
|
||||
*/
|
||||
isc_result_t
|
||||
named_server_resetstatscommand(named_server_t *server, isc_lex_t *lex,
|
||||
isc_buffer_t **text) {
|
||||
const char *arg = NULL;
|
||||
bool recursive_high_water = false;
|
||||
bool tcp_high_water = false;
|
||||
|
||||
REQUIRE(text != NULL);
|
||||
|
||||
/* Skip the command name. */
|
||||
(void)next_token(lex, text);
|
||||
|
||||
arg = next_token(lex, text);
|
||||
if (arg == NULL) {
|
||||
(void)putstr(text, "reset-stats: argument expected");
|
||||
(void)putnull(text);
|
||||
return ISC_R_UNEXPECTEDEND;
|
||||
}
|
||||
while (arg != NULL) {
|
||||
if (strcmp(arg, "recursive-high-water") == 0) {
|
||||
recursive_high_water = true;
|
||||
} else if (strcmp(arg, "tcp-high-water") == 0) {
|
||||
tcp_high_water = true;
|
||||
} else {
|
||||
(void)putstr(text, "reset-stats: "
|
||||
"unrecognized argument: ");
|
||||
(void)putstr(text, arg);
|
||||
(void)putnull(text);
|
||||
return ISC_R_FAILURE;
|
||||
}
|
||||
arg = next_token(lex, text);
|
||||
}
|
||||
|
||||
if (recursive_high_water) {
|
||||
isc_stats_set(ns_stats_get(server->sctx->nsstats), 0,
|
||||
ns_statscounter_recurshighwater);
|
||||
}
|
||||
if (tcp_high_water) {
|
||||
isc_stats_set(ns_stats_get(server->sctx->nsstats), 0,
|
||||
ns_statscounter_tcphighwater);
|
||||
}
|
||||
|
||||
return ISC_R_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* Act on a "reconfig" command from the command channel.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in a new issue