2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-30 22:15:20 +00:00

Use lowercase names for stats

statistic printing code cleanup
move some of the statistics stufdf to the server object
This commit is contained in:
Michael Sawyer
2000-11-09 19:55:20 +00:00
parent 964c3f4a6e
commit 31eef7e2d4
4 changed files with 118 additions and 139 deletions

View File

@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: globals.h,v 1.48 2000/11/07 23:49:20 mws Exp $ */
/* $Id: globals.h,v 1.49 2000/11/09 19:55:19 mws Exp $ */
#ifndef NAMED_GLOBALS_H
#define NAMED_GLOBALS_H 1
@@ -35,11 +35,9 @@
#ifdef NS_MAIN
#define EXTERN
#define INIT(v) = (v)
#define ARRAYINIT = {0,}
#else
#define EXTERN extern
#define INIT(v)
#define ARRAYINIT
#endif
EXTERN isc_mem_t * ns_g_mctx INIT(NULL);
@@ -97,12 +95,6 @@ EXTERN const char * lwresd_g_defaultpidfile INIT(NS_LOCALSTATEDIR
"/run/lwresd.pid");
EXTERN const char * ns_g_username INIT(NULL);
/*
* Statistical counters.
*/
EXTERN isc_uint64_t ns_globalcount[DNS_ZONE_COUNTSIZE]
ARRAYINIT;
/*
* XXX Temporary.
*/

View File

@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: server.h,v 1.43 2000/11/07 23:49:23 mws Exp $ */
/* $Id: server.h,v 1.44 2000/11/09 19:55:20 mws Exp $ */
#ifndef NAMED_SERVER_H
#define NAMED_SERVER_H 1
@@ -67,6 +67,10 @@ struct ns_server {
isc_event_t * reload_event;
isc_boolean_t flushonshutdown;
char * statsfile;
FILE * statsfp;
isc_uint64_t globalcount[DNS_ZONE_COUNTSIZE];
};
#define NS_SERVER_MAGIC 0x53564552 /* SVER */
@@ -111,4 +115,8 @@ ns_server_refreshzone(ns_server_t *server, char *args);
isc_result_t
ns_server_dumpstats(ns_server_t *server);
void
ns_server_querycount(dns_zone_t *zone, isc_boolean_t is_zone,
dns_zonecount_t counter);
#endif /* NAMED_SERVER_H */

View File

