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

# 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    
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 spiga 1.2 def __init__(self, cfg_params):
17 spiga 1.1
18 spiga 1.2 self.cfg_params = cfg_params
19    
20     self.db_type = cfg_params.get("USER.use_db",'SQLite')
21 spiga 1.1 return
22    
23    
24 spiga 1.2 def configureDB(self):
25 spiga 1.1
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 spiga 1.2 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 spiga 1.4
44     def getTask(self):
45    
46     self.task = common.bossSession.loadTaskByID(1)
47     return self.task
48 spiga 1.2
49 slacapra 1.6 def getJob(self, n):
50    
51     self.job = common.bossSession.loadJobByID(1,n)
52     return self.job
53 spiga 1.2
54 spiga 1.1
55     def createTask_(self, optsToSave):
56     """
57     Task declaration
58     with the first coniguration stuff
59 slacapra 1.6 {'server_name': 'crabas.lnl.infn.it/data1/cms/', '-scheduler': 'glite', '-jobtype': 'cmssw', '-server_mode': '0'}
60 spiga 1.1
61     """
62     opt={}
63 slacapra 1.6 opt['serverName']=optsToSave.get('server_name',0)
64 spiga 1.1 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 spiga 1.2 #task = common.bossSession.loadTaskByName(common.work_space.taskName() )
77     task = common.bossSession.loadTaskByID(1)
78 spiga 1.1
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 spiga 1.2 #task = common.bossSession.loadTaskByName(common.work_space.taskName())
89     task = common.bossSession.loadTaskByID(1)
90 spiga 1.1 jobs = []
91     for id in range(nj):
92     parameters = {}
93 slacapra 1.6 parameters['name'] = id
94 spiga 1.1 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 spiga 1.2 task = common.bossSession.loadTaskByID(1)
105     #task = common.bossSession.loadTaskByName( common.work_space.taskName())
106 spiga 1.1 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 spiga 1.2 task = common.bossSession.loadTaskByID(1)
117     #task = common.bossSession.loadTaskByName( common.work_space.taskName())
118 spiga 1.5 common.bossSession.getRunningInstance(task.jobs[nj-1])
119 spiga 1.1 for key in optsToSave.keys():
120 spiga 1.5 task.jobs[nj-1].runningJob[key] = optsToSave[key]
121 spiga 1.1 common.bossSession.updateDB( task )
122     return
123    
124     def nJobs(self):
125 spiga 1.2
126     task = common.bossSession.loadTaskByID(1)
127     #task = common.bossSession.loadTaskByName( common.work_space.taskName())
128 spiga 1.1 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 spiga 1.2 task = common.bossSession.loadTaskByID(1)
135     #task = common.bossSession.loadTaskByName( common.work_space.taskName())
136 spiga 1.1
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 spiga 1.2 task = common.bossSession.loadTaskByID(1)
164 spiga 1.1 if server_mode == 1:
165 spiga 1.2 header= "Task Id = %-40s " %(task['name'])
166 spiga 1.1 else:
167 spiga 1.2 # task = common.bossSession.loadTaskByName(common.work_space.taskName() )
168 spiga 1.1 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 spiga 1.2 task = common.bossSession.loadTaskByID(1)
181 spiga 1.1 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 spiga 1.2 task = common.bossSession.loadTaskByID(1)
190     #task = common.bossSession.loadTaskByName( common.work_space.taskName())
191 spiga 1.1 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 spiga 1.2 task = common.bossSession.loadTaskByID(1)
203     # task = common.bossSession.loadTaskByName( common.work_space.taskName() )
204 spiga 1.1 for i in jobs:
205 spiga 1.5 common.bossSession.getRunningInstance(task.jobs[i-1])
206     lines.append(task.jobs[i-1].runningJob[attr])
207 spiga 1.1 return lines
208 spiga 1.3
209     def queryDistJob(self, attr):
210     '''
211     Returns the list of distinct value for a given job attributes
212     '''
213     distAttr=[]
214 spiga 1.5 task = common.bossSession.loadJobDist( 1, attr )
215 spiga 1.3 for i in task: distAttr.append(i[attr])
216     return distAttr
217    
218 spiga 1.5 def queryDistJob_Attr(self, attr_1, attr_2, list):
219 spiga 1.4 '''
220     Returns the list of distinct value for a given job attributes
221     '''
222     distAttr=[]
223 slacapra 1.6 task = common.bossSession.loadJobDistAttr( 1, attr_1, attr_2, list )
224 spiga 1.4 for i in task: distAttr.append(i[attr_1])
225     return distAttr
226 slacapra 1.6
227 spiga 1.3 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