1 # -*- coding: utf-8 -*-
7 from PyQt4 import QtSql, QtCore
8 from tableMaillages import TableMaillages
9 from tableMailleurs import TableMailleurs
10 from tableMachines import TableMachines
11 from tableVersions import TableVersions
12 from tableGroupesRef import TableGroupesRef
13 from tableGroupes import TableGroupes
14 from tableMailles import TableMailles
15 from tableTailles import TableTailles
16 from tableRatios import TableRatios
17 from tablePerfs import TablePerfs
18 from Stats.job import Job
19 from Stats.ref import Ref
20 from CreeDocuments.jobHtml import Document
24 def __init__(self,file):
25 self.db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
26 self.db.setDatabaseName(file)
27 self.db.setHostName("localhost");
28 self.db.setUserName("");
29 self.db.setPassword("")
30 if not self.db.open():
31 print(self.db.lastError().text())
37 self.maTableMailleurs=TableMailleurs()
38 self.maTableMailleurs.createSqlTable()
39 self.maTableMachines=TableMachines()
40 self.maTableMachines.createSqlTable()
41 self.maTableVersions=TableVersions()
42 self.maTableVersions.createSqlTable()
43 self.maTableMaillages=TableMaillages()
44 self.maTableMaillages.createSqlTable()
45 self.maTableGroupesRef=TableGroupesRef()
46 self.maTableGroupesRef.createSqlTable()
47 self.maTablePerfs=TablePerfs()
48 self.maTablePerfs.createSqlTable()
49 self.maTableMailles=TableMailles()
50 self.maTableMailles.createSqlTable()
51 self.maTableTailles=TableTailles()
52 self.maTableTailles.createSqlTable()
53 self.maTableGroupes=TableGroupes()
54 self.maTableGroupes.createSqlTable()
55 self.maTableRatios=TableRatios()
56 self.maTableRatios.createSqlTable()
59 self.maTableMaillages=TableMaillages()
60 self.maTableMailleurs=TableMailleurs()
61 self.maTableVersions=TableVersions()
62 self.maTableMachines=TableMachines()
63 self.maTableMailles=TableMailles()
64 self.maTableTailles=TableTailles()
65 self.maTableGroupes=TableGroupes()
66 self.maTableGroupesRef=TableGroupesRef()
67 self.maTablePerfs=TablePerfs()
68 self.maTableRatios=TableRatios()
71 self.maTableMailleurs.remplit()
72 self.maTableMaillages.remplit()
73 self.maTableVersions.remplit()
74 #self.maTableVersions.creeVersion()
75 self.maTableMachines.creeMachine()
76 self.maTableGroupesRef.remplit()
81 def exportToCSV(self,partiel):
82 aujourdhui=datetime.date.today()
83 monFolder="ExportDB"+str(aujourdhui)
88 self.maTableMachines.exportToCSV()
89 self.maTableMailles.exportToCSV()
90 self.maTableTailles.exportToCSV()
91 self.maTableGroupes.exportToCSV()
92 self.maTablePerfs.exportToCSV()
93 self.maTableRatios.exportToCSV()
94 if partiel==True: return
95 self.maTableMailleurs.exportToCSV()
96 self.maTableVersions.exportToCSV()
97 self.maTableMaillages.exportToCSV()
98 self.maTableMachines.exportToCSV()
99 self.maTableGroupesRef.exportToCSV()
101 def importFromCSV(self,folder,partiel,force):
103 self.maTableMailleurs.importFromCSV(folder,force)
104 self.maTableVersions.importFromCSV(folder,force)
105 self.maTableMaillages.importFromCSV(folder,force)
106 self.maTableGroupesRef.importFromCSV(folder,force)
107 self.maTableMachines.importFromCSV(folder,force)
108 self.maTableMailles.importFromCSV(folder,force)
109 self.maTableGroupes.importFromCSV(folder,force)
110 self.maTablePerfs.importFromCSV(folder,force)
111 self.maTableRatios.importFromCSV(folder,force)
112 self.maTableGroupesRef.importFromCSV(folder,force)
115 # jamais appelee. juste pour memoire
116 texteQuery='select * from sqlite_master;'
118 return maQuery.exec_(texteQuery)
120 def passeJobs(self,all,salomePath,version,force,listeMaillage):
121 if all==True: paramMaillage=self.maTableMaillages.construitListeMaillages()
122 else : paramMaillage=self.maTableMaillages.verifieListeMaillages(listeMaillage)
123 # paramMaillage=(( id, script, fichier med),)
126 bOk,versionId,versionName = self.maTableVersions.chercheVersion(version)
128 self.maTableVersions.creeVersion(version)
129 print "nouvelle Version enregistree dans la base"
130 bOk,versionId,versionName = self.maTableVersions.chercheVersion(version)
132 print "Impossible de creer la version"
135 bOk,nomMachine = self.maTableMachines.chercheMachine()
137 self.maTableMachines.creeMachine()
138 print "enregistrement de la machine dans la table des machines"
139 bOk,nomMachine = self.maTableMachines.chercheMachine()
141 print "Impossible de creer la version"
145 for params in paramMaillage:
147 print "___________________________________________"
149 print " Job : ", params[1]
150 print " Version de salome : ", versionName
152 #recherche si le Job a deja ete passe
153 if self.maTablePerfs.getVal(params[0],versionId,nomMachine) !=None and force==False:
154 print "job numero: " , params[0], "deja passe"
156 print "___________________________________________"
159 # recherche de la reference du Job
160 maRef=Ref(self,params[0],versionId,nomMachine)
161 idVersionRef=self.maTableVersions.getVersionRef()
163 if maRef.existe==False and idVersionRef != versionId :
164 print "pas de reference pour le job : ", params[0]
165 print "pas de passage du job",
169 mesGroupesRef=self.maTableGroupesRef.getVals(idJob)
170 fichierGroupesRef=str(params[2]).replace('.med','_groupesRef.res')
171 from Stats.utiles import writeFile
172 writeFile(fichierGroupesRef,",".join(mesGroupesRef))
173 monjob=Job(params,salomePath,versionId,nomMachine,mesGroupesRef)
175 print " Debut d execution"
179 self.maTablePerfs.insereOuRemplaceLigne((idJob,versionId,nomMachine,int(monjob.getCPU()),0),False)
180 if idVersionRef != versionId :
181 stop=maRef.verifieCpu(monjob.getCPU())
184 print " Pb CPU: Seuil Atteint sur job : ", params[0]
185 print "________________________________________"
187 # remplit la table Mailles
188 listeColonnes,listeValues=monjob.getStatSurMailles()
189 print listeColonnes,listeValues
191 for col in listeColonnes :
192 lVal=[idJob,versionId,nomMachine,col]+[listeValues[i]]
194 if str(listeValues[i]) != str(0): self.maTableMailles.insereOuRemplaceLigne(lVal,False)
196 if idVersionRef != versionId :
197 stop=maRef.verifieMailles(listeValues,listeColonnes)
200 print " Pb sur le nombre de Maille : Seuil Atteint sur job : ", params[0]
201 print "_________________________________________________________________"
204 print "verification du Nb de Mailles effectuee"
206 # remplit la table Tailles
207 listeValues=monjob.getStatSurTailles()
208 lVal=[params[0],versionId,nomMachine]+listeValues
209 self.maTableTailles.insereOuRemplaceLigne(tuple(lVal),False)
210 if idVersionRef != versionId :
211 stop=maRef.verifieTailles(lVal)
214 print " Pb sur la taille des mailles : Seuil Atteint sur job : ", params[0]
215 print "_________________________________________________________________"
218 print "verification du Nb de Mailles effectuee"
221 # remplit la table Ratio
222 maDim=self.maTableMaillages.getVal(params[0],'dimension')
224 listeValues=monjob.getStatSurRatios()
225 lVal=[params[0],versionId,nomMachine]+listeValues
226 self.maTableRatios.insereOuRemplaceLigne(tuple(lVal),False)
227 if idVersionRef != versionId :
228 stop=maRef.verifieRatios(lVal)
231 print " Pb sur la taille des mailles : Seuil Atteint sur job : ", params[0]
232 print "_________________________________________________________________"
235 print "verification du Nb de Mailles effectuee"
237 # remplit les Groupes
238 for groupe in mesGroupesRef:
239 listeColonnes,listeValues=monjob.getStatSurGroupes(groupe)
241 for col in listeColonnes :
242 lVal=[groupe,params[0],versionId,nomMachine,col]+[listeValues[i]]
244 if str(listeValues[i]) != str(0): self.maTableGroupes.insereOuRemplaceLigne(lVal,False)
246 if idVersionRef != versionId :
247 stop=maRef.verifieMaillesPourGroupes(groupe,listeValues,listeColonnes)
251 print " Pb sur le nombre de Maille : Seuil Atteint sur job : ", params[0]
252 print "_________________________________________________________________"
254 print "verification du Nb de Mailles sur les groupes reference effectuee"
255 print "_________________________________________________________________"
258 def compare(self,version,versionRef,fichier):
259 print "_________________________________________________________________"
260 print "Generation du rapport de comparaison"
261 bOk,versionId,versionName = self.maTableVersions.chercheVersion(version)
263 print "version ", version , " inconnue dans la base"
265 print "Version a comparer : ", versionName
266 versionCompName=versionName
267 versionCompId=versionId
270 idVersionRef=self.maTableVersions.getVersionRef()
271 bOk,versionId,versionName = self.maTableVersions.chercheVersion(idVersionRef)
273 print "version de référence ", versionRef , " inconnue dans la base"
274 versionRefName=versionName
275 versionRefId=versionId
276 print "Version de comparaison : ", versionRefName
278 bOk,nomMachine = self.maTableMachines.chercheMachine()
279 monDocument=Document()
280 monDocument.initEntete(versionName, versionRefName,nomMachine)
281 mailleursIdListe,mailleursNameListe=self.maTableMailleurs.getTous()
283 allEntitySurMaille=self.maTableMailles.getAllEntity()
284 allEntitySurGroupe=self.maTableGroupes.getAllEntity()
285 # Boucle sur les mailleurs
286 for indexMailleur in range(len(mailleursNameListe)):
287 monDocument.initMailleur(mailleursNameListe[indexMailleur])
288 l1,l2,l3,l4,l5,l6=self.maTableMaillages.getTousPourMaillage(mailleursIdListe[indexMailleur])
290 maillagesNameListe=l2
291 maillagesSeuilCPUListe=l3
292 maillagesSeuilRatioListe=l4
293 maillagesSeuilTailleListe=l5
294 maillagesSeuilNbMailleListe=l6
296 # Boucle sur les maillages
297 for indexMaillage in range(len(maillagesNameListe)):
298 idMaillage=maillagesIdListe[indexMaillage]
299 dicoMaillage["NOM"]=maillagesNameListe[indexMaillage]
300 dicoMaillage["NBCPU"]=self.maTablePerfs.getVal(idMaillage,versionCompId,nomMachine)
301 dicoMaillage["REFCPU"]=self.maTablePerfs.getVal(idMaillage,versionRefId,nomMachine)
302 dicoMaillage["DIFCPU"],dicoMaillage["DIFREL"],dicoMaillage["WARNING"]=self.calculDiffCPU(dicoMaillage["NBCPU"],dicoMaillage["REFCPU"],maillagesSeuilCPUListe[indexMaillage])
304 dicoMaillage["RMAX"]=self.maTableRatios.getVal(idMaillage,versionCompId,nomMachine,'RatioMax')
305 dicoMaillage["RMAXREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,nomMachine,'RatioMax')
306 dicoMaillage["RMIN"]=self.maTableRatios.getVal(idMaillage,versionCompId,nomMachine,'RatioMin')
307 dicoMaillage["RMINREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,nomMachine,'RatioMin')
308 dicoMaillage["RMOY"]=self.maTableRatios.getVal(idMaillage,versionCompId,nomMachine,'Moyenne')
309 dicoMaillage["RMOYREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,nomMachine,'Moyenne')
310 dicoMaillage["R1Q"]=self.maTableRatios.getVal(idMaillage,versionCompId,nomMachine,'Q1')
311 dicoMaillage["R1QREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,nomMachine,'Q1')
312 dicoMaillage["RMED"]=self.maTableRatios.getVal(idMaillage,versionCompId,nomMachine,'Mediane')
313 dicoMaillage["RMEDREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,nomMachine,'Mediane')
314 dicoMaillage["R3Q"]=self.maTableRatios.getVal(idMaillage,versionCompId,nomMachine,'Q3')
315 dicoMaillage["R3QREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,nomMachine,'Q3')
317 dicoMaillage["TMAX"]=self.maTableTailles.getVal(idMaillage,versionCompId,nomMachine,'TailleMax')
318 dicoMaillage["TMAXREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,nomMachine,'TailleMax')
319 dicoMaillage["TMIN"]=self.maTableTailles.getVal(idMaillage,versionCompId,nomMachine,'TailleMin')
320 dicoMaillage["TMINREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,nomMachine,'TailleMin')
321 dicoMaillage["TMOY"]=self.maTableTailles.getVal(idMaillage,versionCompId,nomMachine,'Moyenne')
322 dicoMaillage["TMOYREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,nomMachine,'Moyenne')
323 dicoMaillage["T1Q"]=self.maTableTailles.getVal(idMaillage,versionCompId,nomMachine,'Q1')
324 dicoMaillage["T1QREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,nomMachine,'Q1')
325 dicoMaillage["TMED"]=self.maTableTailles.getVal(idMaillage,versionCompId,nomMachine,'Mediane')
326 dicoMaillage["TMEDREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,nomMachine,'Mediane')
327 dicoMaillage["T3Q"]=self.maTableTailles.getVal(idMaillage,versionCompId,nomMachine,'Q3')
328 dicoMaillage["T3QREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,nomMachine,'Q3')
330 monDocument.initJob(dicoMaillage)
334 dico["TITRE"]="Nombre de Mailles dans le maillage entier"
335 for nomColonne in allEntitySurMaille:
336 val=self.maTableMailles.getVal(idMaillage,versionCompId,nomMachine,nomColonne)
337 valRef=self.maTableMailles.getVal(idMaillage,versionRefId,nomMachine,nomColonne)
338 if val==0 and valRef==0 : continue
340 #print nomColonne;print val; print valRef
341 cMAIL="MAIL"+str(i); cREF="REF"+str(i)
342 cNB="NB"+str(i); cDIF="DIF"+str(i); cREL="REL"+str(i)
344 dico[cMAIL]=nomColonne
347 dico[cDIF],dico[cREL],dico[cWARN]=self.calculDiff(val,valRef,maillagesSeuilNbMailleListe[indexMaillage])
348 monDocument.initMaille(dico,i)
350 # Boucle sur les groupes du maillage
351 mesGroupesRef=self.maTableGroupesRef.getVals(idMaillage)
352 if mesGroupesRef==[] : monDocument.addNoGroup()
353 for groupeId in mesGroupesRef:
356 dico["TITRE"]="Nombre de Mailles dans le groupe "+groupeId
357 for nomColonne in allEntitySurGroupe:
358 val=self.maTableGroupes.getVal(groupeId,idMaillage,versionCompId,nomMachine,nomColonne)
359 valRef=self.maTableGroupes.getVal(groupeId,idMaillage,versionRefId,nomMachine,nomColonne)
360 if val==0 and valRef==0 : continue
362 cMAIL="MAIL"+str(i); cREF="REF"+str(i)
363 cNB="NB"+str(i); cDIF="DIF"+str(i); cREL="REL"+str(i)
365 #print nomColonne," ",val," ",valRef
366 dico[cMAIL]=nomColonne
369 dico[cDIF],dico[cREL],dico[cWARN]=self.calculDiff(val,valRef,maillagesSeuilNbMailleListe[indexMaillage])
370 monDocument.initMaille(dico,i)
372 monDocument.creeDocument(fichier)
374 def calculDiffCPU(self,nb,nbRef,seuil):
375 # different de calculDiff : si on est inferieur a la reference
376 # on n a pas de warning
378 diffRel=((nb-nbRef)*100)/(nbRef*1.00)
380 warning="plus de "+ str(seuil) + "% de difference CPU"
383 diffRelStr=str(diffRel)+"%"
384 return diff,diffRelStr,warning
386 def calculDiff(self,nb,nbRef,seuil):
388 diffRel=((nb-nbRef)*100)/(nbRef*1.00)
389 if diffRel > seuil or (-1*diffRel) > seuil :
390 warning="difference superieure a "+ str(seuil) + "%"
393 diffRelStr=str(diffRel)+"%"
394 return diff,diffRelStr,warning