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