ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/JobDB.py
Revision: 1.9
Committed: Wed Aug 31 16:09:54 2005 UTC (19 years, 8 months ago) by fanzago
Content type: text/x-python
Branch: MAIN
CVS Tags: CRAB_1_0_4, CRAB_1_0_3, CRAB_1_0_2, CRAB_0_2_2, CRAB_1_0_1, CRAB_1_0_0_rc1, CRAB_1_0_0_beta4, CRAB_1_0_0_pre1_boss_2, CRAB_1_0_0_pre1_boss
Changes since 1.8: +10 -1 lines
Log Message:
added bossid entry

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