CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_14/src/CondCore/RegressionTest/python/results_db.py

Go to the documentation of this file.
00001 try:
00002     import cx_Oracle
00003 except ImportError, e:
00004     print "Cannot import cx_Oracle:", e
00005 import common_db
00006 
00007 def printRun( row ):
00008     print '============================================================='
00009     print 'run=%s  date=[%s]  test=%s'%(row[0],row[1],row[2])
00010     print 'cand=[%s on %s]'%(row[3],row[4])
00011 
00012 def printResult( row ):
00013     print '-------------------------------------------------------------'
00014     print 'ref=[%s on %s]'%(row[1],row[2])
00015 
00016 def printStepResult( row ):
00017     step=row[0]
00018     code = row[1]
00019     check = 'v'
00020     marker = '         '
00021     if (code!=0):
00022         marker = ' <----ERROR'
00023         check = 'x'
00024     if (step==None):
00025         step='setting up'
00026     print '%s [%s]=%d %s'%(check,step,code,marker) 
00027 
00028 
00029 class ResultsDB:
00030     def __init__(self, connect):
00031         self.conn = connect
00032 
00033     def create( self ):
00034         curs = self.conn.cursor()
00035         sqlstr = "CREATE TABLE RUN_HEADER (RID NUMBER, RDATE DATE, LABEL VARCHAR2(20), "
00036         sqlstr += "T_RELEASE VARCHAR2(50), T_ARCH VARCHAR2(30), LOG CLOB "
00037         sqlstr += "CONSTRAINT PK_ID0 PRIMARY KEY(RID))"
00038         curs.prepare(sqlstr)
00039         curs.execute(sqlstr)
00040         sqlstr = "CREATE TABLE RUN_RESULT (ID NUMBER, RID NUMBER, R_RELEASE VARCHAR(50), R_ARCH VARCHAR2(30) "
00041         sqlstr += "CONSTRAINT PK_ID PRIMARY KEY(ID))"
00042         curs.prepare(sqlstr)
00043         curs.execute(sqlstr)
00044         sqlstr = "CREATE TABLE RUN_STEP_RESULT (ID NUMBER, STEP_LABEL VARCHAR(100), STATUS NUMBER)"
00045         curs.prepare(sqlstr)
00046         curs.execute(sqlstr)
00047         sqlstr = "CREATE SEQUENCE RUN_ID_SEQ INCREMENT BY 1 START WITH 1"
00048         curs.prepare(sqlstr)
00049         curs.execute(sqlstr)
00050         sqlstr = "CREATE SEQUENCE RES_ID_SEQ INCREMENT BY 1 START WITH 1"
00051         curs.prepare(sqlstr)
00052         curs.execute(sqlstr)
00053         self.conn.commit()
00054         print 'RESULTS DATABASE CREATED'
00055         
00056     def drop( self ):
00057         curs = self.conn.cursor()
00058         sqlstr = "DROP TABLE RUN_HEADER"
00059         curs.prepare(sqlstr)
00060         curs.execute(sqlstr)
00061         sqlstr = "DROP TABLE RUN_RESULT"
00062         curs.prepare(sqlstr)
00063         curs.execute(sqlstr)
00064         sqlstr = "DROP TABLE RUN_STEP_RESULT"
00065         curs.prepare(sqlstr)
00066         curs.execute(sqlstr)
00067         sqlstr = "DROP SEQUENCE RES_ID_SEQ"
00068         curs.prepare(sqlstr)
00069         curs.execute(sqlstr)
00070         self.conn.commit()
00071         print 'RESULT DATABASE DROPPED'
00072         
00073     def read( self ):
00074         curs = self.conn.cursor()
00075         sqlstr = "SELECT RID, TO_CHAR(RDATE, 'DD.MM.YYYY HH24:MI:SS'), LABEL, T_RELEASE, T_ARCH "
00076         sqlstr +="FROM RUN_HEADER ORDER BY RID"
00077         curs.prepare(sqlstr)
00078         curs.execute(sqlstr)
00079         for row in curs:
00080             printRun( row )
00081             self.readRun( row[0] )
00082 
00083     def readRun( self, rid ):
00084         curs = self.conn.cursor()
00085         sqlstr = "SELECT ID, R_RELEASE, R_ARCH "
00086         sqlstr +="FROM RUN_RESULT WHERE RID=:rids ORDER BY ID"
00087         curs.prepare(sqlstr)
00088         curs.execute(sqlstr, rids=rid)
00089         for row in curs:
00090                 printResult( row )
00091                 self.readResults(row[0])
00092                     
00093     def readResults(self, id):
00094         curs = self.conn.cursor()
00095         sqlstr = "SELECT STEP_LABEL, STATUS FROM RUN_STEP_RESULT WHERE ID = :ids"
00096         curs.prepare(sqlstr)
00097         curs.execute(sqlstr, ids = id)
00098         self.conn.commit()
00099         for row in curs:
00100             printStepResult( row )
00101 
00102     def readSelection( self, runId, label, trel, tarch, full  ):
00103         curs = self.conn.cursor()
00104         sqlstr = "SELECT RID, TO_CHAR(RDATE, 'DD.MM.YYYY HH24:MI:SS'), LABEL, T_RELEASE, T_ARCH, LOG "
00105         sqlstr +="FROM RUN_HEADER "
00106         putAnd = False
00107         if( runId != None ):
00108             sqlstr += "WHERE RID="+runId
00109             putAnd = True
00110         if( label != None ):
00111             if( putAnd == True ):
00112                 sqlstr += " AND "
00113             else:
00114                 sqlstr += "WHERE "
00115             sqlstr += "LABEL='"+label+"'"
00116             putAnd = True
00117         if( trel != None ):
00118             if( putAnd == True ):
00119                 sqlstr += " AND "
00120             else:
00121                 sqlstr += "WHERE "
00122             sqlstr += "T_RELEASE='"+trel+"'"
00123             putAnd = True
00124         if( tarch != None ):
00125             if( putAnd == True ):
00126                 sqlstr += " AND "
00127             else:
00128                 sqlstr += "WHERE "
00129             sqlstr += "T_ARCH='"+tarch+"'"
00130             putAnd = True
00131             sqlstr += " ORDER BY RID"
00132         print sqlstr
00133         curs.prepare(sqlstr)
00134         curs.execute(sqlstr)
00135         for row in curs:
00136             print '###########'
00137             print row[0]
00138             printRun( row )
00139             self.readRun( row[0] )
00140             if( full == True ):
00141                 if ( row[8]!=None ): 
00142                     print row[8].read()
00143 
00144     def deleteRun( self,rid ):
00145         curs = self.conn.cursor()
00146         sqlstr = "SELECT ID FROM RUN_RESULT WHERE RID = :rids"
00147         curs.prepare(sqlstr)
00148         curs.execute(sqlstr, rids=rid)
00149         for row in curs:
00150             self.deleteResultSteps( row[0] )
00151         sqlstr = "DELETE FROM RUN_RESULT WHERE RID = :rids"
00152         curs.prepare(sqlstr)
00153         curs.execute(sqlstr, rids=rid)
00154         sqlstr = "DELETE FROM RUN_HEADER WHERE RID = :rids"
00155         curs.prepare(sqlstr)
00156         curs.execute(sqlstr, rids=rid)
00157         self.conn.commit()         
00158 
00159     def deleteResultSteps( self, id ):
00160         curs = self.conn.cursor()
00161         sqlstr = "DELETE FROM RUN_STEP_RESULT WHERE ID=:ids"
00162         curs.prepare(sqlstr)
00163         curs.execute(sqlstr, ids=id)
00164                 
00165     def writeResult(self, runID, timeStamp, match, resTags):
00166         curs = self.conn.cursor()
00167         sqlstr = "SELECT RID FROM RUN_HEADER WHERE RID = :rid"
00168         curs.prepare(sqlstr)
00169         curs.execute(sqlstr, rid = runID)
00170         foundRun = False
00171         for row in curs:
00172             foundRun = True
00173         if( foundRun == False ):
00174             sqlstr = "INSERT INTO RUN_HEADER(RID, RDATE, LABEL, T_RELEASE, T_ARCH) VALUES (:rid, :ts, :labl, :trel, :tarc)"
00175             curs.prepare(sqlstr)
00176             curs.execute(sqlstr, rid = runID, ts=timeStamp, labl=match[0], trel = match[1], tarc = match[2])    
00177         id = self.getNewResId()  
00178         sqlstr = "INSERT INTO RUN_RESULT(ID, RID, R_RELEASE, R_ARCH)"
00179         sqlstr +="VALUES(:ids, :rid, :rrel, :rarc)"
00180         curs.prepare(sqlstr)
00181         curs.execute(sqlstr, ids=id, rid = runID, rrel = match[3], rarc = match[4])
00182         self.conn.commit()
00183         for i in range(5, len(match)):
00184             if resTags[i-5] != "%NONE":
00185                 self.writeStepResult(id, resTags[i-5], match[i])
00186 
00187     def writeStepResult(self, id, step_label, status):
00188         curs = self.conn.cursor()
00189         sqlstr = "INSERT INTO RUN_STEP_RESULT(ID, STEP_LABEL, STATUS)"
00190         sqlstr +="VALUES(:ids, :labl, :stat)"
00191         curs.prepare(sqlstr)
00192         curs.execute(sqlstr, ids=id, labl=step_label, stat = status)
00193         self.conn.commit()
00194 
00195     def addResultLog(self, runID, logStr):
00196         curs = self.conn.cursor()
00197         sqlstr = "UPDATE RUN_HEADER SET LOG = :lstr WHERE RID = :rid"
00198         curs.prepare(sqlstr)
00199         curs.execute(sqlstr, lstr = logStr, rid=runID)
00200         self.conn.commit()
00201 
00202     def checkResult( self, runID ):
00203         curs = self.conn.cursor()
00204         sqlstr = "SELECT ID FROM RUN_RESULT WHERE RID=:rid"
00205         curs.prepare(sqlstr)
00206         curs.execute(sqlstr, rid=runID)
00207         for row in curs:
00208             innercur = self.conn.cursor()
00209             isqlstr = "SELECT STATUS FROM RUN_STEP_RESULT WHERE ID= :ids"
00210             innercur.prepare(isqlstr)
00211             innercur.execute(isqlstr, ids=row[0])
00212             for irow in innercur:
00213                 if irow[0] != 0:
00214                     return False
00215         return True
00216 
00217     def getNewResId( self ):
00218         curs = self.conn.cursor()
00219         sqlstr = "SELECT RES_ID_SEQ.NextVal FROM DUAL"
00220         curs.prepare(sqlstr)
00221         curs.execute(sqlstr)
00222         for row in curs:
00223             return row[0]
00224 
00225     def getNewRunId( self ):
00226         curs = self.conn.cursor()
00227         sqlstr = "SELECT RUN_ID_SEQ.NextVal FROM DUAL"
00228         curs.prepare(sqlstr)
00229         curs.execute(sqlstr)
00230         for row in curs:
00231             return row[0]
00232 
00233     def getDate( self ):
00234         curs = self.conn.cursor()
00235         sqlstr = "SELECT SYSTIMESTAMP AS \"NOW\" FROM DUAL"
00236         curs.prepare(sqlstr)
00237         curs.execute(sqlstr)
00238         for row in curs:
00239                 return row[0]
00240