@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: query.c,v 1.142 2000/11/07 23:49:17 mws Exp $ */
/* $Id: query.c,v 1.143 2000/11/09 19:55:16 mws Exp $ */
#include <config.h>
@@ -101,28 +101,6 @@ query_maybeputqname(ns_client_t *client) {
}
}
static void
query_count(dns_zone_t *zone, isc_boolean_t is_zone,
dns_zonecount_t counter)
{
REQUIRE(counter < DNS_ZONE_COUNTSIZE);
ns_globalcount[counter]++;
if (!is_zone || zone == NULL || !dns_zone_hascounts(zone)) {
isc_log_write(dns_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_QUERY,
1, "global counter %s set to %ld",
dns_zonecount_names[counter],
(long)ns_globalcount[counter]);
return;
}
dns_zone_count(zone, counter);
isc_log_write(dns_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_QUERY,
1, "zone counter %s set to %ld, global %ld",
dns_zonecount_names[counter],
(long)dns_zone_getcounts(zone, counter),
(long)ns_globalcount[counter]);
}
static inline void
query_reset(ns_client_t *client, isc_boolean_t everything) {
isc_buffer_t *dbuf, *dbuf_next;
@@ -793,7 +771,8 @@ query_simplefind(void *arg, dns_name_t *name, dns_rdatatype_t type,
if (dns_rdataset_isassociated(sigrdataset))
dns_rdataset_disassociate(sigrdataset);
if (is_zone) {
query_count(zone, is_zone, dns_zonecount_delegate);
ns_server_querycount(zone, is_zone,
dns_zonecount_delegate);
if (USECACHE(client)) {
/*
* Either the answer is in the cache, or we
@@ -858,7 +837,7 @@ query_simplefind(void *arg, dns_name_t *name, dns_rdatatype_t type,
* query counter.
*/
if (result == ISC_R_SUCCESS)
query_count(zone, is_zone, dns_zonecount_success);
ns_server_querycount(zone, is_zone, dns_zonecount_success);
cleanup:
if (dns_rdataset_isassociated(&zrdataset)) {
@@ -2188,20 +2167,23 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
*/
dbuf = query_getnamebuf(client);
if (dbuf == NULL) {
query_count(zone, is_zone, dns_zonecount_failure);
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}
fname = query_newname(client, dbuf, &b);
if (fname == NULL) {
query_count(zone, is_zone, dns_zonecount_failure);
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}
tname = dns_fixedname_name(&event->foundname);
result = dns_name_concatenate(tname, NULL, fname, NULL);
if (result != ISC_R_SUCCESS) {
query_count(zone, is_zone, dns_zonecount_failure);
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}
@@ -2224,7 +2206,8 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
result = query_getdb(client, client->query.qname, 0, &zone, &db,
&version, &is_zone);
if (result != ISC_R_SUCCESS) {
query_count(NULL, ISC_FALSE, dns_zonecount_failure);
ns_server_querycount(NULL, ISC_FALSE,
dns_zonecount_failure);
if (result == DNS_R_REFUSED)
QUERY_ERROR(DNS_R_REFUSED);
else
@@ -2266,7 +2249,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
type = qtype;
else {
CTRACE("find_query: REFUSED: qcount != 1");
query_count(zone, is_zone, dns_zonecount_failure);
ns_server_querycount(zone, is_zone, dns_zonecount_failure);
QUERY_ERROR(DNS_R_REFUSED);
goto cleanup;
}
@@ -2277,7 +2260,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
result = query_checktype(qtype);
if (result != ISC_R_SUCCESS) {
CTRACE("find_query: non supported query type");
query_count(zone, is_zone, dns_zonecount_failure);
ns_server_querycount(zone, is_zone, dns_zonecount_failure);
QUERY_ERROR(result);
goto cleanup;
}
@@ -2295,7 +2278,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
*/
dbuf = query_getnamebuf(client);
if (dbuf == NULL) {
query_count(zone, is_zone, dns_zonecount_failure);
ns_server_querycount(zone, is_zone, dns_zonecount_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}
@@ -2303,7 +2286,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
rdataset = query_newrdataset(client);
sigrdataset = query_newrdataset(client);
if (fname == NULL || rdataset == NULL || sigrdataset == NULL) {
query_count(zone, is_zone, dns_zonecount_failure);
ns_server_querycount(zone, is_zone, dns_zonecount_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}
@@ -2359,7 +2342,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
result = dns_name_concatenate(client->query.qname,
NULL, fname, NULL);
if (result != ISC_R_SUCCESS) {
query_count(zone, is_zone,
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
@@ -2378,7 +2361,8 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
CTRACE("query_find: resume");
switch (result) {
case ISC_R_SUCCESS:
query_count(zone, is_zone, dns_zonecount_success);
ns_server_querycount(zone, is_zone,
dns_zonecount_success);
/*
* This case is handled in the main line below.
*/
@@ -2410,7 +2394,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
*/
INSIST(!is_zone);
INSIST(client->view->hints != NULL);
query_count(zone, is_zone, dns_zonecount_delegate);
ns_server_querycount(zone, is_zone, dns_zonecount_delegate);
if (db != NULL)
dns_db_detach(&db);
dns_db_attach(client->view->hints, &db);
@@ -2422,7 +2406,8 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
* We can't even find the hints for the root
* nameservers!
*/
query_count(zone, is_zone, dns_zonecount_failure);
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}
@@ -2522,7 +2507,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
/*
* Recurse!
*/
query_count(zone, is_zone,
ns_server_querycount(zone, is_zone,
dns_zonecount_recurse);
if (type == dns_rdatatype_key)
result = query_recurse(client, qtype,
@@ -2534,7 +2519,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
client->query.attributes |=
NS_QUERYATTR_RECURSING;
else {
query_count(zone, is_zone,
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
}
@@ -2542,7 +2527,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
/*
* This is the best answer.
*/
query_count(zone, is_zone,
ns_server_querycount(zone, is_zone,
dns_zonecount_delegate);
client->query.gluedb = zdb;
client->query.attributes |=
@@ -2558,7 +2543,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
goto cleanup;
case DNS_R_NXRRSET:
INSIST(is_zone);
query_count(zone, is_zone, dns_zonecount_nxrrset);
ns_server_querycount(zone, is_zone, dns_zonecount_nxrrset);
if (dns_rdataset_isassociated(rdataset)) {
/*
* If we've got a NXT record, we need to save the
@@ -2585,7 +2570,8 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
*/
result = query_addsoa(client, db, ISC_FALSE);
if (result != ISC_R_SUCCESS) {
query_count(zone, is_zone, dns_zonecount_failure);
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
QUERY_ERROR(result);
goto cleanup;
}
@@ -2602,7 +2588,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
goto cleanup;
case DNS_R_NXDOMAIN:
INSIST(is_zone);
query_count(zone, is_zone, dns_zonecount_nxdomain);
ns_server_querycount(zone, is_zone, dns_zonecount_nxdomain);
if (client->query.restarts > 0) {
/*
* We hit a dead end following a CNAME or DNAME.
@@ -2641,7 +2627,8 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
else
result = query_addsoa(client, db, ISC_FALSE);
if (result != ISC_R_SUCCESS) {
query_count(zone, is_zone, dns_zonecount_failure);
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
QUERY_ERROR(result);
goto cleanup;
}
@@ -2662,11 +2649,11 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
goto cleanup;
case DNS_R_NCACHENXDOMAIN:
INSIST(!is_zone);
query_count(NULL, is_zone, dns_zonecount_nxdomain);
ns_server_querycount(NULL, is_zone, dns_zonecount_nxdomain);
goto ncachenxrrset;
case DNS_R_NCACHENXRRSET:
INSIST(!is_zone);
query_count(NULL, is_zone, dns_zonecount_nxrrset);
ns_server_querycount(NULL, is_zone, dns_zonecount_nxrrset);
ncachenxrrset:
authoritative = ISC_FALSE;
/*
@@ -2828,7 +2815,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
/*
* Something has gone wrong.
*/
query_count(zone, is_zone, dns_zonecount_failure);
ns_server_querycount(zone, is_zone, dns_zonecount_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}
@@ -2842,7 +2829,8 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
rdsiter = NULL;
result = dns_db_allrdatasets(db, node, version, 0, &rdsiter);
if (result != ISC_R_SUCCESS) {
query_count(zone, is_zone, dns_zonecount_failure);
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}
@@ -2916,14 +2904,15 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
/*
* Something went wrong.
*/
query_count(zone, is_zone,
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
result = DNS_R_SERVFAIL;
}
}
dns_rdatasetiter_destroy(&rdsiter);
if (result != ISC_R_NOMORE) {
query_count(zone, is_zone, dns_zonecount_failure);
ns_server_querycount(zone, is_zone,
dns_zonecount_failure);
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}

View File

@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: server.c,v 1.242 2000/11/08 18:57:59 mws Exp $ */
/* $Id: server.c,v 1.243 2000/11/09 19:55:17 mws Exp $ */
#include <config.h>
@@ -98,9 +98,6 @@ typedef struct {
dns_aclconfctx_t *aclconf;
} ns_load_t;
static char *statsfile = NULL;
FILE *statsfp = NULL;
static void
fatal(const char *msg, isc_result_t result);
@@ -1301,66 +1298,56 @@ heartbeat_timer_tick(isc_task_t *task, isc_event_t *event) {
}
static void
ns_server_freestatsfile(isc_mem_t *mctx) {
if (statsfile != NULL)
isc_mem_free(mctx,statsfile);
statsfile = NULL;
ns_server_freestatsfile(ns_server_t *serv) {
if (serv->statsfile != NULL)
isc_mem_free(serv->mctx, serv->statsfile);
serv->statsfile = NULL;
}
static void
ns_server_setstatsfile(const char *name, isc_mem_t *mctx) {
ns_server_setstatsfile(const char *name, ns_server_t *serv) {
int len;
ns_server_freestatsfile(mctx);
ns_server_freestatsfile(serv);
len = strlen(name);
statsfile = isc_mem_allocate(mctx, len + 1);
if (statsfile == NULL)
serv->statsfile = isc_mem_allocate(serv->mctx, len + 1);
if (serv->statsfile == NULL)
fatal("allocate memory for server stats", ISC_R_NOMEMORY);
strcpy(statsfile, name);
strcpy(serv->statsfile, name);
}
static isc_result_t
ns_server_openstatsfile(void) {
ns_server_openstatsfile(ns_server_t *serv) {
isc_result_t result;
const char *defname = "named.stats";
union { char *nc;
const char *cc; } deconst;
if (statsfile == NULL)
if (serv->statsfile == NULL)
deconst.cc = defname;
else
deconst.nc = statsfile;
result = isc_stdio_open(deconst.nc, "a", &statsfp);
deconst.nc = serv->statsfile;
result = isc_stdio_open(deconst.nc, "a", &serv->statsfp);
return (result);
}
static isc_result_t
ns_server_closestatsfile(void) {
ns_server_closestatsfile(ns_server_t *serv) {
isc_result_t result = ISC_R_SUCCESS;
if (statsfp != NULL)
result = isc_stdio_close(statsfp);
statsfp = NULL;
if (serv->statsfp != NULL)
result = isc_stdio_close(serv->statsfp);
serv->statsfp = NULL;
return (result);
}
static isc_result_t
ns_server_statsprintf(const char *format, ...) {
char outputbuf[DNS_NAME_MAXTEXT + 64];
/* 64 is a safe estimate for the extra text */
va_list args;
static void
ns_server_zeroglobal(ns_server_t *serv) {
int i;
if (statsfp == NULL)
return (ISC_R_FAILURE);
/* XXXMWS Better failure case needed */
va_start(args, format);
vsnprintf(outputbuf, sizeof(outputbuf), format, args);
va_end(args);
isc_stdio_write(outputbuf, strlen(outputbuf), 1, statsfp,
NULL);
return (ISC_R_SUCCESS);
for (i=0; i<DNS_ZONE_COUNTSIZE; i++)
serv->globalcount[i]=0;
}
static isc_result_t
@@ -1721,8 +1708,12 @@ load_configuration(const char *filename, ns_server_t *server,
else
ns_os_writepidfile(ns_g_defaultpidfile);
server->statsfile = NULL;
server->statsfp = NULL;
ns_server_zeroglobal(server);
if (dns_c_ctx_getstatsfilename(cctx, &statsfilename) != ISC_R_NOTFOUND)
ns_server_setstatsfile(statsfilename, server->mctx);
ns_server_setstatsfile(statsfilename, server);
dns_aclconfctx_destroy(&aclconfctx);
@@ -1973,7 +1964,7 @@ ns_server_destroy(ns_server_t **serverp) {
ns_server_t *server = *serverp;
REQUIRE(NS_SERVER_VALID(server));
ns_server_freestatsfile(server->mctx);
ns_server_freestatsfile(server);
dns_loadmgr_detach(&server->loadmgr);
dns_zonemgr_detach(&server->zonemgr);
@@ -2198,6 +2189,28 @@ ns_listenelt_fromconfig(dns_c_lstnon_t *celt, dns_c_ctx_t *cctx,
return (ISC_R_SUCCESS);
}
void
ns_server_querycount(dns_zone_t *zone, isc_boolean_t is_zone,
dns_zonecount_t counter)
{
REQUIRE(counter < DNS_ZONE_COUNTSIZE);
ns_g_server->globalcount[counter]++;
if (!is_zone || zone == NULL || !dns_zone_hascounts(zone)) {
isc_log_write(dns_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_QUERY,
1, "global counter %s set to %ld",
dns_zonecount_names[counter],
(long)ns_g_server->globalcount[counter]);
return;
}
dns_zone_count(zone, counter);
isc_log_write(dns_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_QUERY,
1, "zone counter %s set to %ld, global %ld",
dns_zonecount_names[counter],
(long)dns_zone_getcounts(zone, counter),
(long)ns_g_server->globalcount[counter]);
}
/*
* Dump the current statistics to a file
*
@@ -2213,29 +2226,25 @@ ns_server_dumpstats(ns_server_t *server) {
dns_view_t *zoneview = NULL;
char *viewname;
isc_stdtime_t now;
FILE *fp;
int i;
int numbercounters;
isc_stdtime_get(&now);
result = ns_server_openstatsfile();
result = ns_server_openstatsfile(server);
if (result != ISC_R_SUCCESS) {
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_SERVER, ISC_LOG_WARNING,
"Failed to open statistics dump file");
return (result);
}
ns_server_statsprintf("+++ Statistics Dump +++ (%ld)\n",
numbercounters = dns_zone_numbercounters();
fp = server->statsfp;
fprintf(fp,"+++ Statistics Dump +++ (%ld)\n",
(long)now);
ns_server_statsprintf("SUCCESS %ld\n",
ns_globalcount[dns_zonecount_success]);
ns_server_statsprintf("DELEGATED %ld\n",
ns_globalcount[dns_zonecount_delegate]);
ns_server_statsprintf("NXRRSET %ld\n",
ns_globalcount[dns_zonecount_nxrrset]);
ns_server_statsprintf("NXDOMAIN %ld\n",
ns_globalcount[dns_zonecount_nxdomain]);
ns_server_statsprintf("RECURSIVE %ld\n",
ns_globalcount[dns_zonecount_recurse]);
ns_server_statsprintf("FAILED %ld\n",
ns_globalcount[dns_zonecount_failure]);
for (i=0; i<numbercounters; i++)
fprintf(fp,"%s %ld\n",dns_zonecount_names[i],
(long)server->globalcount[i]);
dns_zonemgr_lockconf(server->zonemgr, isc_rwlocktype_read);
dns_zone_first(server->zonemgr, &zone);
while (zone != NULL) {
@@ -2249,32 +2258,13 @@ ns_server_dumpstats(ns_server_t *server) {
zoneview = dns_zone_getview(zone);
viewname = zoneview->name;
if (dns_zone_hascounts(zone)) {
ns_server_statsprintf("SUCCESS %ld %s:%s\n",
(long)dns_zone_getcounts(zone,
dns_zonecount_success),
viewname, zonestore);
ns_server_statsprintf("DELEGATED %ld %s:%s\n",
(long)dns_zone_getcounts(zone,
dns_zonecount_delegate),
viewname, zonestore);
ns_server_statsprintf("NXRRSET %ld %s:%s\n",
(long)dns_zone_getcounts(zone,
dns_zonecount_nxrrset),
viewname, zonestore);
ns_server_statsprintf("NXDOMAIN %ld %s:%s\n",
(long)dns_zone_getcounts(zone,
dns_zonecount_nxdomain),
viewname, zonestore);
ns_server_statsprintf("RECURSIVE %ld %s:%s\n",
(long)dns_zone_getcounts(zone,
dns_zonecount_recurse),
viewname, zonestore);
ns_server_statsprintf("FAILED %ld %s:%s\n",
(long)dns_zone_getcounts(zone,
dns_zonecount_failure),
viewname, zonestore);
for (i=0; i<numbercounters; i++)
fprintf(fp,"%s %ld %s:%s\n",
dns_zonecount_names[i],
(long)dns_zone_getcounts(zone, i),
viewname, zonestore);
} else {
ns_server_statsprintf("NOSTATISTICS 0 %s:%s\n",
fprintf(fp,"nostatistics 0 %s:%s\n",
viewname, zonestore);
}
isc_buffer_invalidate(&zonebuf);
@@ -2282,9 +2272,9 @@ ns_server_dumpstats(ns_server_t *server) {
zone = next;
next = NULL;
}
ns_server_statsprintf("--- Statistics Dump --- (%ld)\n",
fprintf(fp,"--- Statistics Dump --- (%ld)\n",
(long)now);
dns_zonemgr_unlockconf(server->zonemgr, isc_rwlocktype_read);
ns_server_closestatsfile();
ns_server_closestatsfile(server);
return (ISC_R_SUCCESS);
}