[net.news.b] Calculate your own propagation delays

rick@seismo.UUCP (Rick Adams) (03/30/84)

The following shell file/awk script will calculate propagation delays
and news feed distribution for your site. It takes approx. 15 CPU
minutes on a Vax 11/780 and produces output like this:

	Propagation Delay

	     No. of   Cumulative
	Days Articles Percent
	 <0     190      0% (Time Warp)
	  1    3231     79%
	  2     665     89%
	  3     218     93%
	  4      96     96%
	  5      28     96%
	  6      20     97%
	  7      31     97%
	  8      28     98%
	  9      19     98%
	 10      22     99%
	 11      10     99%
	 12       8     99%
	 13       5     99%
	 14      10    100%

	Distribution of news feeds
	   Count Percent   Site
	    3509     76%   harpo
	     620     13%   hao
	     130      2%   ut-sally
	     102      2%   rlgvax
	      77      1%   rochester
	      71      1%   brl-vgr
	      53      1%   seismo
	      19      0%   uwvax
(Yes there really were 190 "Time Warp" articles in the last 2 weeks)

Rick Adams
{ihnp4|cbosgd|allegra|cmcl2|lbl-csam}!seismo!rick
rick@seismo.ARPA

---------------------------------delay----------------------------
startdir=/usr/spool/news/net
history=/usr/lib/news/history
rm=rm
sed -e "
1i\\
cd $startdir
s/.*	//
s/ .*//
/net\./!d
s/net\.//
s!\.!/!g
s!^!sed '/^\$/,\$d' !
" $history | sh |
awk '
BEGIN{
	month["Jan"] = 1
	month["Feb"] = 2
	month["Mar"] = 3
	month["Apr"] = 4
	month["May"] = 5
	month["Jun"] = 6
	month["Jul"] = 7
	month["Aug"] = 8
	month["Sep"] = 9
	month["Oct"] = 10
	month["Nov"] = 11
	month["Dec"] = 12
	days[1] = 0
	days[2] = 31
	days[3] = 59
	days[4] = 90
	days[5] = 120
	days[6] = 151
	days[7] = 181
	days[8] = 212
	days[9] = 243
	days[10] = 273
	days[11] = 304
	days[12] = 334
}

/^Date: /{
	if (NF != 7 ){
		if (NF == 5 && split($3,x,"-") == 3) {
			$6 = $4
			$5 = x[3]
			$4 = x[2]
			$3 = x[1]
		}else{
			print "Bad date",messageid, $0
			continue
		}
	}
	sent = $3 + days[month[$4]] + ($5-80)*365
	if ($5%4 == 0 && month[$4] > 2)
		sent++
	split($6,x,":")
	sent *= 60*24
	sent += x[1] * 60 + x[2]
}
/^Date-Received: /{
	if (NF != 7 ){
		if (NF == 5 && split($3,x,"-") == 3) {
			$6 = $4
			$5 = x[3]
			$4 = x[2]
			$3 = x[1]
		} else {
			print "Bad date", messageid, $0
			continue
		}
	}
	rec = $5*10000 +  month[$4]* 100 + $3
	if (rec > today)
		today = rec
	rec = $3 + days[month[$4]] + ($5-80)*365
	if ($5%4 == 0 && month[$4] > 2)
		rec++
	split($6,x,":")
	rec *= 60*24
	rec += x[1] * 60 + x[2] + 1.44
}
/^Message-ID: /{messageid = $2}
/^Path: /{
	n = split($2,x,"!")
	if( n > 2)
		feed = x[2]
	else
		feed = x[1]
}
/^Relay-Version: /{
	n = int((rec - sent)/(60*24)+0.999)
	if( rec > 0 ) {
		if ( n >= 0) {
			adelay[n]++
			if( n > amaxdelay)
				amaxdelay = n
		} else {
			adelay[-1]++
			print "Time Warp", messageid
		}
		totdelay++
		feedsite[feed]++
	}
	rec = sent = 0
}
END {
	n = int((rec - sent)/(60*24)+0.999)
	if( rec > 0 ) {
		if ( n >= 0) {
			adelay[n]++
			if( n > amaxdelay)
				amaxdelay = n
		} else {
			adelay[-1]++
			print "Time Warp", messageid
		}
		totdelay++
		feedsite[feed]++
	}
	i = 0
	count = 0
	printf("\n\tPropagation Delay\n")
	printf("\n\t     No. of   Cumulative\n")
	printf("\tDays Articles Percent\n")
	if (adelay[-1] > 0) {
		printf("\t <0%8d%7d%% (Time Warp)\n",adelay[-1],0)
		count += adelay[-1]
	}
	while (i <= amaxdelay) {
		count += adelay[i]
		if( adelay[i] != 0 )
			printf("\t%3d%8d%7d%%\n",i,adelay[i],(count*100)/totdelay)
		i++
	}

	n = 0
	for (i in feedsite)
		ptr[++n] = i

	j = 1
	while (j < n){
		if  (feedsite[ptr[j]] < feedsite[ptr[j+1]]){
			temp = ptr[j]
			ptr[j] = ptr[j+1]
			ptr[j+1] = temp
			if( j > 1) {
				j--
				continue
			}
		}
		j++
	}
	printf("\n\tDistribution of news feeds\n")
	printf("\t   Count Percent   Site\n")
	j = 0
	while (++j <= n){
		i =feedsite[ptr[j]]
		printf("\t%8d%7d%%   %s\n",i,(i*100)/totdelay,ptr[j]);
	}
}'

mark@cbosgd.UUCP (Mark Horton) (03/30/84)

Rick - thanks much for posting this.  I would appreciate it if all
netnews administrators of backbone hosts would install this and
keep an eye on it.  Backbone sites are supposed to be very fast,
reliable, and evenly loaded.  If some backbone sites are getting
over half of their news with a delay of over 24 hours, or if
almost all of your news comes from one direction, I'd like to
hear about it.  We want the backbone to rum smoothly.

	Mark Horton