ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/JobDB.py
Revision: 1.8
Committed: Wed Aug 31 10:36:36 2005 UTC (19 years, 8 months ago) by slacapra
Content type: text/x-python
Branch: MAIN
Changes since 1.7: +13 -2 lines
Log Message:
exit status

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