ATLAS Offline Software
InnerDetector
InDetExample
InDetBeamSpotExample
www
JobDetails.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 details of beam spot jobs.
6
"""
7
8
__author__ =
'Juerg Beringer'
9
__version__ =
'JobDetails.py atlas/athena'
10
11
from
BeamSpotWebPage
import
BeamSpotWebPage
12
from
InDetBeamSpotExample.TaskManager
import
*
13
from
InDetBeamSpotExample.Utils
import
fileListSnippet
14
from
InDetBeamSpotExample.Utils
import
blankIfNone
15
import
time
16
17
error =
"""\
18
<div class="errormsg">
19
%s
20
</div>
21
"""
22
23
tableRow =
'<tr><td class="header">%s</td><td>%s</td></tr>\n'
24
tableRowStatus =
'<tr><td class="header">%s</td><td class="%s">%s</td></tr>\n'
25
26
tableSorter =
"""\
27
<script type="text/javascript" src="../js/jquery-latest.js"></script>
28
<script type="text/javascript" src="../js/jquery.tablesorter.js"></script>
29
<script type="text/javascript" id="js">
30
$(document).ready(function() {
31
$("table").tablesorter({
32
headers: { 0: { sorter: "shortDate" } },
33
sortList: [[0,1]]
34
});
35
});
36
</script>
37
"""
38
39
tableHeader =
"""<table cellspacing="0" class="tablesorter">
40
<thead>
41
<tr>
42
<th>Job</th>
43
<th>Status</th>
44
<th>Exit code</th>
45
<th>Files</th>
46
</tr>
47
</thead>
48
<tbody>
49
"""
50
51
52
class
JobDetails
(
BeamSpotWebPage
):
53
54
def
__init__
(self):
55
BeamSpotWebPage.__init__(self)
56
self.
pageConfig
[
'pageTitle'
] =
'ATLAS Beam Spot Job Details'
57
self.
addToPageHeader
(tableSorter)
58
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
# Code to test or run locally
112
if
__name__ ==
'__main__'
:
113
p =
JobDetails
()
114
print
(p.index())
WebPage.WebPage.globalConfig
globalConfig
Definition:
WebPage.py:290
WebPage.WebPage.addToPageHeader
def addToPageHeader(self, snippet)
Definition:
WebPage.py:320
JobDetails.JobDetails.content
def content(self, **args)
Definition:
JobDetails.py:59
buildDatabase.getKey
def getKey(filename)
Definition:
buildDatabase.py:545
TaskManager
python.Utils.fileListSnippet
def fileListSnippet(files, dsName, taskName, jobDir=None)
Definition:
InnerDetector/InDetExample/InDetBeamSpotExample/python/Utils.py:30
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
JobDetails.JobDetails.__init__
def __init__(self)
Definition:
JobDetails.py:54
python.TaskManager.getStatusClass
def getStatusClass(status)
Definition:
TaskManager.py:51
JobDetails.JobDetails
Definition:
JobDetails.py:52
WebPage.WebPage.pageConfig
pageConfig
Definition:
WebPage.py:273
BeamSpotWebPage.BeamSpotWebPage
Definition:
BeamSpotWebPage.py:47
Generated on Sun Aug 31 2025 21:12:50 for ATLAS Offline Software by
1.8.18