ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/DBinterface.py
Revision: 1.1
Committed: Mon Mar 3 20:14:43 2008 UTC (17 years, 1 month ago) by spiga
Content type: text/x-python
Branch: MAIN
CVS Tags: CRAB_2_2_0_pre1
Log Message:
new class. Designed to collect methods to intercact with databse bosslite API

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):
17
18 return
19
20 def configureDB(self, cfg_params):
21
22 self.cfg_params = cfg_params
23
24 self.db_type = cfg_params.get("USER.use_db",'SQLite')
25
26 dbname = common.work_space.shareDir()+'crabDB'
27 dbConfig = {'dbName':dbname
28 }
29
30 common.bossSession = BossLiteAPI( self.db_type, dbConfig)
31
32 common.bossSession.installDB('$CRABPRODCOMMONPYTHON/ProdCommon/BossLite/DbObjects/setupDatabase-sqlite.sql')
33
34 return
35
36
37 def createTask_(self, optsToSave):
38 """
39 Task declaration
40 with the first coniguration stuff
41 {'server_name': 'crabas.lnl.infn.it/data1/cms/', '-scheduler': 'glite', '-jobtype': 'cmssw', '-server_mode': '0'}
42
43 """
44 opt={}
45 if optsToSave['server_mode'] == 1: opt['serverName']=optsToSave['server_name']
46 opt['jobType']=optsToSave['jobtype']
47 opt[ 'name']=common.work_space.taskName()
48 task = Task( opt )
49
50 common.bossSession.saveTask( task )
51 #common.bossSession.updateDB( task )
52 return
53
54 def updateTask_(self,optsToSave):
55 """
56 Update task fields
57 """
58 task = common.bossSession.loadTaskByName(common.work_space.taskName() )
59
60 for key in optsToSave.keys():
61 task[key] = optsToSave[key]
62 common.bossSession.updateDB( task )
63 return
64
65 def createJobs_(self, nj):
66 """
67 Fill crab DB with the jobs filed
68 """
69 task = common.bossSession.loadTaskByName(common.work_space.taskName())
70 jobs = []
71 for id in range(nj):
72 parameters = {}
73 parameters['name'] = 'job' + str(id)
74 job = Job(parameters)
75 jobs.append(job)
76 task.addJobs(jobs)
77 common.bossSession.updateDB( task )
78 return
79
80 def updateJob_(self, nj, optsToSave):
81 """
82 Update Job fields
83 """
84 task = common.bossSession.loadTaskByName( common.work_space.taskName())
85 jobs = common.bossSession.loadJob(task['id'],nj+1)
86 for key in optsToSave.keys():
87 jobs[key] = optsToSave[key]
88 common.bossSession.updateDB( jobs )
89 return
90
91 def updateRunJob_(self, nj, optsToSave):
92 """
93 Update Running Job fields
94 """
95 task = common.bossSession.loadTaskByName( common.work_space.taskName())
96 common.bossSession.getRunningInstance(task.jobs[nj])
97 for key in optsToSave.keys():
98 task.jobs[nj].runningJob[key] = optsToSave[key]
99 common.bossSession.updateDB( task )
100 return
101
102 def nJobs(self):
103 task = common.bossSession.loadTaskByName( common.work_space.taskName())
104 return len(task.jobs)
105
106 def dump(self,jobs):
107 """
108 List a complete set of infos for a job/range of jobs
109 """
110 task = common.bossSession.loadTaskByName( common.work_space.taskName())
111
112 njobs = len(jobs)
113 lines=[]
114 header=''
115 # ##query the DB asking the right infos for runningJobs TODO DS
116 # for job in jobs:
117 # ## here the query over runngJobs
118 # pass
119
120
121 # ##Define Header to show and Pass the query results,
122 # ## header and format to displayReport() TODO DS
123 # if njobs == 1: plural = ''
124 # else: plural = 's'
125 # header += 'Listing %d job%s:\n' % (njobs, plural)
126 # header += ' :\n' % (---) ## TODO DS
127
128 # displayReport(header, lines):
129 return
130
131 def queryID(self,server_mode=0):
132 '''
133 Return the taskId if serevr_mode =1
134 Return the joblistId if serevr_mode =0
135 '''
136 header=''
137 lines=[]
138 if server_mode == 1:
139 header= "Task Id = %-40s " %(common.work_space.taskName())
140 else:
141 task = common.bossSession.loadTaskByName(common.work_space.taskName() )
142 for i in range(len(task.job)):
143 common.bossSession.getRunningInstance(task.jobs[i])
144 lines.append(task.jobs[i].runningJob['schedulerId'])
145
146 header+= "Job: %-5s Id = %-40s: \n"
147 displayReport(header,lines)
148 return
149
150 def queryTask(self,attr):
151 '''
152 Perform a query over a generic task attribute
153 '''
154 task = common.bossSession.loadTaskByName( common.work_space.taskName() )
155 return task[attr]
156
157 def queryJob(self, attr, njobs):
158 '''
159 Perform a query for a range/all/single job
160 over a generic job attribute
161 '''
162 lines=[]
163 task = common.bossSession.loadTaskByName( common.work_space.taskName())
164 for i in njobs:
165 jobs = common.bossSession.loadJob(task['id'],i+1)
166 lines.append(task.jobs[i][attr])
167 return lines
168
169 def queryRunJob(self, attr, jobs):
170 '''
171 Perform a query for a range/all/single job
172 over a generic job attribute
173 '''
174 lines=[]
175 task = common.bossSession.loadTaskByName( common.work_space.taskName() )
176 for i in jobs:
177 common.bossSession.getRunningInstance(task.jobs[i])
178 lines.append(task.jobs[i].runningJob[attr])
179 return lines