ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/DBinterface.py
Revision: 1.6
Committed: Fri Mar 7 17:25:23 2008 UTC (17 years, 1 month ago) by slacapra
Content type: text/x-python
Branch: MAIN
Changes since 1.5: +9 -4 lines
Log Message:
initial mods to have LSF working with BossLite: still way to go...

File Contents

# Content
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
7 from ProdCommon.BossLite.API.BossLiteAPI import BossLiteAPI
8
9
10 from ProdCommon.BossLite.DbObjects.Job import Job
11 from ProdCommon.BossLite.DbObjects.Task import Task
12 from ProdCommon.BossLite.DbObjects.RunningJob import RunningJob
13
14
15 class DBinterface:
16 def __init__(self, cfg_params):
17
18 self.cfg_params = cfg_params
19
20 self.db_type = cfg_params.get("USER.use_db",'SQLite')
21 return
22
23
24 def configureDB(self):
25
26 dbname = common.work_space.shareDir()+'crabDB'
27 dbConfig = {'dbName':dbname
28 }
29
30 common.bossSession = BossLiteAPI( self.db_type, dbConfig)
31 common.bossSession.installDB('$CRABPRODCOMMONPYTHON/ProdCommon/BossLite/DbObjects/setupDatabase-sqlite.sql')
32
33 return
34
35 def loadDB(self):
36
37 dbname = common.work_space.shareDir()+'crabDB'
38 dbConfig = {'dbName':dbname
39 }
40 common.bossSession = BossLiteAPI( self.db_type, dbConfig)
41
42 return
43
44 def getTask(self):
45
46 self.task = common.bossSession.loadTaskByID(1)
47 return self.task
48
49 def getJob(self, n):
50
51 self.job = common.bossSession.loadJobByID(1,n)
52 return self.job
53
54
55 def createTask_(self, optsToSave):
56 """
57 Task declaration
58 with the first coniguration stuff
59 {'server_name': 'crabas.lnl.infn.it/data1/cms/', '-scheduler': 'glite', '-jobtype': 'cmssw', '-server_mode': '0'}
60
61 """
62 opt={}
63 opt['serverName']=optsToSave.get('server_name',0)
64 opt['jobType']=optsToSave['jobtype']
65 opt[ 'name']=common.work_space.taskName()
66 task = Task( opt )
67
68 common.bossSession.saveTask( task )
69 #common.bossSession.updateDB( task )
70 return
71
72 def updateTask_(self,optsToSave):
73 """
74 Update task fields
75 """
76 #task = common.bossSession.loadTaskByName(common.work_space.taskName() )
77 task = common.bossSession.loadTaskByID(1)
78
79 for key in optsToSave.keys():
80 task[key] = optsToSave[key]
81 common.bossSession.updateDB( task )
82 return
83
84 def createJobs_(self, nj):
85 """
86 Fill crab DB with the jobs filed
87 """
88 #task = common.bossSession.loadTaskByName(common.work_space.taskName())
89 task = common.bossSession.loadTaskByID(1)
90 jobs = []
91 for id in range(nj):
92 parameters = {}
93 parameters['name'] = id
94 job = Job(parameters)
95 jobs.append(job)
96 task.addJobs(jobs)
97 common.bossSession.updateDB( task )
98 return
99
100 def updateJob_(self, nj, optsToSave):
101 """
102 Update Job fields
103 """
104 task = common.bossSession.loadTaskByID(1)
105 #task = common.bossSession.loadTaskByName( common.work_space.taskName())
106 jobs = common.bossSession.loadJob(task['id'],nj+1)
107 for key in optsToSave.keys():
108 jobs[key] = optsToSave[key]
109 common.bossSession.updateDB( jobs )
110 return
111
112 def updateRunJob_(self, nj, optsToSave):
113 """
114 Update Running Job fields
115 """
116 task = common.bossSession.loadTaskByID(1)
117 #task = common.bossSession.loadTaskByName( common.work_space.taskName())
118 common.bossSession.getRunningInstance(task.jobs[nj-1])
119 for key in optsToSave.keys():
120 task.jobs[nj-1].runningJob[key] = optsToSave[key]
121 common.bossSession.updateDB( task )
122 return
123
124 def nJobs(self):
125
126 task = common.bossSession.loadTaskByID(1)
127 #task = common.bossSession.loadTaskByName( common.work_space.taskName())
128 return len(task.jobs)
129
130 def dump(self,jobs):
131 """
132 List a complete set of infos for a job/range of jobs
133 """
134 task = common.bossSession.loadTaskByID(1)
135 #task = common.bossSession.loadTaskByName( common.work_space.taskName())
136
137 njobs = len(jobs)
138 lines=[]
139 header=''
140 # ##query the DB asking the right infos for runningJobs TODO DS
141 # for job in jobs:
142 # ## here the query over runngJobs
143 # pass
144
145
146 # ##Define Header to show and Pass the query results,
147 # ## header and format to displayReport() TODO DS
148 # if njobs == 1: plural = ''
149 # else: plural = 's'
150 # header += 'Listing %d job%s:\n' % (njobs, plural)
151 # header += ' :\n' % (---) ## TODO DS
152
153 # displayReport(header, lines):
154 return
155
156 def queryID(self,server_mode=0):
157 '''
158 Return the taskId if serevr_mode =1
159 Return the joblistId if serevr_mode =0
160 '''
161 header=''
162 lines=[]
163 task = common.bossSession.loadTaskByID(1)
164 if server_mode == 1:
165 header= "Task Id = %-40s " %(task['name'])
166 else:
167 # task = common.bossSession.loadTaskByName(common.work_space.taskName() )
168 for i in range(len(task.job)):
169 common.bossSession.getRunningInstance(task.jobs[i])
170 lines.append(task.jobs[i].runningJob['schedulerId'])
171
172 header+= "Job: %-5s Id = %-40s: \n"
173 displayReport(header,lines)
174 return
175
176 def queryTask(self,attr):
177 '''
178 Perform a query over a generic task attribute
179 '''
180 task = common.bossSession.loadTaskByID(1)
181 return task[attr]
182
183 def queryJob(self, attr, njobs):
184 '''
185 Perform a query for a range/all/single job
186 over a generic job attribute
187 '''
188 lines=[]
189 task = common.bossSession.loadTaskByID(1)
190 #task = common.bossSession.loadTaskByName( common.work_space.taskName())
191 for i in njobs:
192 jobs = common.bossSession.loadJob(task['id'],i+1)
193 lines.append(task.jobs[i][attr])
194 return lines
195
196 def queryRunJob(self, attr, jobs):
197 '''
198 Perform a query for a range/all/single job
199 over a generic job attribute
200 '''
201 lines=[]
202 task = common.bossSession.loadTaskByID(1)
203 # task = common.bossSession.loadTaskByName( common.work_space.taskName() )
204 for i in jobs:
205 common.bossSession.getRunningInstance(task.jobs[i-1])
206 lines.append(task.jobs[i-1].runningJob[attr])
207 return lines
208
209 def queryDistJob(self, attr):
210 '''
211 Returns the list of distinct value for a given job attributes
212 '''
213 distAttr=[]
214 task = common.bossSession.loadJobDist( 1, attr )
215 for i in task: distAttr.append(i[attr])
216 return distAttr
217
218 def queryDistJob_Attr(self, attr_1, attr_2, list):
219 '''
220 Returns the list of distinct value for a given job attributes
221 '''
222 distAttr=[]
223 task = common.bossSession.loadJobDistAttr( 1, attr_1, attr_2, list )
224 for i in task: distAttr.append(i[attr_1])
225 return distAttr
226
227 def queryAttrJob(self, attr, field):
228 '''
229 Returns the list of jobs matching the given attribute
230 '''
231 matched=[]
232 task = common.bossSession.loadJobsByAttr(attr )
233 for i in task:
234 matched.append(i[field])
235 return matched
236