--- /dev/null
+# -*- coding: utf-8 -*-
+
+import os
+import datetime
+import sys
+
+from PyQt4 import QtSql, QtCore
+from tableMaillages import TableMaillages
+from tableMailleurs import TableMailleurs
+from tableMachines import TableMachines
+from tableVersions import TableVersions
+from tableGroupesRef import TableGroupesRef
+from tableGroupes import TableGroupes
+from tableMailles import TableMailles
+from tableTailles import TableTailles
+from tableRatios import TableRatios
+from tablePerfs import TablePerfs
+from Stats.job import Job
+from Stats.ref import Ref
+from CreeDocuments.jobHtml import Document
+
+
+class Base:
+ def __init__(self,file):
+ self.db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
+ self.db.setDatabaseName(file)
+ self.db.setHostName("localhost");
+ self.db.setUserName("");
+ self.db.setPassword("")
+ if not self.db.open():
+ print(self.db.lastError().text())
+ else:
+ print "dataBase Open"
+ self.file=file
+
+ def create(self):
+ self.maTableMailleurs=TableMailleurs()
+ self.maTableMailleurs.createSqlTable()
+ self.maTableMachines=TableMachines()
+ self.maTableMachines.createSqlTable()
+ self.maTableVersions=TableVersions()
+ self.maTableVersions.createSqlTable()
+ self.maTableMaillages=TableMaillages()
+ self.maTableMaillages.createSqlTable()
+ self.maTableGroupesRef=TableGroupesRef()
+ self.maTableGroupesRef.createSqlTable()
+ self.maTablePerfs=TablePerfs()
+ self.maTablePerfs.createSqlTable()
+ self.maTableMailles=TableMailles()
+ self.maTableMailles.createSqlTable()
+ self.maTableTailles=TableTailles()
+ self.maTableTailles.createSqlTable()
+ self.maTableGroupes=TableGroupes()
+ self.maTableGroupes.createSqlTable()
+ self.maTableRatios=TableRatios()
+ self.maTableRatios.createSqlTable()
+
+ def initialise(self):
+ self.maTableMaillages=TableMaillages()
+ self.maTableMailleurs=TableMailleurs()
+ self.maTableVersions=TableVersions()
+ self.maTableMachines=TableMachines()
+ self.maTableMailles=TableMailles()
+ self.maTableTailles=TableTailles()
+ self.maTableGroupes=TableGroupes()
+ self.maTableGroupesRef=TableGroupesRef()
+ self.maTablePerfs=TablePerfs()
+ self.maTableRatios=TableRatios()
+
+ def remplit(self):
+ self.maTableMailleurs.remplit()
+ self.maTableMaillages.remplit()
+ self.maTableVersions.remplit()
+ #self.maTableVersions.creeVersion()
+ self.maTableMachines.creeMachine()
+ self.maTableGroupesRef.remplit()
+
+ def close(self):
+ self.db.close()
+
+ def exportToCSV(self,partiel):
+ aujourdhui=datetime.date.today()
+ monFolder="ExportDB"+str(aujourdhui)
+ try :
+ os.mkdir(monFolder)
+ except :
+ pass
+ self.maTableMachines.exportToCSV()
+ self.maTableMailles.exportToCSV()
+ self.maTableTailles.exportToCSV()
+ self.maTableGroupes.exportToCSV()
+ self.maTablePerfs.exportToCSV()
+ self.maTableRatios.exportToCSV()
+ if partiel==True: return
+ self.maTableMailleurs.exportToCSV()
+ self.maTableVersions.exportToCSV()
+ self.maTableMaillages.exportToCSV()
+ self.maTableMachines.exportToCSV()
+ self.maTableGroupesRef.exportToCSV()
+
+ def importFromCSV(self,folder,partiel,force):
+ if partiel==False:
+ self.maTableMailleurs.importFromCSV(folder,force)
+ self.maTableVersions.importFromCSV(folder,force)
+ self.maTableMaillages.importFromCSV(folder,force)
+ self.maTableGroupesRef.importFromCSV(folder,force)
+ self.maTableMachines.importFromCSV(folder,force)
+ self.maTableMailles.importFromCSV(folder,force)
+ self.maTableGroupes.importFromCSV(folder,force)
+ self.maTablePerfs.importFromCSV(folder,force)
+ self.maTableRatios.importFromCSV(folder,force)
+ self.maTableGroupesRef.importFromCSV(folder,force)
+
+ def Structure(self):
+ # jamais appelee. juste pour memoire
+ texteQuery='select * from sqlite_master;'
+ maQuery=QSqlQuery()
+ return maQuery.exec_(texteQuery)
+
+ def passeJobs(self,all,salomePath,version,force,listeMaillage):
+ if all==True: paramMaillage=self.maTableMaillages.construitListeMaillages()
+ else : paramMaillage=self.maTableMaillages.verifieListeMaillages(listeMaillage)
+ # paramMaillage=(( id, script, fichier med),)
+
+ #version="Salome7.3"
+ bOk,versionId,versionName = self.maTableVersions.chercheVersion(version)
+ if bOk==False:
+ self.maTableVersions.creeVersion(version)
+ print "nouvelle Version enregistree dans la base"
+ bOk,versionId,versionName = self.maTableVersions.chercheVersion(version)
+ if bOk==False:
+ print "Impossible de creer la version"
+ return
+
+ bOk,nomMachine = self.maTableMachines.chercheMachine()
+ if bOk==False:
+ self.maTableMachines.creeMachine()
+ print "enregistrement de la machine dans la table des machines"
+ bOk,nomMachine = self.maTableMachines.chercheMachine()
+ if bOk==False:
+ print "Impossible de creer la version"
+ return
+
+
+ for params in paramMaillage:
+
+ print "___________________________________________"
+ print ""
+ print " Job : ", params[1]
+ print " Version de salome : ", versionName
+
+ #recherche si le Job a deja ete passe
+ if self.maTablePerfs.getVal(params[0],versionId,nomMachine) !=None and force==False:
+ print "job numero: " , params[0], "deja passe"
+ print ""
+ print "___________________________________________"
+ continue
+
+ # recherche de la reference du Job
+ maRef=Ref(self,params[0],versionId,nomMachine)
+ idVersionRef=self.maTableVersions.getVersionRef()
+ idJob=params[0]
+ if maRef.existe==False and idVersionRef != versionId :
+ print "pas de reference pour le job : ", params[0]
+ print "pas de passage du job",
+ continue
+
+
+ mesGroupesRef=self.maTableGroupesRef.getVals(idJob)
+ fichierGroupesRef=str(params[2]).replace('.med','_groupesRef.res')
+ from Stats.utiles import writeFile
+ writeFile(fichierGroupesRef,",".join(mesGroupesRef))
+ monjob=Job(params,salomePath,versionId,nomMachine,mesGroupesRef)
+ print ""
+ print " Debut d execution"
+ monjob.execute()
+
+ # remplit Perfs
+ self.maTablePerfs.insereOuRemplaceLigne((idJob,versionId,nomMachine,int(monjob.getCPU()),0),False)
+ if idVersionRef != versionId :
+ stop=maRef.verifieCpu(monjob.getCPU())
+ if stop :
+ print " Arret "
+ print " Pb CPU: Seuil Atteint sur job : ", params[0]
+ print "________________________________________"
+
+ # remplit la table Mailles
+ listeColonnes,listeValues=monjob.getStatSurMailles()
+ print listeColonnes,listeValues
+ i=0
+ for col in listeColonnes :
+ lVal=[idJob,versionId,nomMachine,col]+[listeValues[i]]
+ lVal=tuple(lVal)
+ if str(listeValues[i]) != str(0): self.maTableMailles.insereOuRemplaceLigne(lVal,False)
+ i+=1
+ if idVersionRef != versionId :
+ stop=maRef.verifieMailles(listeValues,listeColonnes)
+ if stop :
+ print " Arret "
+ print " Pb sur le nombre de Maille : Seuil Atteint sur job : ", params[0]
+ print "_________________________________________________________________"
+ #exit()
+ else :
+ print "verification du Nb de Mailles effectuee"
+
+ # remplit la table Tailles
+ listeValues=monjob.getStatSurTailles()
+ lVal=[params[0],versionId,nomMachine]+listeValues
+ self.maTableTailles.insereOuRemplaceLigne(tuple(lVal),False)
+ if idVersionRef != versionId :
+ stop=maRef.verifieTailles(lVal)
+ if stop :
+ print " Arret "
+ print " Pb sur la taille des mailles : Seuil Atteint sur job : ", params[0]
+ print "_________________________________________________________________"
+ #exit()
+ else :
+ print "verification du Nb de Mailles effectuee"
+
+
+ # remplit la table Ratio
+ maDim=self.maTableMaillages.getVal(params[0],'dimension')
+ if maDim == 3 :
+ listeValues=monjob.getStatSurRatios()
+ lVal=[params[0],versionId,nomMachine]+listeValues
+ self.maTableRatios.insereOuRemplaceLigne(tuple(lVal),False)
+ if idVersionRef != versionId :
+ stop=maRef.verifieRatios(lVal)
+ if stop :
+ print " Arret "
+ print " Pb sur la taille des mailles : Seuil Atteint sur job : ", params[0]
+ print "_________________________________________________________________"
+ #exit()
+ else :
+ print "verification du Nb de Mailles effectuee"
+
+ # remplit les Groupes
+ for groupe in mesGroupesRef:
+ listeColonnes,listeValues=monjob.getStatSurGroupes(groupe)
+ i=0
+ for col in listeColonnes :
+ lVal=[groupe,params[0],versionId,nomMachine,col]+[listeValues[i]]
+ lVal=tuple(lVal)
+ if str(listeValues[i]) != str(0): self.maTableGroupes.insereOuRemplaceLigne(lVal,False)
+ i=i+1
+ if idVersionRef != versionId :
+ stop=maRef.verifieMaillesPourGroupes(groupe,listeValues,listeColonnes)
+ stop=0
+ if stop :
+ print " Arret "
+ print " Pb sur le nombre de Maille : Seuil Atteint sur job : ", params[0]
+ print "_________________________________________________________________"
+ #exit()
+ print "verification du Nb de Mailles sur les groupes reference effectuee"
+ print "_________________________________________________________________"
+
+
+ def compare(self,version,versionRef,fichier):
+ print "_________________________________________________________________"
+ print "Generation du rapport de comparaison"
+ bOk,versionId,versionName = self.maTableVersions.chercheVersion(version)
+ if bOk==False :
+ print "version ", version , " inconnue dans la base"
+ exit()
+ print "Version a comparer : ", versionName
+ versionCompName=versionName
+ versionCompId=versionId
+
+ if versionRef==None:
+ idVersionRef=self.maTableVersions.getVersionRef()
+ bOk,versionId,versionName = self.maTableVersions.chercheVersion(idVersionRef)
+ if bOk==False :
+ print "version de référence ", versionRef , " inconnue dans la base"
+ versionRefName=versionName
+ versionRefId=versionId
+ print "Version de comparaison : ", versionRefName
+
+ bOk,nomMachine = self.maTableMachines.chercheMachine()
+ monDocument=Document()
+ monDocument.initEntete(versionName, versionRefName,nomMachine)
+ mailleursIdListe,mailleursNameListe=self.maTableMailleurs.getTous()
+
+ allEntitySurMaille=self.maTableMailles.getAllEntity()
+ allEntitySurGroupe=self.maTableGroupes.getAllEntity()
+ # Boucle sur les mailleurs
+ for indexMailleur in range(len(mailleursNameListe)):
+ monDocument.initMailleur(mailleursNameListe[indexMailleur])
+ l1,l2,l3,l4,l5,l6=self.maTableMaillages.getTousPourMaillage(mailleursIdListe[indexMailleur])
+ maillagesIdListe=l1
+ maillagesNameListe=l2
+ maillagesSeuilCPUListe=l3
+ maillagesSeuilRatioListe=l4
+ maillagesSeuilTailleListe=l5
+ maillagesSeuilNbMailleListe=l6
+ dicoMaillage={}
+ # Boucle sur les maillages
+ for indexMaillage in range(len(maillagesNameListe)):
+ idMaillage=maillagesIdListe[indexMaillage]
+ dicoMaillage["NOM"]=maillagesNameListe[indexMaillage]
+ dicoMaillage["NBCPU"]=self.maTablePerfs.getVal(idMaillage,versionCompId,nomMachine)
+ dicoMaillage["REFCPU"]=self.maTablePerfs.getVal(idMaillage,versionRefId,nomMachine)
+ dicoMaillage["DIFCPU"],dicoMaillage["DIFREL"],dicoMaillage["WARNING"]=self.calculDiffCPU(dicoMaillage["NBCPU"],dicoMaillage["REFCPU"],maillagesSeuilCPUListe[indexMaillage])
+
+ dicoMaillage["RMAX"]=self.maTableRatios.getVal(idMaillage,versionCompId,nomMachine,'RatioMax')
+ dicoMaillage["RMAXREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,nomMachine,'RatioMax')
+ dicoMaillage["RMIN"]=self.maTableRatios.getVal(idMaillage,versionCompId,nomMachine,'RatioMin')
+ dicoMaillage["RMINREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,nomMachine,'RatioMin')
+ dicoMaillage["RMOY"]=self.maTableRatios.getVal(idMaillage,versionCompId,nomMachine,'Moyenne')
+ dicoMaillage["RMOYREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,nomMachine,'Moyenne')
+ dicoMaillage["R1Q"]=self.maTableRatios.getVal(idMaillage,versionCompId,nomMachine,'Q1')
+ dicoMaillage["R1QREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,nomMachine,'Q1')
+ dicoMaillage["RMED"]=self.maTableRatios.getVal(idMaillage,versionCompId,nomMachine,'Mediane')
+ dicoMaillage["RMEDREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,nomMachine,'Mediane')
+ dicoMaillage["R3Q"]=self.maTableRatios.getVal(idMaillage,versionCompId,nomMachine,'Q3')
+ dicoMaillage["R3QREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,nomMachine,'Q3')
+
+ dicoMaillage["TMAX"]=self.maTableTailles.getVal(idMaillage,versionCompId,nomMachine,'TailleMax')
+ dicoMaillage["TMAXREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,nomMachine,'TailleMax')
+ dicoMaillage["TMIN"]=self.maTableTailles.getVal(idMaillage,versionCompId,nomMachine,'TailleMin')
+ dicoMaillage["TMINREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,nomMachine,'TailleMin')
+ dicoMaillage["TMOY"]=self.maTableTailles.getVal(idMaillage,versionCompId,nomMachine,'Moyenne')
+ dicoMaillage["TMOYREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,nomMachine,'Moyenne')
+ dicoMaillage["T1Q"]=self.maTableTailles.getVal(idMaillage,versionCompId,nomMachine,'Q1')
+ dicoMaillage["T1QREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,nomMachine,'Q1')
+ dicoMaillage["TMED"]=self.maTableTailles.getVal(idMaillage,versionCompId,nomMachine,'Mediane')
+ dicoMaillage["TMEDREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,nomMachine,'Mediane')
+ dicoMaillage["T3Q"]=self.maTableTailles.getVal(idMaillage,versionCompId,nomMachine,'Q3')
+ dicoMaillage["T3QREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,nomMachine,'Q3')
+
+ monDocument.initJob(dicoMaillage)
+
+ i=0
+ dico={}
+ dico["TITRE"]="Nombre de Mailles dans le maillage entier"
+ for nomColonne in allEntitySurMaille:
+ val=self.maTableMailles.getVal(idMaillage,versionCompId,nomMachine,nomColonne)
+ valRef=self.maTableMailles.getVal(idMaillage,versionRefId,nomMachine,nomColonne)
+ if val==0 and valRef==0 : continue
+ i=i+1
+ #print nomColonne;print val; print valRef
+ cMAIL="MAIL"+str(i); cREF="REF"+str(i)
+ cNB="NB"+str(i); cDIF="DIF"+str(i); cREL="REL"+str(i)
+ cWARN="WARN"+str(i);
+ dico[cMAIL]=nomColonne
+ dico[cREF]=valRef
+ dico[cNB]=val
+ dico[cDIF],dico[cREL],dico[cWARN]=self.calculDiff(val,valRef,maillagesSeuilNbMailleListe[indexMaillage])
+ monDocument.initMaille(dico,i)
+
+ # Boucle sur les groupes du maillage
+ mesGroupesRef=self.maTableGroupesRef.getVals(idMaillage)
+ if mesGroupesRef==[] : monDocument.addNoGroup()
+ for groupeId in mesGroupesRef:
+ i=0
+ dico={}
+ dico["TITRE"]="Nombre de Mailles dans le groupe "+groupeId
+ for nomColonne in allEntitySurGroupe:
+ val=self.maTableGroupes.getVal(groupeId,idMaillage,versionCompId,nomMachine,nomColonne)
+ valRef=self.maTableGroupes.getVal(groupeId,idMaillage,versionRefId,nomMachine,nomColonne)
+ if val==0 and valRef==0 : continue
+ i=i+1
+ cMAIL="MAIL"+str(i); cREF="REF"+str(i)
+ cNB="NB"+str(i); cDIF="DIF"+str(i); cREL="REL"+str(i)
+ cWARN="WARN"+str(i);
+ #print nomColonne," ",val," ",valRef
+ dico[cMAIL]=nomColonne
+ dico[cREF]=valRef
+ dico[cNB]=val
+ dico[cDIF],dico[cREL],dico[cWARN]=self.calculDiff(val,valRef,maillagesSeuilNbMailleListe[indexMaillage])
+ monDocument.initMaille(dico,i)
+
+ monDocument.creeDocument(fichier)
+
+ def calculDiffCPU(self,nb,nbRef,seuil):
+ # different de calculDiff : si on est inferieur a la reference
+ # on n a pas de warning
+ diff=nb-nbRef
+ diffRel=((nb-nbRef)*100)/(nbRef*1.00)
+ if diffRel > seuil :
+ warning="plus de "+ str(seuil) + "% de difference CPU"
+ else :
+ warning=""
+ diffRelStr=str(diffRel)+"%"
+ return diff,diffRelStr,warning
+
+ def calculDiff(self,nb,nbRef,seuil):
+ diff=nb-nbRef
+ diffRel=((nb-nbRef)*100)/(nbRef*1.00)
+ if diffRel > seuil or (-1*diffRel) > seuil :
+ warning="difference superieure a "+ str(seuil) + "%"
+ else :
+ warning=""
+ diffRelStr=str(diffRel)+"%"
+ return diff,diffRelStr,warning
+