ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/JobDB.py
Revision: 1.12
Committed: Wed Apr 19 10:11:22 2006 UTC (19 years ago) by spiga
Content type: text/x-python
Branch: MAIN
CVS Tags: pre_cmssw_integration_20060527, CRAB_1_1_0, CRAB_1_1_0_pre4
Changes since 1.11: +1 -1 lines
Log Message:
-list index bug fixed

File Contents

# User Rev Content
1 nsmirnov 1.1 from WorkSpace import WorkSpace
2     from crab_exceptions import *
3     import common
4    
5 nsmirnov 1.2 import os, string
6 nsmirnov 1.1
7     class dbEntry:
8     def __init__(self):
9 slacapra 1.5 self.status = 'X' # job status
10 slacapra 1.8 self.exitStatus = '' # job exit status
11 slacapra 1.5 self.jid = '' # scheduler job id
12 corvo 1.10 self.bossid = '' # BOSS job id
13 slacapra 1.5 self.firstEvent = 0 # first event for this job
14     self.maxEvents = 0 # last event for this job
15     self.collections = [] # EvCollection to be analyzed in this job
16     self.inputSandbox = [] # InputSandbox
17     self.outputSandbox = [] # OutputSandbox
18 corvo 1.10 self.taskId = '' # Task job belongs to
19 nsmirnov 1.1 return
20    
21 nsmirnov 1.2 def __str__(self):
22     txt = 'Status <' + self.status + '>; '
23 slacapra 1.8 if self.exitStatus!='':
24     txt += 'exitStatus <' + str(self.exitStatus) + '>\n'
25 nsmirnov 1.2 txt += 'Job Id <' + self.jid + '>\n'
26 slacapra 1.4 if self.maxEvents!=0:
27     txt += 'FirstEvent <' + str(self.firstEvent) + '>\n'
28     txt += 'MaxEvents <' + str(self.maxEvents) + '>\n'
29 slacapra 1.8 if self.collections:
30 slacapra 1.5 txt += 'Collections <' + str(self.collections) + '>\n'
31 slacapra 1.4
32 nsmirnov 1.1 return txt
33    
34     class JobDB:
35     def __init__(self):
36     self._dir = common.work_space.shareDir() + 'db/'
37     self._db_fname = 'jobs'
38     self._jobs = [] # list of dbEntry's
39     return
40    
41 nsmirnov 1.2 def __str__(self):
42 nsmirnov 1.1 njobs = self.nJobs()
43     if njobs == 1: plural = ''
44     else: plural = 's'
45     txt = 'Total of %d job%s:\n' % (njobs, plural)
46     for i in range(njobs):
47 nsmirnov 1.3 txt += ('Job %03d' % (i+1)) + ': '
48 nsmirnov 1.1 txt += str(self._jobs[i])
49     pass
50     return txt
51    
52 slacapra 1.4 def dump(self, jobs):
53     njobs = len(jobs)
54     if njobs == 1: plural = ''
55     else: plural = 's'
56     print 'Listing %d job%s:\n' % (njobs, plural)
57     for job in jobs:
58 spiga 1.12 print string.strip(('Job %03d' % (job)) + ': ' + str(self._jobs[job - 1]))
59 slacapra 1.4 pass
60    
61 nsmirnov 1.1 def nJobs(self):
62     return len(self._jobs)
63    
64     def create(self, njobs):
65    
66     if os.path.exists(self._dir):
67     msg = 'Cannot create Job DB: already exists.'
68     raise CrabException(msg)
69    
70     os.mkdir(self._dir)
71    
72     for i in range(njobs):
73     self._jobs.append(dbEntry())
74     pass
75    
76 slacapra 1.4 common.logger.debug(5,'Created DB for '+str(njobs)+' jobs')
77    
78 nsmirnov 1.1 self.save()
79     return
80    
81     def save(self):
82     db_file = open(self._dir+self._db_fname, 'w')
83     for i in range(len(self._jobs)):
84     db_file.write(`(i+1)`+';')
85     db_file.write(self._jobs[i].status+';')
86 slacapra 1.8 db_file.write(self._jobs[i].exitStatus+';')
87 nsmirnov 1.1 db_file.write(self._jobs[i].jid+';')
88 fanzago 1.9 db_file.write(self._jobs[i].bossid+';')
89 slacapra 1.4 db_file.write(str(self._jobs[i].firstEvent)+';')
90     db_file.write(str(self._jobs[i].maxEvents)+';')
91     db_file.write(str(self._jobs[i].collections)+';')
92 slacapra 1.5 db_file.write(str(self._jobs[i].inputSandbox)+';')
93     db_file.write(str(self._jobs[i].outputSandbox)+';')
94 corvo 1.10 db_file.write(str(self._jobs[i].taskId)+';')
95 nsmirnov 1.1 db_file.write('\n')
96     pass
97     db_file.close()
98     return
99    
100     def load(self):
101     self._jobs = []
102 slacapra 1.6 try:
103     db_file = open(self._dir+self._db_fname, 'r')
104     except IOError:
105 slacapra 1.7 raise DBException("Something really serious! no JobDB is present!!!")
106 slacapra 1.6
107 nsmirnov 1.1 for line in db_file:
108 nsmirnov 1.2 db_entry = dbEntry()
109 corvo 1.10 (n, db_entry.status, db_entry.exitStatus, db_entry.jid, db_entry.bossid, db_entry.firstEvent, db_entry.maxEvents, collectionsTMP, inputSandboxTMP , outputSandboxTMP , db_entry.taskId, rest) = string.split(line, ';')
110 slacapra 1.5 db_entry.collections = self.strToList_(collectionsTMP)
111     db_entry.inputSandbox = self.strToList_(inputSandboxTMP)
112     db_entry.outputSandbox = self.strToList_(outputSandboxTMP)
113 nsmirnov 1.1 self._jobs.append(db_entry)
114     pass
115     db_file.close()
116     return
117    
118 slacapra 1.5 def strToList_(self, list):
119     return string.split(string.replace(list[1:-1],"'",""),',')
120    
121 nsmirnov 1.1 def setStatus(self, nj, status):
122 gutsche 1.11 self._jobs[int(nj)].status = status
123 nsmirnov 1.1 return
124    
125     def status(self, nj):
126 gutsche 1.11 return self._jobs[int(nj)].status
127 nsmirnov 1.1
128 slacapra 1.8 def setExitStatus(self, nj, exitStatus):
129 gutsche 1.11 self._jobs[int(nj)].exitStatus = exitStatus
130 slacapra 1.8 return
131    
132     def exitStatus(self, nj):
133 gutsche 1.11 return self._jobs[int(nj)].exitStatus
134 slacapra 1.8
135 nsmirnov 1.1 def setJobId(self, nj, jid):
136 gutsche 1.11 self._jobs[int(nj)].jid = jid
137 nsmirnov 1.1 return
138    
139     def jobId(self, nj):
140 gutsche 1.11 return self._jobs[int(nj)].jid
141 slacapra 1.4
142 fanzago 1.9 def setBossId(self, nj, bossid):
143 gutsche 1.11 self._jobs[int(nj)].bossid = bossid
144 fanzago 1.9 return
145    
146     def bossId(self, nj):
147 gutsche 1.11 return self._jobs[int(nj)].bossid
148 fanzago 1.9
149 slacapra 1.4 def setFirstEvent(self, nj, firstEvent):
150 gutsche 1.11 self._jobs[int(nj)].firstEvent = firstEvent
151 slacapra 1.4 return
152    
153     def firstEvent(self, nj):
154 gutsche 1.11 return self._jobs[int(nj)].firstEvent
155 slacapra 1.4
156     def setMaxEvents(self, nj, MaxEvents):
157 gutsche 1.11 self._jobs[int(nj)].maxEvents = MaxEvents
158 slacapra 1.4 return
159    
160     def maxEvents(self, nj):
161 gutsche 1.11 return self._jobs[int(nj)].maxEvents
162 slacapra 1.4
163     def setCollections(self, nj, Collections):
164 gutsche 1.11 self._jobs[int(nj)].Collections = Collections
165 slacapra 1.4 return
166    
167     def collections(self, nj):
168 gutsche 1.11 return self._jobs[int(nj)].collections
169 slacapra 1.5
170     def setInputSandbox(self, nj, InputSandbox):
171 gutsche 1.11 self._jobs[int(nj)].inputSandbox = InputSandbox
172 slacapra 1.5 return
173    
174     def inputSandbox(self, nj):
175 gutsche 1.11 return self._jobs[int(nj)].inputSandbox
176 slacapra 1.5
177     def setOutputSandbox(self, nj, OutputSandbox):
178 gutsche 1.11 self._jobs[int(nj)].outputSandbox = OutputSandbox
179 slacapra 1.5 return
180    
181     def outputSandbox(self, nj):
182 gutsche 1.11 return self._jobs[int(nj)].outputSandbox
183 corvo 1.10
184     def setTaskId(self, nj, taskId):
185 gutsche 1.11 self._jobs[int(nj)].taskId = taskId