ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/DBinterface.py
Revision: 1.15
Committed: Tue Apr 15 14:13:07 2008 UTC (17 years ago) by mcinquil
Content type: text/x-python
Branch: MAIN
Changes since 1.14: +1 -1 lines
Log Message:
Added taskname in front of job name

File Contents

# User Rev Content
1 spiga 1.1 from crab_logger import Logger
2     from crab_exceptions import *
3     from crab_util import *
4     import common
5     import os, time, shutil
6 spiga 1.13 import traceback
7 spiga 1.1
8     from ProdCommon.BossLite.API.BossLiteAPI import BossLiteAPI
9 spiga 1.13 from ProdCommon.BossLite.Common.Exceptions import DbError
10     from ProdCommon.BossLite.Common.Exceptions import TaskError
11 spiga 1.1
12     from ProdCommon.BossLite.DbObjects.Job import Job
13     from ProdCommon.BossLite.DbObjects.Task import Task
14     from ProdCommon.BossLite.DbObjects.RunningJob import RunningJob
15    
16    
17     class DBinterface:
18 spiga 1.2 def __init__(self, cfg_params):
19 spiga 1.1
20 spiga 1.2 self.cfg_params = cfg_params
21    
22     self.db_type = cfg_params.get("USER.use_db",'SQLite')
23 spiga 1.1 return
24    
25    
26 spiga 1.2 def configureDB(self):
27 spiga 1.1
28     dbname = common.work_space.shareDir()+'crabDB'
29     dbConfig = {'dbName':dbname
30     }
31 spiga 1.13 try:
32     common.bossSession = BossLiteAPI( self.db_type, dbConfig)
33     except Exception, e :
34     raise CrabException('Istantiate DB Session : '+str(e))
35    
36     try:
37     common.bossSession.installDB('$CRABPRODCOMMONPYTHON/ProdCommon/BossLite/DbObjects/setupDatabase-sqlite.sql')
38     except Exception, e :
39     raise CrabException('DB Installation error : '+str(e))
40     return
41 spiga 1.1
42 spiga 1.2 def loadDB(self):
43    
44     dbname = common.work_space.shareDir()+'crabDB'
45     dbConfig = {'dbName':dbname
46     }
47 spiga 1.13 try:
48     common.bossSession = BossLiteAPI( self.db_type, dbConfig)
49     except Exception, e :
50     raise CrabException('Istantiate DB Session : '+str(e))
51    
52 spiga 1.2 return
53 spiga 1.4
54 spiga 1.13 def getTask(self, jobsList='all'):
55 spiga 1.9 """
56     Return task with all/list of jobs
57     """
58 spiga 1.13 try:
59     task = common.bossSession.load(1,jobsList)[0]
60     except Exception, e :
61     common.logger.debug(3, "Error while getting task : " +str(traceback.format_exc()))
62     raise CrabException('Error while getting task '+str(e))
63 spiga 1.9 return task
64 spiga 1.2
65 slacapra 1.6 def getJob(self, n):
66 spiga 1.9 """
67     Return a task with a single job
68     """
69 spiga 1.13 try:
70     task = common.bossSession.load(1,str(n))[0]
71     except Exception, e :
72     common.logger.debug(3, "Error while getting job : " +str(traceback.format_exc()))
73     raise CrabException('Error while getting job '+str(e))
74 spiga 1.9 return task
75 spiga 1.2
76 spiga 1.1
77     def createTask_(self, optsToSave):
78     """
79     Task declaration
80     with the first coniguration stuff
81     """
82     opt={}
83 slacapra 1.14 if optsToSave.get('server_mode',0) == 1: opt['serverName']=optsToSave['server_name']
84     opt['name']=common.work_space.taskName()
85 spiga 1.1 task = Task( opt )
86 spiga 1.13 try:
87     common.bossSession.saveTask( task )
88     except Exception, e :
89     # common.logger.debug(3, "Error creating task : " +str(traceback.format_exc()))
90     # raise CrabException('Error creating task '+str(e))
91     raise CrabException('Error creating task '+str(traceback.format_exc()))
92    
93 spiga 1.1 return
94    
95     def updateTask_(self,optsToSave):
96     """
97     Update task fields
98     """
99 spiga 1.13 task = self.getTask()
100    
101 spiga 1.1 for key in optsToSave.keys():
102     task[key] = optsToSave[key]
103 spiga 1.13 try:
104     common.bossSession.updateDB( task )
105     except Exception, e :
106     raise CrabException('Error updating task '+str(traceback.format_exc()))
107    
108 spiga 1.1 return
109    
110 spiga 1.9 def createJobs_(self, jobsL):
111 spiga 1.1 """
112     Fill crab DB with the jobs filed
113     """
114 spiga 1.13 task = self.getTask()
115    
116 spiga 1.1 jobs = []
117 spiga 1.9 for id in jobsL:
118 spiga 1.1 parameters = {}
119 spiga 1.9 parameters['jobId'] = str(id)
120 mcinquil 1.15 parameters['name'] = task['name'] + '_' + 'job' + str(id)
121 spiga 1.1 job = Job(parameters)
122 spiga 1.9 jobs.append(job)
123 spiga 1.1 task.addJobs(jobs)
124 spiga 1.13 try:
125     common.bossSession.updateDB( task )
126     except Exception, e :
127     raise CrabException('Error updating task '+str(traceback.format_exc()))
128    
129 spiga 1.1 return
130    
131 spiga 1.9 def updateJob_(self, jobsL, optsToSave):
132 spiga 1.1 """
133     Update Job fields
134     """
135 spiga 1.13 task = self.getTask(jobsL)
136 spiga 1.10 id =0
137     for job in task.jobs:
138 spiga 1.9 for key in optsToSave[id].keys():
139 spiga 1.10 job[key] = optsToSave[id][key]
140     id+=1
141 spiga 1.13 try:
142     common.bossSession.updateDB( task )
143     except Exception, e :
144     raise CrabException('Error updating task '+str(traceback.format_exc()))
145 spiga 1.1 return
146    
147 spiga 1.9 def updateRunJob_(self, jobsL, optsToSave):
148 spiga 1.1 """
149     Update Running Job fields
150     """
151 spiga 1.13 task = self.getTask(jobsL)
152    
153 spiga 1.12 id=0
154 spiga 1.10 for job in task.jobs:
155     common.bossSession.getRunningInstance(job)
156 spiga 1.12 for key in optsToSave[id].keys():
157     job.runningJob[key] = optsToSave[id][key]
158     id+=1
159 spiga 1.1 common.bossSession.updateDB( task )
160     return
161    
162 spiga 1.9 def nJobs(self,list=''):
163 spiga 1.2
164 spiga 1.13 task = self.getTask()
165 spiga 1.9 listId=[]
166     if list == 'list':
167     for job in task.jobs:listId.append(int(job['jobId']))
168     return listId
169     else:
170     return len(task.jobs)
171 spiga 1.1
172     def dump(self,jobs):
173     """
174     List a complete set of infos for a job/range of jobs
175     """
176 spiga 1.13 task = self.getTask()
177 spiga 1.1
178     njobs = len(jobs)
179     lines=[]
180     header=''
181     # ##query the DB asking the right infos for runningJobs TODO DS
182     # for job in jobs:
183     # ## here the query over runngJobs
184     # pass
185    
186    
187     # ##Define Header to show and Pass the query results,
188     # ## header and format to displayReport() TODO DS
189     # if njobs == 1: plural = ''
190     # else: plural = 's'
191     # header += 'Listing %d job%s:\n' % (njobs, plural)
192     # header += ' :\n' % (---) ## TODO DS
193    
194     # displayReport(header, lines):
195     return
196 farinafa 1.8
197     def serializeTask(self, tmp_task = None):
198     if tmp_task is None:
199 spiga 1.13 tmp_task = self.getTask()
200 farinafa 1.8 return common.bossSession.serialize(tmp_task)
201 spiga 1.1
202     def queryID(self,server_mode=0):
203     '''
204     Return the taskId if serevr_mode =1
205     Return the joblistId if serevr_mode =0
206     '''
207     header=''
208     lines=[]
209 spiga 1.13 task = self.getTask()
210 spiga 1.1 if server_mode == 1:
211 spiga 1.2 header= "Task Id = %-40s " %(task['name'])
212 spiga 1.1 else:
213 spiga 1.11 for job in task.jobs:
214     toPrint=''
215     common.bossSession.getRunningInstance(job)
216     toPrint = "%-5s %-50s " % (job['id'],job.runningJob['schedulerId'])
217     lines.append(toPrint)
218     header+= "%-5s %-50s " % ('Job:','ID' )
219     displayReport(self,header,lines)
220 spiga 1.1 return
221    
222     def queryTask(self,attr):
223     '''
224     Perform a query over a generic task attribute
225     '''
226 spiga 1.13 task = self.getTask()
227 spiga 1.1 return task[attr]
228    
229 spiga 1.12 def queryJob(self, attr, jobsL):
230 spiga 1.1 '''
231     Perform a query for a range/all/single job
232     over a generic job attribute
233     '''
234     lines=[]
235 spiga 1.13 task = self.getTask(jobsL)
236 spiga 1.9 for job in task.jobs:
237     lines.append(eval(job[attr]))
238 spiga 1.1 return lines
239    
240 spiga 1.12 def queryRunJob(self, attr, jobsL):
241 spiga 1.1 '''
242     Perform a query for a range/all/single job
243     over a generic job attribute
244     '''
245     lines=[]
246 spiga 1.13 task = self.getTask(jobsL)
247 spiga 1.9 for job in task.jobs:
248     common.bossSession.getRunningInstance(job)
249     lines.append(job.runningJob[attr])
250 spiga 1.1 return lines
251 spiga 1.3
252     def queryDistJob(self, attr):
253     '''
254     Returns the list of distinct value for a given job attributes
255     '''
256     distAttr=[]
257 spiga 1.13 try:
258     task = common.bossSession.loadJobDist( 1, attr )
259     except Exception, e :
260     common.logger.debug(3, "Error loading Jobs By distinct Attr : " +str(traceback.format_exc()))
261     raise CrabException('Error loading Jobs By distinct Attr '+str(e))
262    
263 spiga 1.9 for i in task: distAttr.append(eval(i[attr]))
264 spiga 1.3 return distAttr
265    
266 spiga 1.5 def queryDistJob_Attr(self, attr_1, attr_2, list):
267 spiga 1.4 '''
268 spiga 1.9 Returns the list of distinct value for a given job attribute
269 spiga 1.4 '''
270     distAttr=[]
271 spiga 1.13 try:
272     task = common.bossSession.loadJobDistAttr( 1, attr_1, attr_2, list )
273     except Exception, e :
274     common.logger.debug(3, "Error loading Jobs By distinct Attr : " +str(traceback.format_exc()))
275     raise CrabException('Error loading Jobs By distinct Attr '+str(e))
276    
277 spiga 1.9 for i in task: distAttr.append(eval(i[attr_1]))
278 spiga 1.4 return distAttr
279 slacapra 1.6
280 spiga 1.3 def queryAttrJob(self, attr, field):
281     '''
282     Returns the list of jobs matching the given attribute
283     '''
284     matched=[]
285 spiga 1.13 try:
286     task = common.bossSession.loadJobsByAttr(attr )
287     except Exception, e :
288     common.logger.debug(3, "Error loading Jobs By Attr : " +str(traceback.format_exc()))
289     raise CrabException('Error loading Jobs By Attr '+str(e))
290 spiga 1.3 for i in task:
291     matched.append(i[field])
292     return matched
293    
294 spiga 1.7
295     def queryAttrRunJob(self, attr,field):
296     '''
297     Returns the list of jobs matching the given attribute
298     '''
299     matched=[]
300 spiga 1.13 try:
301     task = common.bossSession.loadJobsByRunningAttr(attr)
302     except Exception, e :
303     common.logger.debug(3, "Error loading Jobs By Running Attr : " +str(traceback.format_exc()))
304     raise CrabException('Error loading Jobs By Running Attr '+str(e))
305 spiga 1.7 for i in task:
306     matched.append(i[field])
307     return matched