mike@peregrine.UUCP (Mike Wexler) (09/30/85)
Here is a modification of the LOGFILE analyzer that was recently posted. It works on System V now. I am also included an awk script that gives some useful statistics on the SYSLOG file and a shell script that will run both of them. ------------------------------Cut here----------------------------------------- #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # stats # logfile.awk # syslog.awk # This archive created: Mon Sep 30 13:27:21 1985 export PATH; PATH=/bin:$PATH if test -f 'stats' then echo shar: will not over-write existing file "'stats'" else cat << \SHAR_EOF > 'stats' #!/bin/sh # stats - driver for logfile.awk and syslog.awk # # USAGE # stats # # # Somehow, compress waits until nobody is using the file before it # compresses it. This is nice and convenient. # # # AUTHOR # David Herron (NPR lover) # cbosgd!ukma!david # University of Kentucky, Computer Science # # Changes: # 1. Took out ignore capability(if you want it put it back in) # 2. Made compatible with System V release I # # EDITOR # Michael Wexler # trwrb!felix!peregrine!mike # Peregrine Systems, Inc # tag=$$ cd /usr/spool/uucp cp LOGFILE /tmp/LOGFILE.$tag awk -f logfile.awk /tmp/LOGFILE.$tag cp SYSLOG /tmp/SYSLOG.$tag awk -f syslog.awk /tmp/SYSLOG.$tag rm /tmp/LOGFILE.$tag rm /tmp/SYSLOG.$tag SHAR_EOF chmod +x 'stats' fi # end of overwriting check if test -f 'logfile.awk' then echo shar: will not over-write existing file "'logfile.awk'" else cat << \SHAR_EOF > 'logfile.awk' # logfile.awk -- read a uucp LOGFILE and find out how long # we spent talking to particular places. (Also, remembers if # the time spent was our call or their call). # # This is nice for: 1) Knowing when you made long distance # calls and where to, 2) knowing how much of the load between # you and some sites you're carrying. # # # This works with the UUCP log file format produced by the # uucp delivered with BRL Release 3. (i.e. 4.2BSD, i.e. that # *extremely* hacked up conglomeration of uucp's that prompted # the writing of honey-danber). # # # USAGE # awk -f logfile.awk /usr/spool/uucp/LOGFILE # # Actually -- I would suggest saving LOGFILE somewhere and make # sure uucico is no longer writing to it. This way you're sure # that the data generated is valid. What I do here is: # # set `date` # tag=$2.$7 # cd /usr/spool/uucp # mv LOGFILE OLD/LOGFILE.${tag} # compress OLD/LOGFILE.${tag} # uncompress OLD/LOGFILE.${tag} # awk -f /usr/lib/uucp/logfile.awk OLD/LOGFILE.${tag} # # Somehow, compress waits until nobody is using the file before it # compresses it. This is nice and convenient. # # # AUTHOR # David Herron (NPR lover) # cbosgd!ukma!david # University of Kentucky, Computer Science # # Changes: # 1. Took out ignore capability(if you want it put it back in) # 2. Made compatible with System V release I # # EDITOR # Michael Wexler # trwrb!felix!peregrine!mike # Peregrine Systems, Inc # BEGIN { # states idle = 0; calling = 1; uscall = 2; themcall = 3; true = 1; false = 0 } # We're calling some place, and the call part has actually worked. # 1) Record their name in the master list. # 2) Remember that we're placing the call. $1 ~ /.*!.*/ { n = split($1,a,"!"); user=a[2]; sys=substr(a[1],1,6); time=$2 status=$4 event=$5 } $1 !~ /.*!.*/ { user=$1 sys=substr($2,1,6) time=$3 status=$4 event=$5 } status == "SUCCEEDED" && event == "(call" { state[sys] = calling } # A call succeeded. Either they called us or we called them. # state[sys] tells us who is doing the calling. # Have to remember the time. status == "OK" && event == "(startup)" { startime[sys] = time if (state[sys] == calling) { printf("call\tout\t%s\t%s\n", sys, time) state[sys] = uscall } else { printf("call\tin\t%s\t%s\n", sys, time) state[sys] = themcall } } # Our outgoing call failed. Throw away our information about the call. status == "TIMEOUT" { state[sys] = idle } # A call finished either successfully or unsuccessfully. # Have to add in the time to the appropriate sum. # # It would be "hard" to calculate the time correctly. So, I'm using # a heuristic here to make it easy. I assume that no phone call is # going to last for longer than 1 day. I calculate the time # for the ending and beginning of the call, and if it's negative # I add 24 hours to it. # # I know ... groady to the max, buuut... (status == "OK" || status == "FAILED") && event == "(conversation" { printf("done\t(%s)\t%s\t%s\n", status, sys, time) interval = 0 # get time spent into "interval" # Time format is: "(mon/day-hr:min-pid)" n = split(time, nn, "-") n = split(nn[2], hrmin, ":") tend = (hrmin[1]*60) + hrmin[2] n = split(startime[sys], nn, "-") n = split(nn[2], hrmin, ":") tbeg = (hrmin[1]*60) + hrmin[2] interval = tend - tbeg if (interval < 0) interval += (24*60) if (state[sys] == uscall) ourtime[sys] += interval else theirtime[sys] += interval } # All that's left to do now is to feed the chickens and go home END { for (i in ourtime) printf("%s -- ourtime = %d\ttheirtime = %d\n", \ i, ourtime[i], theirtime[i]) } SHAR_EOF fi # end of overwriting check if test -f 'syslog.awk' then echo shar: will not over-write existing file "'syslog.awk'" else cat << \SHAR_EOF > 'syslog.awk' # syslog.awk -- read a uucp SYSLOG and find out how much # stuff is transferred and how long it took # # This works With System V release I and 4.2BSD # # USAGE # awk -f syslog.awk /usr/spool/uucp/LOGFILE # # AUTHOR # Michael Wexler # trwrb!felix!peregrine!mike # Peregrine Systems, Inc # $1 ~ /.*!.*/ { n=split($1,a,"!"); sys=a[1] } $1 !~ /.*!.*/ { sys=$2 } { bytes[substr(sys,1,6)] += $7; time[substr(sys,1,6)] += $9; } END { for (sys in bytes) { print sys, " Transferred ",bytes[sys]," bytes in ",time[sys]," seconds" print " For an average speed of ",bytes[sys]/time[sys]," bytes/sec" } } SHAR_EOF fi # end of overwriting check # End of shell archive exit 0 -- Mike(always a dreamer) Wexler 15530 Rockfield, Building C Irvine, Ca 92718 (714)855-3923 (trwrb|scgvaxd)!felix!peregrine!mike
mike@peregrine.UUCP (Mike Wexler) (10/01/85)
The logfile analyzer that I posted(and the original that I modified) have a slight bug. They don't list the amount of time used by systems that you didn't call. If you want to list the totals information for all systems that either you called or that called you change the line at the end that looks like for (i in ourtime) to look like this for (i in state) -- Mike(always a dreamer) Wexler 15530 Rockfield, Building C Irvine, Ca 92718 (714)855-3923 (trwrb|scgvaxd)!felix!peregrine!mike