ATLAS Offline Software
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 """
5 ATLAS beam spot web page for displaying beam spot job data.
6 """
7 
8 __author__ = 'Juerg Beringer'
9 __version__ = 'JobBrowser.py atlas/athena'
10 
11 from BeamSpotWebPage import BeamSpotWebPage
13 from InDetBeamSpotExample.Utils import blankIfNone
14 import time
15 import glob
16 
17 tableSorter = """\
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 
30 tableHeader = """<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 
46 taskCount = """\
47 <div class="text">
48 <h3>%s task(s):</h3>
49 </div>
50 """
51 
52 taskCountLimit = """\
53 <div class="text">
54 <h3>%s task(s), displaying last %i tasks:</h3>
55 </div>
56 """
57 
58 taskCountForDS = """\
59 <div class="text">
60 <h3>%s task(s) for dataset %s:</h3>
61 </div>
62 """
63 
64 taskCountForRun = """\
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
118 if __name__ == '__main__':
120  print (p.index())
WebPage.WebPage.globalConfig
globalConfig
Definition: WebPage.py:290
WebPage.WebPage.addToPageHeader
def addToPageHeader(self, snippet)
Definition: WebPage.py:320
JobBrowser.JobBrowser
Definition: JobBrowser.py:71
JobBrowser.JobBrowser.content
def content(self, **args)
Definition: JobBrowser.py:78
JobBrowser.JobBrowser.__init__
def __init__(self)
Definition: JobBrowser.py:73
buildDatabase.getKey
def getKey(filename)
Definition: buildDatabase.py:545
TaskManager
python.Utils.blankIfNone
def blankIfNone(s)
Definition: InnerDetector/InDetExample/InDetBeamSpotExample/python/Utils.py:41
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
python.TaskManager.getStatusClass
def getStatusClass(status)
Definition: TaskManager.py:51
Trk::split
@ split
Definition: LayerMaterialProperties.h:38
WebPage.WebPage.pageConfig
pageConfig
Definition: WebPage.py:273
BeamSpotWebPage.BeamSpotWebPage
Definition: BeamSpotWebPage.py:47