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 |
|
|
self.status = 'X' # job status
|
10 |
|
|
self.jid = '' # scheduler job id
|
11 |
|
|
return
|
12 |
|
|
|
13 |
nsmirnov |
1.2 |
def __str__(self):
|
14 |
|
|
txt = 'Status <' + self.status + '>; '
|
15 |
|
|
txt += 'Job Id <' + self.jid + '>\n'
|
16 |
nsmirnov |
1.1 |
return txt
|
17 |
|
|
|
18 |
|
|
class JobDB:
|
19 |
|
|
def __init__(self):
|
20 |
|
|
self._dir = common.work_space.shareDir() + 'db/'
|
21 |
|
|
self._db_fname = 'jobs'
|
22 |
|
|
self._jobs = [] # list of dbEntry's
|
23 |
|
|
return
|
24 |
|
|
|
25 |
nsmirnov |
1.2 |
def __str__(self):
|
26 |
nsmirnov |
1.1 |
njobs = self.nJobs()
|
27 |
|
|
if njobs == 1: plural = ''
|
28 |
|
|
else: plural = 's'
|
29 |
|
|
txt = 'Total of %d job%s:\n' % (njobs, plural)
|
30 |
|
|
for i in range(njobs):
|
31 |
nsmirnov |
1.2 |
txt += ('Job %03d' % i) + ': '
|
32 |
nsmirnov |
1.1 |
txt += str(self._jobs[i])
|
33 |
|
|
pass
|
34 |
|
|
return txt
|
35 |
|
|
|
36 |
|
|
def nJobs(self):
|
37 |
|
|
return len(self._jobs)
|
38 |
|
|
|
39 |
|
|
def create(self, njobs):
|
40 |
|
|
|
41 |
|
|
if os.path.exists(self._dir):
|
42 |
|
|
msg = 'Cannot create Job DB: already exists.'
|
43 |
|
|
raise CrabException(msg)
|
44 |
|
|
|
45 |
|
|
os.mkdir(self._dir)
|
46 |
|
|
|
47 |
|
|
for i in range(njobs):
|
48 |
|
|
self._jobs.append(dbEntry())
|
49 |
|
|
pass
|
50 |
|
|
|
51 |
|
|
self.save()
|
52 |
|
|
return
|
53 |
|
|
|
54 |
|
|
def save(self):
|
55 |
|
|
db_file = open(self._dir+self._db_fname, 'w')
|
56 |
|
|
for i in range(len(self._jobs)):
|
57 |
|
|
db_file.write(`(i+1)`+';')
|
58 |
|
|
db_file.write(self._jobs[i].status+';')
|
59 |
|
|
db_file.write(self._jobs[i].jid+';')
|
60 |
|
|
db_file.write('\n')
|
61 |
|
|
pass
|
62 |
|
|
db_file.close()
|
63 |
|
|
return
|
64 |
|
|
|
65 |
|
|
def load(self):
|
66 |
|
|
self._jobs = []
|
67 |
|
|
db_file = open(self._dir+self._db_fname, 'r')
|
68 |
|
|
for line in db_file:
|
69 |
nsmirnov |
1.2 |
db_entry = dbEntry()
|
70 |
|
|
(n, db_entry.status, db_entry.jid, rest) = string.split(line, ';')
|
71 |
nsmirnov |
1.1 |
self._jobs.append(db_entry)
|
72 |
|
|
pass
|
73 |
|
|
db_file.close()
|
74 |
|
|
return
|
75 |
|
|
|
76 |
|
|
def setStatus(self, nj, status):
|
77 |
|
|
self._jobs[nj].status = status
|
78 |
|
|
return
|
79 |
|
|
|
80 |
|
|
def status(self, nj):
|
81 |
|
|
return self._jobs[nj].status
|
82 |
|
|
|
83 |
|
|
def setJobId(self, nj, jid):
|
84 |
|
|
self._jobs[nj].jid = jid
|
85 |
|
|
return
|
86 |
|
|
|
87 |
|
|
def jobId(self, nj):
|
88 |
|
|
return self._jobs[nj].jid
|
89 |
|
|
|