smesh/src/Tools/Verima/Base/dataBase.py

396 lines
18 KiB
Python
Raw Normal View History

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