![]() |
![]() |
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