8 import xml.etree.ElementTree
as ET
14 __import__(grlconfmod)
15 m = sys.modules[grlconfmod]
17 grlobj = grlconfmod.rsplit(
'.')[-1]
18 return m.__dict__[grlobj]()
21 from CoolRunQuery.AtlRunQueryLib
import AtlRunQuery, AtlRunQueryOptions
22 from CoolRunQuery.AtlRunQueryParser
import ArgumentParser
26 config.setdqfolder(folder)
27 config.setdqctag(cooltag)
30 query = config.getsearchquery()
31 print (
">> Calling cmd equivalent of: ")
32 print (
"%s \"%s\"" % (config.querytool,query))
36 atlqueryarg = config.querytool +
" " + ap.ParseArgument( query )
37 (options, args) = AtlRunQueryOptions().
parse(atlqueryarg)
43 proc = multiprocessing.Process(target=AtlRunQuery, args=(options,),
44 kwargs={
'html':
"NO",
'origQuery':query,
'loglevel':0})
47 xmlfile =
'data/'+config.listname
53 sys.path.append(os.path.dirname(grlconf))
55 tmpdir = tempfile.mkdtemp()
59 os.chdir(os.environ[
'TMPDIR'])
62 queue.put((rv, rfile))
66 tagxml = urllib.urlopen(
'http://voatlas11.cern.ch:8080/cooldb/ATLAS_COOLPROD/ATLAS_COOLOFL_GLOBAL/COMP200/GLOBAL/DETSTATUS/%s/tags'
68 xml = ET.parse(tagxml)
70 for t
in xml.findall(
'tag'):
72 lock = t.attrib.get(
'lock',
'unlocked')
73 description = t.attrib.get(
'description')
74 rv.append((text, description, lock))
77 GRL_DIRECTORY=
'/afs/cern.ch/user/a/atlasdqm/grl'
80 TAGS_TO_SUPPRESS = [
'DetStatusLBSumm_m4initial',
81 'DetStatusLBSumm-cos08-01',
82 'DetStatusLBSumm-cos09-01',
83 'DetStatusLBSumm-cos08-02',
85 'DetStatusLBSumm_RECP']
89 def walker(rl, d, children):
90 for child
in children:
91 if child[-3:] ==
'.py' and child !=
'__init__.py':
92 fullpath = os.path.join(d, child)
93 classname = fullpath.replace(GRL_DIRECTORY,
'')[:-3].lstrip(
'/').
replace(
'/',
'.')
94 rl.append((fullpath, classname))
95 os.path.walk(GRL_DIRECTORY, walker, rl)
106 '<title>GRL generator</title>'
107 '<script type="text/javascript" src="/static/js/grl.js"><!-- -->'
109 '</head><body onload="onLoad()">'
110 '<h1>Good Run List Generator</h1>'
111 '<p>This generator allows you to create good run list XML files from '
112 'configurations that are currently kept on AFS, in <tt>~atlasdqm/grl</tt>.'
114 '<p>CoolRunQuery-00-01-92'
115 '<p>GoodRunsLists-00-00-71'
117 rv.append(
'<div><form method="get" action="generate" style="border-width: 2px; border-style:solid">')
118 rv.append(
'Configuration file: <select name="configuration" id="confselect">')
120 rv.append(
'<option value="%(config)s">%(config)s</option>'
122 rv.append(
'</select> <a href="javascript:downloadPython()">(Click to download)</a> <br/>\n')
123 rv.append(
'DQ folder: <select name="folder" id="folderselect" onchange="adjustTagList(this)">\n'
124 '<option value="LBSUMM" selected>LBSUMM: Full DQ summary (default, recommended)</option>\n'
125 '<option value="SHIFTOFL">SHIFTOFL: Offline shifters (experts)</option>\n'
126 '<option value="DQCALCOFL">DQCALCOFL: Automatic checks + online shifters (experts)</option>\n'
127 '</select> If in doubt, leave as LBSUMM<br/>'
129 rv.append(
'COOL tag: <select name="cooltag" id ="cooltagselect">')
130 for folder
in (
'LBSUMM',
'SHIFTOFL',
'DQCALCOFL'):
132 if t
in TAGS_TO_SUPPRESS:
continue
135 apptext.append(
'(%s)' % descr)
136 if lock ==
'unlocked':
137 apptext.append(
'Tag unlocked, all runs may change')
138 elif lock ==
'partial':
139 apptext.append(
'Tag partially locked, recent runs may change')
141 apptext.append(
'Tag locked')
143 apptext.insert(0,
'—')
144 rv.append(
'<option value="%(tag)s">%(tag)s %(apptext)s</option>'
145 % {
'tag': t,
'apptext':
' '.
join(apptext)})
148 '<option value="">HEAD</option>'
151 '<input type="submit" value="Submit"/>\n'
154 rv.append(
'</body></html>')
160 def generate(self, configuration=None, folder='LBSUMM', cooltag='HEAD'):
161 if configuration
is None:
164 q = multiprocessing.Queue()
165 proc = multiprocessing.Process(target=_get_grl_info,
166 args = [os.path.join(GRL_DIRECTORY, configuration),
168 kwargs = {
'queue': q,
'folder': folder})
172 cherrypy.response.headers[
'content-type'] =
'text/xml'
173 cherrypy.response.headers[
'content-disposition'] =
'attachment; filename=%s' % rv[1]