59 def content(self,**args):
60 if not 'd' in args:
61 return error % ('CONFIGURATION ERROR: No data set name specified')
62 if not 't' in args:
63 return error % ('CONFIGURATION ERROR: No task name specified')
64 with TaskManager(self.globalConfig['taskDb']) as taskman:
65 t = taskman.getTaskDict(args['d'],args['t'])
66 if not t:
67 return error % ('ERROR: Task %s/%s not found' % (args['d'],args['t']))
68
69 p = '<div class="text"><h3>Summary for task %s/%s (task id %s):</h3></div>\n' % (args['d'],args['t'],t['TASKID'])
70 p += '<table>\n'
71 p += tableRow % ('Dataset name',t['DSNAME'])
72 p += tableRow % ('Run number',blankIfNone(t['RUNNR']))
73 p += tableRow % ('Task name',t['TASKNAME'])
74 stat = t['STATUS']
75 p += tableRowStatus % ('Task status',getStatusClass(stat),getKey(TaskManager.StatusCodes,stat))
76 p += tableRow % ('On-disk status',getKey(TaskManager.OnDiskCodes,t['ONDISK']))
77 p += tableRow % ('Template',t['TEMPLATE'])
78 p += tableRow % ('Postprocessing steps',t['TASKPOSTPROCSTEPS'])
79 p += tableRow % ('ATLAS release',t['ATLREL'])
80 p += tableRow % ('# result files',t['NRESULTFILES'])
81 p += tableRow % ('Result files',fileListSnippet(t['RESULTFILES'],t['DSNAME'],t['TASKNAME'],self.globalConfig['jobDir']))
82 p += tableRow % ('Result links',t['RESULTLINKS'])
83 cooltags = t['COOLTAGS'] or ''
84 p += tableRow % ('COOL tags','<br>'.join(cooltags.split()))
85 p += tableRow % ('# jobs',t['NJOBS'])
86 p += tableRow % ('# jobs submitted',t['NJOBS_SUBMITTED'])
87 p += tableRow % ('# jobs running',t['NJOBS_RUNNING'])
88 p += tableRow % ('# jobs postprocessing',t['NJOBS_POSTPROC'])
89 p += tableRow % ('# jobs failed',t['NJOBS_FAILED'])
90 p += tableRow % ('# jobs completed',t['NJOBS_COMPLETED'])
91 p += tableRow % ('Comment',t['TASKCOMMENT'])
92 p += tableRow % ('Created','%s by %s on host %s' % (time.ctime(t['CREATED']),t['CREATED_USER'],t['CREATED_HOST']))
93 p += tableRow % ('Last update',time.ctime(t['UPDATED']))
94 p += '</table>\n'
95
96 p += '<div class="text"><h3>Job details (may be more up-to-date than summary data above):</h3></div>\n'
97 p += tableHeader;
98 a = JobAnalyzer(self.globalConfig['jobDir'],t['DSNAME'],t['TASKNAME'])
99 for j in a.jobList():
100 p += "<tr>"
101 p += "<td>%s</td>" % (j)
102 (stat,exitcode) = a.jobStatus(j)
103 p += '<td class="%s">%s</td>' % (getStatusClass(stat),getKey(TaskManager.StatusCodes,stat))
104 p += "<td>%s</td>" % (exitcode)
105 p += '<td><a href="../files?u=%s/%s/%s">Files</a></td>' %(t['DSNAME'],t['TASKNAME'],j)
106 p += "</tr>\n"
107 p += "</tbody></table>\n"
108 return p
109
110
111