[Erp5-report] r27801 - /erp5/trunk/utils/analyze.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu Jun 25 17:56:14 CEST 2009
Author: kazuhiko
Date: Thu Jun 25 17:56:13 2009
New Revision: 27801
URL: http://svn.erp5.org?rev=27801&view=rev
Log:
support --csv
Modified:
erp5/trunk/utils/analyze.py
Modified: erp5/trunk/utils/analyze.py
URL: http://svn.erp5.org/erp5/trunk/utils/analyze.py?rev=27801&r1=27800&r2=27801&view=diff
==============================================================================
--- erp5/trunk/utils/analyze.py [utf8] (original)
+++ erp5/trunk/utils/analyze.py [utf8] Thu Jun 25 17:56:13 2009
@@ -6,6 +6,8 @@
import re
import sys
import types
+import os
+import getopt
from ZODB.FileStorage import FileStorage
from ZODB.utils import get_pickle_metadata
@@ -42,43 +44,52 @@
l = len(s)
return "..." + s
-def report(rep):
- print "Processed %d records in %d transactions" % (rep.OIDS, rep.TIDS)
- print "Average record size is %7.2f bytes" % (rep.DBYTES * 1.0 / rep.OIDS)
- print ("Average transaction size is %7.2f bytes" %
- (rep.DBYTES * 1.0 / rep.TIDS))
+def report(rep, csv=False):
+ if not csv:
+ print "Processed %d records in %d transactions" % (rep.OIDS, rep.TIDS)
+ print "Average record size is %7.2f bytes" % (rep.DBYTES * 1.0 / rep.OIDS)
+ print ("Average transaction size is %7.2f bytes" %
+ (rep.DBYTES * 1.0 / rep.TIDS))
- print "Types used:"
- fmt = "%-46s %7s %9s %6s %7s %7s %9s %7s %9s"
- fmtp = "%-46s %7d %9d %5.1f%% %7.2f %7d %9d %7d %9d" # per-class format
+ print "Types used:"
+ if csv:
+ fmt = "%s,%s,%s,%s,%s,%s,%s,%s,%s"
+ fmtp = "%s,%d,%d,%f%%,%f,%d,%d,%d,%d" # per-class format
+ else:
+ fmt = "%-46s %7s %9s %6s %7s %7s %9s %7s %9s"
+ fmtp = "%-46s %7d %9d %5.1f%% %7.2f %7d %9d %7d %9d" # per-class format
fmts = "%46s %7d %8d %5.1f%% %7.2f" # summary format
print fmt % ("Class Name", "T.Count", "T.Bytes", "Pct", "AvgSize",
"C.Count", "C.Bytes", "O.Count", "O.Bytes")
- print fmt % ('-'*46, '-'*7, '-'*9, '-'*5, '-'*7, '-'*7, '-'*9, '-'*7, '-'*9)
+ if not csv:
+ print fmt % ('-'*46, '-'*7, '-'*9, '-'*5, '-'*7, '-'*7, '-'*9, '-'*7, '-'*9)
typemap = rep.TYPEMAP.keys()
typemap.sort(key=lambda a:rep.TYPESIZE[a])
cumpct = 0.0
for t in typemap:
pct = rep.TYPESIZE[t] * 100.0 / rep.DBYTES
cumpct += pct
- print fmtp % (shorten(t, 46), rep.TYPEMAP[t], rep.TYPESIZE[t],
+ if not csv:
+ t = shorten(t, 46)
+ print fmtp % (t, rep.TYPEMAP[t], rep.TYPESIZE[t],
pct, rep.TYPESIZE[t] * 1.0 / rep.TYPEMAP[t],
rep.COIDSMAP[t], rep.CBYTESMAP[t],
rep.FOIDSMAP.get(t, 0), rep.FBYTESMAP.get(t, 0))
- print fmt % ('='*46, '='*7, '='*9, '='*5, '='*7, '='*7, '='*9, '='*7, '='*9)
- print "%46s %7d %9s %6s %6.2f" % ('Total Transactions', rep.TIDS, ' ',
- ' ', rep.DBYTES * 1.0 / rep.TIDS)
- print fmts % ('Total Records', rep.OIDS, rep.DBYTES, cumpct,
- rep.DBYTES * 1.0 / rep.OIDS)
+ if not csv:
+ print fmt % ('='*46, '='*7, '='*9, '='*5, '='*7, '='*7, '='*9, '='*7, '='*9)
+ print "%46s %7d %9s %6s %6.2f" % ('Total Transactions', rep.TIDS, ' ',
+ ' ', rep.DBYTES * 1.0 / rep.TIDS)
+ print fmts % ('Total Records', rep.OIDS, rep.DBYTES, cumpct,
+ rep.DBYTES * 1.0 / rep.OIDS)
- print fmts % ('Current Objects', rep.COIDS, rep.CBYTES,
- rep.CBYTES * 100.0 / rep.DBYTES,
- rep.CBYTES * 1.0 / rep.COIDS)
- if rep.FOIDS:
- print fmts % ('Old Objects', rep.FOIDS, rep.FBYTES,
- rep.FBYTES * 100.0 / rep.DBYTES,
- rep.FBYTES * 1.0 / rep.FOIDS)
+ print fmts % ('Current Objects', rep.COIDS, rep.CBYTES,
+ rep.CBYTES * 100.0 / rep.DBYTES,
+ rep.CBYTES * 1.0 / rep.COIDS)
+ if rep.FOIDS:
+ print fmts % ('Old Objects', rep.FOIDS, rep.FBYTES,
+ rep.FBYTES * 100.0 / rep.DBYTES,
+ rep.FBYTES * 1.0 / rep.FOIDS)
def analyze(path):
fs = FileStorage(path, read_only=1)
@@ -130,6 +141,36 @@
except Exception, err:
print err
+__doc__ = """%(program)s: Data.fs analyzer
+
+usage: %(program)s [options] /path/to/Data.fs
+
+Options:
+ -h, --help this help screen
+ -c, --csv output CSV
+"""
+
+def usage(stream, meg=None):
+ if msg:
+ print >>stream, msg
+ print >>stream
+ program = os.path.basename(sys.argv[0])
+ print >>stream, __doc__ % {"program": program}
+
+
if __name__ == "__main__":
- path = sys.argv[1]
- report(analyze(path))
+ try:
+ opts, args = getopt.getopt(sys.argv[1:],
+ 'hc', ['help', 'csv'])
+ path = args[0]
+ except (getopt.GetoptError, IndexError), msg:
+ usage(sys.stderr, msg)
+ sys.exit(2)
+ csv = False
+ for opt, args in opts:
+ if opt in ('-c', '--csv'):
+ csv = True
+ elif opt in ('-h', '--help'):
+ usage(sys.stdout)
+ sys.exit()
+ report(analyze(path), csv)
More information about the Erp5-report
mailing list