home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
kermit.columbia.edu
/
kermit.columbia.edu.tar
/
kermit.columbia.edu
/
scripts
/
ckermit
/
ftplog
< prev
next >
Wrap
Text File
|
2001-03-21
|
3KB
|
56 lines
#!/usr/local/bin/kermit +
#
# f t p l o g
#
# Analyzes wuftpd-format log (including Kermit FTP-format transaction log).
# Prints top 5 files and the number of times each was accessed.
# Prints histogram of number of access vs number of files.
# Each record contains blank-separated fields; the filename is the 9th field.
#
# Requires: C-Kermit 7.0 Beta.08 or later.
# Illustrates: Associative arrays, file i/o, word splitting, numeric sorting.
#
# An associative array, file<>, is built up of filenames and counts.
# When complete, the file<> array is converted to 2 regular arrays, &a and &b.
# &a and &b are sorted numerically by count in descending order.
# The top 5 files are listed.
# An associate array, hist<>, is created to build the histogram of counts.
# The histogram is converted, sorted, and listed.
#
# Author: F. da Cruz, Columbia University, July 1999
local line name \%n \%m \%f ; Local variables
.default = /var/log/ftpd.log
if eq "\v(osname)" "Linux" .default = /var/log/xferlog
if def \%1 assign \%f \fcontents(\%1)
if not def \%f asg \%f \m(default) ; Name of log file
fopen /read \%c \%f ; Open the log file
if fail exit 1 Can't open \%f ; Check
echo Reading: \%f... ; Let use know what's happening
while true { ; Loop through records
fread /line \%c line ; Read a record
if fail break ; Check for EOF
increment \%m ; Count this record
.name := \fword(\m(line),9,{ }) ; Extract filename from this record
_increment file<\m(name)> ; Count an access for this file
}
fclose \%c ; Close the file
echo Records: \flpad(\%m,5) ; Tell user how many records
.\%n := \faaconvert(file,&a,&b) ; Convert associative array to &a, &b
echo Files: \flpad(\%n,5) ; Tell how many files
echo
echo Top 5 Files:
array sort /reverse /numeric &b &a ; Sort array &a and &b according to &b
for \%i 1 \%n 1 { ; List top 5 files and build histogram
if ( <= \%i 5 ) echo { \%i. \&a[\%i]: \&b[\%i]}
_increment hist<\&b[\%i]>
}
echo
echo { Hits Files} ; Print histogram heading
.\%n := \faaconvert(hist,&a,&b) ; Convert hist<> to &a and &b
array sort /numeric &a &b ; Sort &a and &b according to &a
for \%i 1 \%n 1 { ; List each member
echo \flpad(\&a[\%i],5) \flpad(\&b[\%i],5)
}
exit 0