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

# 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     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