ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/Creator.py
Revision: 1.47
Committed: Tue Oct 17 14:43:16 2006 UTC (18 years, 6 months ago) by slacapra
Content type: text/x-python
Branch: MAIN
CVS Tags: CRAB_1_5_0_pre4, CRAB_1_5_0_pre3, CRAB_1_5_0_pre2, CRAB_1_4_2, CRAB_1_5_0_pre1, CRAB_1_4_1, CRAB_1_4_1_pre2, CRAB_1_4_1_pre1, CRAB_1_4_0, CRAB_1_4_0_pre4
Branch point for: branch_1_4_1
Changes since 1.46: +9 -4 lines
Log Message:
send crab version to DashBoard

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