|
|
1.1 root 1: /*
2: * Copyright (c) 1986 Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted
6: * provided that the above copyright notice and this paragraph are
7: * duplicated in all such forms and that any documentation,
8: * advertising materials, and other materials related to such
9: * distribution and use acknowledge that the software was developed
10: * by the University of California, Berkeley. The name of the
11: * University may not be used to endorse or promote products derived
12: * from this software without specific prior written permission.
13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16: */
17:
18: #ifndef lint
19: static char sccsid[] = "@(#)ns_stats.c 4.4 (Berkeley) 6/18/88";
20: #endif /* not lint */
21:
22: /**************************************************************************/
23: /* simple monitoring of named behavior */
24: /* dumps a bunch of values into a well-know file */
25: /* */
26: /**************************************************************************/
27:
28: #ifdef STATS
29:
30: #include <sys/types.h>
31: #include <sys/time.h>
32: #include <netinet/in.h>
33: #include <stdio.h>
34: #include <syslog.h>
35: #include <arpa/nameser.h>
36: #include "ns.h"
37:
38: #ifdef STATSFILE
39: char *statsfile = STATSFILE ;
40: #else
41: char *statsfile = "/usr/tmp/named.stats";
42: #endif /* STATSFILE */
43:
44: extern time_t boottime, resettime;
45: extern int needStatsDump;
46:
47: /*
48: * General statistics gathered
49: */
50: /* The position in this table must agree with the defines in ns.h */
51: struct stats stats[S_NSTATS] = {
52: { 0, "input packets" },
53: { 0, "output packets" },
54: { 0, "queries" },
55: { 0, "iqueries" },
56: { 0, "duplicate queries" },
57: { 0, "responses" },
58: { 0, "duplicate responses" },
59: { 0, "OK answers" },
60: { 0, "FAIL answers" },
61: { 0, "FORMERR answers" },
62: { 0, "system queries" },
63: { 0, "prime cache calls" },
64: { 0, "check_ns calls" },
65: { 0, "bad responses dropped" },
66: { 0, "martian responses" },
67: };
68:
69: /*
70: * Statistics for queries (by type)
71: */
72: unsigned long typestats[T_ANY+1];
73: char *typenames[T_ANY+1] = {
74: /* 5 types per line */
75: "Unknown", "A", "NS", "invalid(MD)", "invalid(MF)",
76: "CNAME", "SOA", "MB", "MG", "MR",
77: "NULL", "WKS", "PTR", "HINFO", "MINFO",
78: "MX", 0, 0, 0, 0,
79: /* 20 per line */
80: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
81: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
82: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
83: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
84: /* 100 */
85: "UINFO", "UID", "GID", "UNSPEC", 0, 0, 0, 0, 0, 0,
86: /* 110 */
87: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
88: /* 120 */
89: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
90: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
91: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
92: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
93: /* 200 */
94: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
95: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
96: /* 240 */
97: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
98: /* 250 */
99: 0, 0, "AXFR", "MAILB", "MAILA", "ANY"
100: };
101:
102: ns_stats()
103: {
104: time_t timenow;
105: register FILE *f;
106: register int i;
107:
108: if ((f = fopen(statsfile,"a")) == 0)
109: {
110: #ifdef DEBUG
111: if (debug)
112: fprintf(ddt,"can't open stat file, \"%s\"\n",statsfile);
113: #endif
114: syslog(LOG_ERR, "cannot open stat file, \"%s\"\n",statsfile);
115: return;
116: }
117:
118: time(&timenow);
119: fprintf(f, "### %s", ctime(&timenow));
120: fprintf(f, "%d\ttime since boot (secs)\n", timenow - boottime);
121: fprintf(f, "%d\ttime since reset (secs)\n", timenow - resettime);
122:
123: /* general statistics */
124: for (i = 0; i < S_NSTATS; i++)
125: fprintf(f,"%d\t%s\n", stats[i].cnt, stats[i].description);
126:
127: /* query type statistics */
128: fprintf(f, "%d\tUnknown query types\n", typestats[0]);
129: for(i=1; i < T_ANY+1; i++)
130: if (typestats[i])
131: fprintf(f, "%d\t%s querys\n", typestats[i],
132: typenames[i]);
133:
134: (void) fclose(f);
135: }
136: #endif STATS
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.