summaryrefslogtreecommitdiffstats
path: root/Demo/scripts
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2009-10-11 14:50:57 (GMT)
committerGeorg Brandl <georg@python.org>2009-10-11 14:50:57 (GMT)
commit97b0837587671ce60b4fdea6a4c63bb55c219329 (patch)
tree77ac347718c3b8197e5617fe49b6fa9839ad8e86 /Demo/scripts
parentec8aab6e4c992d155ba389e5574842c43a323b0e (diff)
downloadcpython-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. ........
Diffstat (limited to 'Demo/scripts')
-rw-r--r--Demo/scripts/README1
-rwxr-xr-xDemo/scripts/ftpstats.py142
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()