ATLAS Offline Software
Loading...
Searching...
No Matches
JobBrowser.py
Go to the documentation of this file.
1# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
2
3
4"""
5ATLAS beam spot web page for displaying beam spot job data.
6"""
7
8__author__ = 'Juerg Beringer'
9__version__ = 'JobBrowser.py atlas/athena'
10
11from BeamSpotWebPage import BeamSpotWebPage
13from InDetBeamSpotExample.Utils import blankIfNone
14import time
15import glob
16
17tableSorter = """\
18<script type="text/javascript" src="../js/jquery-latest.js"></script>
19<script type="text/javascript" src="../js/jquery.tablesorter.js"></script>
20<script type="text/javascript" id="js">
21$(document).ready(function() {
22 $("table").tablesorter({
23 headers: { 0: { sorter: "shortDate" } },
24 sortList: [[0,1]]
25 });
26});
27</script>
28"""
29
30tableHeader = """<table cellspacing="0" class="tablesorter">
31<thead>
32<tr>
33<th>Last update</th>
34<th>Dataset</th>
35<th>Task</th>
36<th>Release</th>
37<th>#Jobs</th>
38<th>Status</th>
39<th>Details</th>
40<th>Results</th>
41</tr>
42</thead>
43<tbody>
44"""
45
46taskCount = """\
47<div class="text">
48<h3>%s task(s):</h3>
49</div>
50"""
51
52taskCountLimit = """\
53<div class="text">
54<h3>%s task(s), displaying last %i tasks:</h3>
55</div>
56"""
57
58taskCountForDS = """\
59<div class="text">
60<h3>%s task(s) for dataset %s:</h3>
61</div>
62"""
63
64taskCountForRun = """\
65<div class="text">
66<h3>%s task(s) for run %s:</h3>
67</div>
68"""
69
70
72
73 def __init__(self):
74 BeamSpotWebPage.__init__(self)
75 self.pageConfig['pageTitle'] = 'ATLAS Beam Spot Jobs'
76 self.addToPageHeader(tableSorter)
77
78 def content(self,**args):
79 with TaskManager(self.globalConfig['taskDb']) as taskman:
80 if 'r' in args:
81 table = taskCountForRun % (taskman.getNTasks(['where RUNNR =',DbParam(args['r'])]), args['r'])
82 taskIter = taskman.taskIterDict('*', ['where RUNNR =',DbParam(args['r']),'order by UPDATED'] )
83 elif 'd' in args:
84 table = taskCountForDS % (taskman.getNTasks(["where DSNAME like '%%%s%%'" % args['d']]), args['d'])
85 taskIter = taskman.taskIterDict('*', ["where DSNAME like '%%%s%%' order by UPDATED" % args['d']] )
86 else:
87 limit = int(args['limit']) if 'limit' in args else 50
88 if not limit:
89 limit = 99999999
90 table = taskCount % taskman.getNTasks()
91 taskIter = taskman.taskIterDict(qual=('order by UPDATED desc',))
92 else:
93 table = taskCountLimit % (taskman.getNTasks(),limit)
94 taskIter = taskman.taskIterDict(qual=('order by UPDATED desc',),limit=limit)
95 table += tableHeader
96 for t in taskIter:
97 dsname = t['DSNAME']
98 taskname = t['TASKNAME']
99 table += "<tr>"
100 table += "<td>%s</td>" % (time.ctime(t['UPDATED']))
101 table += "<td>%s</td>" % (dsname)
102 table += "<td>%s</td>" % (taskname)
103 table += "<td>%s</td>" % ('<br>'.join(t['ATLREL'].split(';')))
104 table += "<td>%s</td>" % (t['NJOBS'])
105 stat = t['STATUS']
106 table += '<td class="%s">%s</td>' % (getStatusClass(stat),getKey(TaskManager.StatusCodes,stat))
107 table += '<td>'
108 table += ' <a href="../details?d=%s&t=%s">Details</a>' %(dsname,taskname)
109 table += ' <a href="../files?u=%s/%s">Files</a>' %(dsname,taskname)
110 table += '</td>'
111 table += "<td>%s</td>" % (blankIfNone(t['RESULTLINKS']))
112 table += "</tr>\n"
113 table += "</tbody></table>\n"
114 return table
115
116
117# Code to test or run locally
118if __name__ == '__main__':
120 print (p.index())
content(self, **args)
Definition JobBrowser.py:78
addToPageHeader(self, snippet)
Definition WebPage.py:320
std::vector< std::string > split(const std::string &s, const std::string &t=":")
Definition hcg.cxx:177