uucp info from LOGFILE (awk script)
sources-request at panda.UUCP
sources-request at panda.UUCP
Sat Sep 21 21:12:14 AEST 1985
Mod.sources: Volume 3, Issue 15
Submitted by: ukma!david (David Herron)
Here's a source I just wrote this evening. It's short and self-explanatory ---
--- David Herron
--- ARPA-> ukma!david at ANL-MCS.ARPA
--- UUCP-> {ucbvax,unmvax,boulder,oddjob}!anlams!ukma!david
--- {ihnp4,decvax,ucbvax}!cbosgd!ukma!david
Hackin's in me blood. My mother was known as Miss Hacker before she married!
-------------------------------------------------------------
# uucp.times.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 uucp.times.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/uucp.times.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
BEGIN {
# states
idle = 0; calling = 1; uscall = 2; themcall = 3;
true = 1; false = 0
# This ignores log entries for these systems. They're
# all local calls so we don't care how much time we
# spend talking to them.
ignore["ukgs"] = true
ignore["ukmb"] = true
ignore["ukmc"] = true
ignore["ukmd"] = true
ignore["ukme"] = true
ignore["ukmf"] = true
ignore["ma3b2a"] = true
ignore["ma3b2b"] = true
ignore["ukecc"] = true
ignore["ecc1"] = true
ignore["ukengr4"] = true
ignore["ukpa"] = true
ignore["mason"] = true
ignore["pcb"] = true
# This one only calls us ... and, we don't really
# care how much he spends ... That's his problem
ignore["hasmed"] = true
}
# 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.
$4 == "SUCCEEDED" && $5 == "(call" {
if (ignore[$2] != true)
state[$2] = calling
else
state[$2] = idle
}
# A call succeeded. Either they called us or we called them.
# state[$2] tells us who is doing the calling.
# Have to remember the time.
$4 == "OK" && $5 == "(startup)" {
if (ignore[$2] != true) {
startime[$2] = $3
if (state[$2] == calling) {
printf("call\tout\t%s\t%s\n", $2, $3)
state[$2] = uscall
}
else {
printf("call\tin\t%s\t%s\n", $2, $3)
state[$2] = themcall
}
}
}
# Our outgoing call failed. Throw away our information about the call.
$4 == "TIMEOUT" {
state[$2] = 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...
($4 == "OK" || $4 == "FAILED") && $5 == "(conversation" {
if (ignore[$2] != true) {
printf("done\t(%s)\t%s\t%s\n", $4, $2, $3)
time = 0
# get time spent into "time"
# Time format is: "(mon/day-hr:min-pid)"
n = split($3, nn, "-")
n = split(nn[2], hrmin, ":")
tend = (hrmin[1]*60) + hrmin[2]
n = split(startime[$2], nn, "-")
n = split(nn[2], hrmin, ":")
tbeg = (hrmin[1]*60) + hrmin[2]
time = tend - tbeg
if (time < 0)
time += (24*60)
if (state[$2] == uscall)
ourtime[$2] += time
else
theirtime[$2] += time
}
}
# 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])
}
More information about the Mod.sources
mailing list