home *** CD-ROM | disk | FTP | other *** search
/ PC-Online 1996 May / PCOnline_05_1996.bin / linux / source / n / bind / bind-4.001 / bind-4~ / bind-4.9.3-BETA9 / contrib / ninit / named_stats next >
Text File  |  1991-05-13  |  3KB  |  118 lines

  1. #!/afs/net/tools/@sys/perl
  2. #
  3. # named_stats --- collect statistics for the MIT nameservers.
  4. #
  5. # This program connects to a pre-arranged port on four hosts and dumps the 
  6. # name daemon statistics in a nice tabular form.  This program has been
  7. # written for MIT.  You will need to change things to make them work for
  8. # your site.
  9. #
  10. # Written by Theodore Ts'o, Copyright 1991.  
  11. #
  12. # Use this code however you want, as long as you don't try to make
  13. # money off of it and as long as you don't claim it's yours.
  14. #
  15.  
  16. #
  17. # Change this to be whatever port number you assign in /etc/services
  18. #
  19. $default_nstats_port = XXXXX;
  20.  
  21. #
  22. # Change this to be the list of hosts that you're interested in.
  23. #
  24. @hosts = ("bitsy.mit.edu", "strawb.mit.edu", "w20ns.mit.edu", 
  25.     "lithium.lcs.mit.edu");
  26.  
  27. @querytypes = ("A", "NS", "MD", "MF", "CNAME", "SOA", "MB", "MG",
  28.     "MR", "NULL", "WKS", "PTR", "HINFO", "MINFO", "MX", "TXT",
  29.     "UINFO", "UID", "GID", "UNSPEC", "UNSPECA", 
  30.     "AXFR", "MAILB", "MAILA", "ANY");
  31. $boottime = "time since boot (secs)";
  32.  
  33. ($name, $aliases, $nstats_port) = getservbyname("nstats", 'tcp');
  34. if (!$nstats_port) {
  35.     $nstats_port = $default_nstats_port;
  36. }
  37.  
  38. grep(s/$/ queries/, @querytypes);
  39. foreach $query (@querytypes) {
  40.     $added{$query} = 1;
  41. }
  42.  
  43. foreach $host (@hosts) {
  44.     ($hostname = $host) =~ s/\..*//;
  45.     push(@hostnames, $hostname);
  46.     ($name, $aliases, $type, $len, $thisaddr) = gethostbyname($host);
  47.     $port = $nstats_port;
  48.     &mkport($thisaddr,$port);
  49.     $dateline = <SERVER>;
  50.     $dateline =~ s/###//;
  51.     printf("%8-s:%s", $hostname,$dateline);
  52.     while (<SERVER>) {
  53.         chop;
  54.         ($num, $var) = /([0-9]+)\s+(.*)/;
  55.         $data{$hostname, $var} = $num;
  56.         $total{$var} += $num;
  57.         $seen{$var} = 1;
  58.         if (!$added{$var}) {
  59.             $added{$var} = 1;
  60.             push(@varnames, $var);
  61.         }
  62.     }
  63. }
  64. print "\n";
  65.  
  66. printf("%25-s", "");
  67. foreach $host (@hostnames) {
  68.     printf("%10s", $host);
  69. }
  70. printf("%10s", "TOTAL");
  71. print "\n";
  72.  
  73. foreach $var (@varnames,@querytypes) {
  74.     if ((!$seen{$var}) || ($total{$var} == 0)) {
  75.         next;
  76.     }
  77.     printf("%25-s", $var);
  78.     foreach $host (@hostnames) {
  79.         $num = $data{$host, $var};
  80.         printf("%10d", $num);
  81.     }
  82.     #
  83.     # Totals don't make sense for some stats
  84.     #
  85.     if ($var =~ /^time since/) {
  86.         print "\n";
  87.         next;
  88.     }
  89.     printf("%10s", $total{$var});
  90.     print "\n";
  91. }
  92.  
  93. #
  94. # End of main program, subroutines begin here
  95. #
  96.  
  97. sub mkport {
  98.   $port = $_[1];
  99.   $saddr = $_[0];
  100.  
  101. #  print "$saddr,$port\n";
  102.   $sockaddr = 'S n a4 x8';
  103.   $sin = pack($sockaddr, 2, $port, $saddr);
  104.  
  105.   socket(SERVER, 2, 1, 0) || ((print "socket:$!\n"), return $FAIL);
  106. #  setsockopt(SERVER,&SOL_SOCKET,&SO_KEEPALIVE,1)
  107. #       || (print "Server setsockopt failed\n");
  108.   connect(SERVER, $sin) || ((print "connect:$!\n"), return $FAIL);
  109.   $sockname = getsockname(SERVER)
  110.         || ((print "getsockname:$!\n"), return $FAIL);
  111.   ($family, $port, $addr) =  unpack($sockaddr, $sockname);
  112.   @addr = unpack("CCCC", $addr);
  113.  
  114. #  select(SERVER); $| = 1; select(STDOUT); $| = 1;
  115.   $connecting = 1;
  116. }
  117.  
  118.