diff options
author | Georg Brandl <georg@python.org> | 2009-10-11 14:50:57 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2009-10-11 14:50:57 (GMT) |
commit | 97b0837587671ce60b4fdea6a4c63bb55c219329 (patch) | |
tree | 77ac347718c3b8197e5617fe49b6fa9839ad8e86 | |
parent | ec8aab6e4c992d155ba389e5574842c43a323b0e (diff) | |
download | cpython-97b0837587671ce60b4fdea6a4c63bb55c219329.zip cpython-97b0837587671ce60b4fdea6a4c63bb55c219329.tar.gz cpython-97b0837587671ce60b4fdea6a4c63bb55c219329.tar.bz2 |
Merged revisions 75356 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r75356 | georg.brandl | 2009-10-11 16:49:37 +0200 (So, 11 Okt 2009) | 1 line
Remove ftpstats script, the daemon whose log files it reads is long gone.
........
-rw-r--r-- | Demo/scripts/README | 1 | ||||
-rwxr-xr-x | Demo/scripts/ftpstats.py | 142 |
2 files changed, 0 insertions, 143 deletions
diff --git a/Demo/scripts/README b/Demo/scripts/README index bf0f142..54cd848 100644 --- a/Demo/scripts/README +++ b/Demo/scripts/README @@ -7,7 +7,6 @@ eqfix.py Fix .py files to use the correct equality test operator fact.py Factorize numbers find-uname.py Search for Unicode characters using regexps from.py Summarize mailbox -ftpstats.py Summarize ftp daemon log file lpwatch.py Watch BSD line printer queues makedir.py Like mkdir -p markov.py Markov chain simulation of words or characters diff --git a/Demo/scripts/ftpstats.py b/Demo/scripts/ftpstats.py deleted file mode 100755 index cb0c242..0000000 --- a/Demo/scripts/ftpstats.py +++ /dev/null @@ -1,142 +0,0 @@ -#! /usr/bin/env python - -# Extract statistics from ftp daemon log. - -# Usage: -# ftpstats [-m maxitems] [-s search] [file] -# -m maxitems: restrict number of items in "top-N" lists, default 25. -# -s string: restrict statistics to lines containing this string. -# Default file is /usr/adm/ftpd; a "-" means read standard input. - -# The script must be run on the host where the ftp daemon runs. -# (At CWI this is currently buizerd.) - -import os -import sys -import re -import string -import getopt - -pat = '^([a-zA-Z0-9 :]*)!(.*)!(.*)!([<>].*)!([0-9]+)!([0-9]+)$' -prog = re.compile(pat) - -def main(): - maxitems = 25 - search = None - try: - opts, args = getopt.getopt(sys.argv[1:], 'm:s:') - except getopt.error as msg: - print(msg) - print('usage: ftpstats [-m maxitems] [file]') - sys.exit(2) - for o, a in opts: - if o == '-m': - maxitems = string.atoi(a) - if o == '-s': - search = a - file = '/usr/adm/ftpd' - if args: file = args[0] - if file == '-': - f = sys.stdin - else: - try: - f = open(file, 'r') - except IOError as msg: - print(file, ':', msg) - sys.exit(1) - bydate = {} - bytime = {} - byfile = {} - bydir = {} - byhost = {} - byuser = {} - bytype = {} - lineno = 0 - try: - while 1: - line = f.readline() - if not line: break - lineno = lineno + 1 - if search and string.find(line, search) < 0: - continue - if prog.match(line) < 0: - print('Bad line', lineno, ':', repr(line)) - continue - items = prog.group(1, 2, 3, 4, 5, 6) - (logtime, loguser, loghost, logfile, logbytes, - logxxx2) = items -## print logtime -## print '-->', loguser -## print '--> -->', loghost -## print '--> --> -->', logfile -## print '--> --> --> -->', logbytes -## print '--> --> --> --> -->', logxxx2 -## for i in logtime, loghost, logbytes, logxxx2: -## if '!' in i: print '???', i - add(bydate, logtime[-4:] + ' ' + logtime[:6], items) - add(bytime, logtime[7:9] + ':00-59', items) - direction, logfile = logfile[0], logfile[1:] - # The real path probably starts at the last //... - while 1: - i = string.find(logfile, '//') - if i < 0: break - logfile = logfile[i+1:] - add(byfile, logfile + ' ' + direction, items) - logdir = os.path.dirname(logfile) -## logdir = os.path.normpath(logdir) + '/.' - while 1: - add(bydir, logdir + ' ' + direction, items) - dirhead = os.path.dirname(logdir) - if dirhead == logdir: break - logdir = dirhead - add(byhost, loghost, items) - add(byuser, loguser, items) - add(bytype, direction, items) - except KeyboardInterrupt: - print('Interrupted at line', lineno) - show(bytype, 'by transfer direction', maxitems) - show(bydir, 'by directory', maxitems) - show(byfile, 'by file', maxitems) - show(byhost, 'by host', maxitems) - show(byuser, 'by user', maxitems) - showbar(bydate, 'by date') - showbar(bytime, 'by time of day') - -def showbar(dict, title): - n = len(title) - print('='*((70-n)//2), title, '='*((71-n)//2)) - list = [] - for key in sorted(dict.keys()): - n = len(str(key)) - list.append((len(dict[key]), key)) - maxkeylength = 0 - maxcount = 0 - for count, key in list: - maxkeylength = max(maxkeylength, len(key)) - maxcount = max(maxcount, count) - maxbarlength = 72 - maxkeylength - 7 - for count, key in list: - barlength = int(round(maxbarlength*float(count)/maxcount)) - bar = '*'*barlength - print('%5d %-*s %s' % (count, maxkeylength, key, bar)) - -def show(dict, title, maxitems): - if len(dict) > maxitems: - title = title + ' (first %d)'%maxitems - n = len(title) - print('='*((70-n)//2), title, '='*((71-n)//2)) - list = [] - for key in dict.keys(): - list.append((-len(dict[key]), key)) - list.sort() - for count, key in list[:maxitems]: - print('%5d %s' % (-count, key)) - -def add(dict, key, item): - if key in dict: - dict[key].append(item) - else: - dict[key] = [item] - -if __name__ == "__main__": - main() |