mapstats: uucp map statistics program

John Robert LoVerso loverso at Xylogics.COM
Fri Aug 11 08:59:36 AEST 1989


I couldn't resist posting this.  It computes the most common prefix
paths used in routes derived by pathalias.  I.e., this finds the places
to which you are really routing most of your traffic.  Simply feed the
output from pathalias (no problem if you use "pathalias -c" or not) into
the enclosed.  If you don't have "nawk", I think you can still use "awk".
Sample output:

--
Counts of common prefix route over entire database:

 7974 (42%) are through merk
 7966 (42%) are through merk(100%)uunet
 6868 (36%) are through spdcc
 6607 (35%) are through spdcc(96%)harvard
 3350 (18%) are through merk(42%)uunet(42%)mcvax
 2692 (14%) are through spdcc(39%)harvard(41%)ames
 2570 (14%) are through linus
 2222 (12%) are through linus(86%)att
 1789 ( 9%) are through spdcc(26%)harvard(27%)rutgers
 1091 ( 6%) are through merk(14%)uunet(14%)mcvax(33%)ukc
  934 ( 5%) are through spdcc(14%)harvard(14%)gatech
  868 ( 5%) are through merk(11%)uunet(11%)kddlab
  647 ( 3%) are through spdcc(9%)harvard(10%)rutgers(36%)utai
  595 ( 3%) are through buita
  571 ( 3%) are through encore
  555 ( 3%) are through buita(93%)bu-cs
  552 ( 3%) are through merk(7%)uunet(7%)mcvax(16%)hp4nl
  533 ( 3%) are through spdcc(8%)harvard(8%)ames(20%)lll-winken
  488 ( 3%) are through merk(6%)uunet(6%)mcvax(15%)sunic
  462 ( 2%) are through spdcc(7%)harvard(7%)ames(17%)sun
  447 ( 2%) are through buita(75%)bu-cs(81%)ll-xn
  417 ( 2%) are through buita(70%)bu-cs(75%)ll-xn(93%)ucsd
  289 ( 2%) are through buita(49%)bu-cs(52%)ll-xn(65%)ucsd(69%)nosc
  259 ( 1%) are through encore(45%)umn-d-ub
  253 ( 1%) are through encore(44%)umn-d-ub(98%)umn-cs
  212 ( 1%) are through encore(37%)bellcore
  170 ( 1%) are through sequent
  149 ( 1%) are through encore(26%)umn-d-ub(58%)umn-cs(59%)mmm
  133 ( 1%) are through buita(22%)bu-cs(24%)ll-xn(30%)ucsd(32%)nosc(46%)crash
  107 ( 1%) are through cloud9
    7 ( 0%) are through sunne
    4 ( 0%) are through %s
    1 ( 0%)  is through xylwest

Totals: 18867 known routes using 33 major hops
--
The first two lines show me that 42% of my paths are though my neighbor
"merk", but that 100% of those are just a way to get to "uunet".  The
output is:

	count (per%) ... host

		This means that `count' paths, `per' percentage of the
		total pathalias output, go to neighbor `host'.

	count (per%) ... host1(%1)host2(%2)...hostn

		This means that `count' paths, `per' percentage of the
		total pathalias output, are for site `hostn'.
		All the paths to `hostn' represent `%1' of the paths
		through `host1', `%2' of the paths through `host2', etc.

This may be a CPU hog.  If you have pathalias on an old '750, then
you probably don't want to run this.  With `new awk', ~2MIP CPUs,
and 18000+ paths, this tends to take about 8 CPU minutes to run
(which, on an Encore Multimax, means about 8 minutes realtime).

John

--
# This is a shell archive.  Remove anything before this line, then
# unpack it by saving it in a file and typing "sh file".  (Files
# unpacked will be owned by you and have default permissions.)
#
# This archive contains:
# prefix
#
echo x - prefix
sed -e 's/^X//' > "prefix" << '//E*O*F prefix//'
X#!/bin/sh
X#
X# Figure out statistics on path prefixes
X#
X# assumes last field of input is ([^!]*!)*%s
X# (suitable for any pathalias output)
X#
X# Complete rewrite of old ptm toy, 3/88 jlv
X#
X# last change: Wed Apr 26 11:46:40 EDT 1989 jlv
X#
X
Xecho Counts of common prefix route over entire database:
Xecho ""
X
Xnawk '
XBEGIN	{
X	SILLYMIN=100
X}
X{
X	count = split($NF, path, "!")
X	climb = path[1]
X	links[climb]++
X	for (i = 2; i < count; i++) {
X		climb = climb"!"path[i]
X		links[climb]++
X	}
X}
XEND	{
X	for (i in links) {
X		ilinks = links[i]
X		count = split(i, path, "!")
X		if (count != 1) {
X			if (ilinks < SILLYMIN || ilinks < (links[path[1]]/20))
X				continue
X			where = path[1]
X			build = path[1]
X			for (j = 2; j <= count ; j++) {
X				last = links[build]
X				where = sprintf("%s(%d%%)%s", \
X					where, \
X					(ilinks*100 + last/2)/last, \
X					path[j]);
X				build = build"!"path[j]
X			}
X		}
X		else
X			where = i
X		if (links[i] == 1)
X			areis=" is"
X		else
X			areis="are"
X		printf "%5d (%2d%%) %s through %s\n", \
X			links[i], (links[i]*100+NR/2)/NR, areis, where \
X			| "sort -rn"
X		hops++
X	}
X	printf "\nTotals: %d known routes using %d major hops\n", \
X		NR, hops
X} ' $*
//E*O*F prefix//

exit 0
-- 
John Robert LoVerso			Xylogics, Inc.  617/272-8140
loverso at Xylogics.COM			Annex Terminal Server Development Group
encore!xylogics!loverso			[formerly of Encore Computer Corp]



More information about the Alt.sources mailing list