def print_summary(start, end, snodes, neg_snodes, comment): # alljobs = Job.objects.filter(jobslots__node__in=snodes,comp_time__range=(start,end)).exclude(jobslots__node__in=neg_snodes) alljobs = Job.objects.filter(jobslots__node__in=snodes,comp_time__range=(start,end)).distinct() sq = Queue.objects.get(name='solid',server__name='torque.farm.particle.cz') isq = Queue.objects.get(name='isolid',server__name='torque.farm.particle.cz') nisolidjobs = alljobs.filter(queue=sq) isolidjobs = alljobs.filter(queue=isq) solidjobs = nisolidjobs #|isolidjobs str = "Summary from %s to %s for %s:" % (start, end, comment) print print str print "=" * len(str) do_agg(alljobs, "All jobs") do_agg(solidjobs, "Solid jobs") return # this is damn slow :( # see http://groups.google.com/group/django-users/browse_thread/thread/87cc286019c7d57c agg = Job.objects.filter(pk__in=alljobs).aggregate( Sum("walltime"), Sum("cput"), Count("pk"), SumTimeDiff("comp_time", diff="start_time"), AvgTimeDiff("start_time", diff="qtime") ) solidagg = Job.objects.filter(pk__in=solidjobs).aggregate( Sum("walltime"), Sum("cput"), Count("pk"), SumTimeDiff("comp_time", diff="start_time"), AvgTimeDiff("start_time", diff="qtime") ) print "All jobs" print "--------" print "Job count: %d\nCputime: %s\nWalltime: %s\nReal walltime: %s\nAverage wait time: %s" % (agg['pk__count'], secondsToHours(agg['cput__sum']), secondsToHours(agg['walltime__sum']), secondsToHours(int(agg['comp_time__start_time__sumtimediff'])), secondsToHours(int(agg['start_time__qtime__avgtimediff'])) ) print "Jobs real walltime * jobslots: %s" % secondsToHours(sum([j.jobslots.count()*tosec(j.comp_time-j.start_time) for j in alljobs])) print print "Solid jobs" print "--------" print "Job count: %d\nCputime: %s\nWalltime: %s\nReal walltime: %s\nAverage wait time: %s" % (solidagg['pk__count'], secondsToHours(solidagg['cput__sum']), secondsToHours(solidagg['walltime__sum']), secondsToHours(int(solidagg['comp_time__start_time__sumtimediff'])), secondsToHours(int(solidagg['start_time__qtime__avgtimediff'])) ) print "Jobs real walltime * jobslots: %s" % secondsToHours(sum([j.jobslots.count()*tosec(j.comp_time-j.start_time) for j in solidjobs])) print
def do_agg(jobs, header): print header print "-"*len(header) count_jobs = sum_cput = sum_walltime = sum_realwalltime = sum_realwalltime_slots = sum_waittime = 0 for j in jobs: count_jobs += 1 sum_cput += j.cput sum_walltime += j.walltime realwalltime = tosec(j.comp_time - j.start_time) sum_realwalltime += realwalltime sum_realwalltime_slots += (j.jobslots.count()*realwalltime) sum_waittime += tosec(j.start_time - j.qtime) avg_waittime = sum_waittime/count_jobs print "Job count: %d" % count_jobs print "Cputime: %s" % secondsToHours(sum_cput) print "Walltime: %s" % secondsToHours(sum_walltime) print "Real walltime: %s" % secondsToHours(sum_realwalltime) print "Real walltime*jobslots: %s" % secondsToHours(sum_realwalltime_slots) print "Avg wait time: %s" % secondsToHours(avg_waittime) print