ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/Creator.py
Revision: 1.40
Committed: Fri Jul 7 14:35:17 2006 UTC (18 years, 9 months ago) by spiga
Content type: text/x-python
Branch: MAIN
Changes since 1.39: +3 -3 lines
Log Message:
updated for cmssw jobtype

File Contents

# User Rev Content
1 nsmirnov 1.1 from Actor import Actor
2     from WorkSpace import WorkSpace
3     from JobList import JobList
4     from JobDB import JobDB
5     from ScriptWriter import ScriptWriter
6     from Scheduler import Scheduler
7     from crab_logger import Logger
8     from crab_exceptions import *
9     from crab_util import *
10     import common
11    
12 slacapra 1.8 import os, string, math
13 corvo 1.26 # marco
14 nsmirnov 1.1 class Creator(Actor):
15 corvo 1.30 def __init__(self, job_type_name, cfg_params, ncjobs):
16 nsmirnov 1.1 self.job_type_name = job_type_name
17 corvo 1.30 self.job_type = None
18 nsmirnov 1.1 self.cfg_params = cfg_params
19 nsmirnov 1.2 self.total_njobs = 0
20     self.total_number_of_events = 0
21     self.job_number_of_events = 0
22 slacapra 1.7 self.first_event = 0
23 gutsche 1.38 self.jobParamsList=[]
24 slacapra 1.14
25 corvo 1.30 self.createJobTypeObject()
26 nsmirnov 1.3 common.logger.debug(5, __name__+": JobType "+self.job_type.name()+" created")
27 nsmirnov 1.1
28     self.job_type.prepareSteeringCards()
29 nsmirnov 1.3 common.logger.debug(5, __name__+": Steering cards prepared")
30 nsmirnov 1.1
31 gutsche 1.38 self.total_njobs = self.job_type.numberOfJobs();
32 nsmirnov 1.3 common.logger.debug(5, __name__+": total # of jobs = "+`self.total_njobs`)
33 nsmirnov 1.1
34     # Set number of jobs to be created
35    
36     self.ncjobs = ncjobs
37     if ncjobs == 'all' : self.ncjobs = self.total_njobs
38     if ncjobs > self.total_njobs : self.ncjobs = self.total_njobs
39 spiga 1.11
40 slacapra 1.35 # This is code for proto-monitoring
41 spiga 1.20 fileCODE1 = open(common.work_space.shareDir()+"/.code","a")
42 slacapra 1.39 if self.job_type.name() == 'ORCA' or self.job_type.name() == 'ORCA_PUBDB' :
43 spiga 1.20 self.owner = cfg_params['ORCA.owner']
44     self.dataset = cfg_params['ORCA.dataset']
45     fileCODE1.write('::'+str(self.job_type.name())+'::'+str(self.ncjobs)+'::'+str(self.dataset)+'::'+str(self.owner))
46     pass
47     elif self.job_type.name() == 'FAMOS':
48 spiga 1.27 self.inputFile = cfg_params['FAMOS.input_lfn']
49     self.executable = cfg_params['FAMOS.executable']
50     fileCODE1.write('::'+str(self.job_type.name())+'::'+str(self.ncjobs)+'::'+str(self.inputFile)+'::'+str(self.executable))
51 spiga 1.20 pass
52 spiga 1.37 elif self.job_type.name() == 'CMSSW':
53 spiga 1.40 self.primaryDataset = cfg_params['CMSSW.datasetpath'].split("/")[1]
54     self.ProcessedDataset = cfg_params['CMSSW.datasetpath'].split("/")[3]
55     fileCODE1.write('::'+str(self.job_type.name())+'::'+str(self.ncjobs)+'::'+str(self.primaryDataset)+'::'+str(self.ProcessedDataset))
56 spiga 1.37 pass
57    
58 spiga 1.11 fileCODE1.close()
59    
60 slacapra 1.35 # This is code for dashboard
61 spiga 1.36
62     #First checkProxy
63     common.scheduler.checkProxy()
64 corvo 1.33 try:
65     fl = open(common.work_space.shareDir() + '/' + self.cfg_params['apmon'].fName, 'w')
66     self.cfg_params['GridName'] = runCommand("voms-proxy-info -identity")
67     common.logger.debug(5, "GRIDNAME: "+self.cfg_params['GridName'])
68     taskType = 'analysis'
69    
70     params = {'tool': common.prog_name, 'tool_ui': os.environ['HOSTNAME'], \
71     'scheduler': self.cfg_params['CRAB.scheduler'], 'GridName': self.cfg_params['GridName'].strip(), \
72     'taskType': taskType, 'vo': self.cfg_params['EDG.virtual_organization'], 'user': self.cfg_params['user']}
73     jtParam = self.job_type.getParams()
74     for i in jtParam.iterkeys():
75     params[i] = string.strip(jtParam[i])
76     for j, k in params.iteritems():
77     # print "Values: %s %s"%(j, k)
78     fl.write(j + ':' + k + '\n')
79     fl.close()
80     except:
81     exctype, value = sys.exc_info()[:2]
82 slacapra 1.35 common.logger.message("Creator::run Exception raised in collection params for dashboard: %s %s"%(exctype, value))
83 corvo 1.33 pass
84 nsmirnov 1.1
85     #TODO: deprecated code, not needed,
86     # will be eliminated when WorkSpace.saveConfiguration()
87     # will be improved.
88     #
89     # Set/Save Job Type name
90    
91     jt_fname = common.work_space.shareDir() + 'jobtype'
92     if os.path.exists(jt_fname):
93     # Read stored job type name
94     jt_file = open(jt_fname, 'r')
95     jt = jt_file.read()
96     if self.job_type_name:
97     if ( jt != self.job_type_name+'\n' ):
98     msg = 'Job Type mismatch: requested <' + self.job_type_name
99     msg += '>, found <' + jt[:-1] + '>.'
100     raise CrabException(msg)
101     pass
102     else:
103     self.job_type_name = jt[:-1]
104     pass
105     jt_file.close()
106     pass
107     else:
108     # Save job type name
109     jt_file = open(jt_fname, 'w')
110     jt_file.write(self.job_type_name+'\n')
111     jt_file.close()
112     pass
113     #end of deprecated code
114    
115 nsmirnov 1.3 common.logger.debug(5, "Creator constructor finished")
116 nsmirnov 1.1 return
117    
118 slacapra 1.7 def writeJobsSpecsToDB(self):
119     """
120     Write firstEvent and maxEvents in the DB for future use
121     """
122    
123 gutsche 1.38 self.job_type.split(self.jobParamsList)
124 nsmirnov 1.2 return
125    
126 nsmirnov 1.1 def nJobs(self):
127     return self.total_njobs
128    
129     def createJobTypeObject(self):
130     file_name = 'cms_'+ string.lower(self.job_type_name)
131     klass_name = string.capitalize(self.job_type_name)
132    
133     try:
134     klass = importName(file_name, klass_name)
135     except KeyError:
136     msg = 'No `class '+klass_name+'` found in file `'+file_name+'.py`'
137     raise CrabException(msg)
138     except ImportError, e:
139     msg = 'Cannot create job type '+self.job_type_name
140     msg += ' (file: '+file_name+', class '+klass_name+'):\n'
141     msg += str(e)
142     raise CrabException(msg)
143    
144     self.job_type = klass(self.cfg_params)
145     return
146 nsmirnov 1.5
147     def jobType(self):
148     return self.job_type
149 nsmirnov 1.1
150     def run(self):
151 nsmirnov 1.4 """
152     The main method of the class.
153     """
154 nsmirnov 1.1
155 nsmirnov 1.3 common.logger.debug(5, "Creator::run() called")
156    
157 nsmirnov 1.1 # Instantiate ScriptWriter
158    
159     script_writer = ScriptWriter('crab_template.sh')
160    
161     # Loop over jobs
162    
163     njc = 0
164 nsmirnov 1.4 for nj in range(self.total_njobs):
165 nsmirnov 1.1 if njc == self.ncjobs : break
166 nsmirnov 1.4 st = common.jobDB.status(nj)
167 nsmirnov 1.1 if st != 'X': continue
168    
169 nsmirnov 1.6 common.logger.message("Creating job # "+`(nj+1)`)
170 nsmirnov 1.3
171 nsmirnov 1.1 # Prepare configuration file
172    
173 nsmirnov 1.4 self.job_type.modifySteeringCards(nj)
174 fanzago 1.12 # Create script (sh)
175 fanzago 1.13 #print "nel for prima del modifyTemplateScript, nj vale", nj
176 nsmirnov 1.4 script_writer.modifyTemplateScript(nj)
177     os.chmod(common.job_list[nj].scriptFilename(), 0744)
178 nsmirnov 1.1
179 fanzago 1.12 # Create scheduler scripts (jdl)
180     common.scheduler.createSchScript(nj)
181    
182 nsmirnov 1.4 common.jobDB.setStatus(nj, 'C')
183 slacapra 1.9 # common: write input and output sandbox
184     common.jobDB.setInputSandbox(nj, self.job_type.inputSandbox(nj))
185    
186     outputSandbox=self.job_type.outputSandbox(nj)
187 gutsche 1.32 stdout=common.job_list[nj].stdout()
188 slacapra 1.9 stderr=common.job_list[nj].stderr()
189     outputSandbox.append(common.job_list[nj].stdout())
190     # check if out!=err
191     if stdout != stderr:
192     outputSandbox.append(common.job_list[nj].stderr())
193     common.jobDB.setOutputSandbox(nj, outputSandbox)
194 corvo 1.18 common.jobDB.setTaskId(nj, self.cfg_params['taskId'])
195 slacapra 1.9
196 nsmirnov 1.1 njc = njc + 1
197     pass
198    
199     ####
200 fanzago 1.12
201 nsmirnov 1.1 common.jobDB.save()
202    
203     msg = '\nTotal of %d jobs created'%njc
204     if njc != self.ncjobs: msg = msg + ' from %d requested'%self.ncjobs
205     msg = msg + '.\n'
206     common.logger.message(msg)
207     return