sit/module_stats.py

76 lines
2.6 KiB
Python
Executable file

#!/usr/bin/env python2.6
#
# Copyright(c) 2013 Christoph Niethammer <niethammer@hlrs.de>
#
import os
import datetime
from optparse import OptionParser
modules = list()
modulestats = dict()
moduleusers = dict()
logdir = '/sw/laki/hlrs/system/modules/logs/'
enddate = datetime.date.today()
startdate = datetime.date(enddate.year, enddate.month, 1)
modulepattern=""
parser = OptionParser(usage="%prog [options] [pattern]")
parser.add_option("--logdir", metavar="DIR", dest="logdir")
parser.add_option("--startdate", metavar="YYYY-MM-DD", dest="startdate")
parser.add_option("--enddate", metavar="YYYY-MM-DD", dest="enddate")
parser.add_option("--nohpc", action="store_true", default=False, dest="nohpc", help="Exclude hpc* accounts from stats")
(options, args) = parser.parse_args()
if options.logdir :
logdir = options.logdir
if options.startdate :
d = options.startdate
startdate = datetime.date(int(d[0:4]),int(d[5:7]),int(d[8:10]))
if options.enddate :
d = options.enddate
enddate = datetime.date(int(d[0:4]),int(d[5:7]),int(d[8:10]))
if len(args) > 0 :
modulepattern = args[0]
for logfilename in os.listdir(logdir) :
d = datetime.date(int(logfilename[0:4]),int(logfilename[4:6]),int(logfilename[6:8]))
if d < startdate :
continue
if d > enddate :
continue
date = d.strftime('%Y-%m-%d')
logfile = os.path.join(logdir, logfilename)
f = open(logfile)
for line in f :
if ' load' in line and modulepattern in line :
module = line.split()[-1]
user = line.split()[-3][5:] # remove user: in front
if options.nohpc and 'hpc' in user :
continue
if module not in modules:
modules.append(module)
modulestats[module] = 1
moduleusers[module] = dict()
moduleusers[module][user] = 1
else :
modulestats[module] = modulestats[module] + 1
if user not in moduleusers[module] :
moduleusers[module][user] = 1
else :
moduleusers[module][user] = moduleusers[module][user] + 1
# if ' swap' in line :
# print line.split()
print "-"*78
print "Module statistics for " + startdate.strftime('%Y-%m-%d') + " - " + enddate.strftime('%Y-%m-%d')
print "-"*78
print "{0:60s}{1:>8s} {2:>8s}".format('module name', '# uses', '# users')
print "-"*78
for (v,m) in sorted( ((v,k) for k,v in modulestats.iteritems()), reverse=True) :
print "{0:60s}{1:>8d} {2:>8d}".format(m, v, len(moduleusers[m].keys()))
#print moduleusers[m]