BSD 4_4_Lite2 development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Mon, 13 May 1991 06:46:23 +0000 (22:46 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Mon, 13 May 1991 06:46:23 +0000 (22:46 -0800)
Work on file usr/src/contrib/bind-4.9.2/contrib/ninit/named_stats

Synthesized-from: CSRG/cd3/4.4BSD-Lite2

usr/src/contrib/bind-4.9.2/contrib/ninit/named_stats [new file with mode: 0644]

diff --git a/usr/src/contrib/bind-4.9.2/contrib/ninit/named_stats b/usr/src/contrib/bind-4.9.2/contrib/ninit/named_stats
new file mode 100644 (file)
index 0000000..ef34545
--- /dev/null
@@ -0,0 +1,117 @@
+#!/afs/net/tools/@sys/perl
+#
+# named_stats --- collect statistics for the MIT nameservers.
+#
+# This program connects to a pre-arranged port on four hosts and dumps the 
+# name daemon statistics in a nice tabular form.  This program has been
+# written for MIT.  You will need to change things to make them work for
+# your site.
+#
+# Written by Theodore Ts'o, Copyright 1991.  
+#
+# Use this code however you want, as long as you don't try to make
+# money off of it and as long as you don't claim it's yours.
+#
+
+#
+# Change this to be whatever port number you assign in /etc/services
+#
+$default_nstats_port = XXXXX;
+
+#
+# Change this to be the list of hosts that you're interested in.
+#
+@hosts = ("bitsy.mit.edu", "strawb.mit.edu", "w20ns.mit.edu", 
+       "lithium.lcs.mit.edu");
+
+@querytypes = ("A", "NS", "MD", "MF", "CNAME", "SOA", "MB", "MG",
+       "MR", "NULL", "WKS", "PTR", "HINFO", "MINFO", "MX", "TXT",
+       "UINFO", "UID", "GID", "UNSPEC", "UNSPECA", 
+       "AXFR", "MAILB", "MAILA", "ANY");
+$boottime = "time since boot (secs)";
+
+($name, $aliases, $nstats_port) = getservbyname("nstats", 'tcp');
+if (!$nstats_port) {
+       $nstats_port = $default_nstats_port;
+}
+
+grep(s/$/ queries/, @querytypes);
+foreach $query (@querytypes) {
+       $added{$query} = 1;
+}
+
+foreach $host (@hosts) {
+       ($hostname = $host) =~ s/\..*//;
+       push(@hostnames, $hostname);
+       ($name, $aliases, $type, $len, $thisaddr) = gethostbyname($host);
+       $port = $nstats_port;
+       &mkport($thisaddr,$port);
+       $dateline = <SERVER>;
+       $dateline =~ s/###//;
+       printf("%8-s:%s", $hostname,$dateline);
+       while (<SERVER>) {
+               chop;
+               ($num, $var) = /([0-9]+)\s+(.*)/;
+               $data{$hostname, $var} = $num;
+               $total{$var} += $num;
+               $seen{$var} = 1;
+               if (!$added{$var}) {
+                       $added{$var} = 1;
+                       push(@varnames, $var);
+               }
+       }
+}
+print "\n";
+
+printf("%25-s", "");
+foreach $host (@hostnames) {
+       printf("%10s", $host);
+}
+printf("%10s", "TOTAL");
+print "\n";
+
+foreach $var (@varnames,@querytypes) {
+       if ((!$seen{$var}) || ($total{$var} == 0)) {
+               next;
+       }
+       printf("%25-s", $var);
+       foreach $host (@hostnames) {
+               $num = $data{$host, $var};
+               printf("%10d", $num);
+       }
+       #
+       # Totals don't make sense for some stats
+       #
+       if ($var =~ /^time since/) {
+               print "\n";
+               next;
+       }
+       printf("%10s", $total{$var});
+       print "\n";
+}
+
+#
+# End of main program, subroutines begin here
+#
+
+sub mkport {
+  $port = $_[1];
+  $saddr = $_[0];
+
+#  print "$saddr,$port\n";
+  $sockaddr = 'S n a4 x8';
+  $sin = pack($sockaddr, 2, $port, $saddr);
+
+  socket(SERVER, 2, 1, 0) || ((print "socket:$!\n"), return $FAIL);
+#  setsockopt(SERVER,&SOL_SOCKET,&SO_KEEPALIVE,1)
+#       || (print "Server setsockopt failed\n");
+  connect(SERVER, $sin) || ((print "connect:$!\n"), return $FAIL);
+  $sockname = getsockname(SERVER)
+        || ((print "getsockname:$!\n"), return $FAIL);
+  ($family, $port, $addr) =  unpack($sockaddr, $sockname);
+  @addr = unpack("CCCC", $addr);
+
+#  select(SERVER); $| = 1; select(STDOUT); $| = 1;
+  $connecting = 1;
+}
+