1 # -*- coding: utf-8 -*-
7 from qtsalome import QSqlQuery
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 tableGroupeRatios import TableGroupeRatios
18 from tableGroupeTailles import TableGroupeTailles
19 from tablePerfs import TablePerfs
20 from Stats.job import Job
21 from CreeDocuments.jobHtml import Document
25 def __init__(self,file):
26 self.db = QSqlDatabase.addDatabase("QSQLITE")
27 self.db.setDatabaseName(file)
28 self.db.setHostName("localhost");
29 self.db.setUserName("");
30 self.db.setPassword("")
31 if not self.db.open():
32 print(self.db.lastError().text())
38 self.maTableMailleurs=TableMailleurs()
39 self.maTableMailleurs.createSqlTable()
40 self.maTableMachines=TableMachines()
41 self.maTableMachines.createSqlTable()
42 self.maTableVersions=TableVersions()
43 self.maTableVersions.createSqlTable()
44 self.maTableMaillages=TableMaillages()
45 self.maTableMaillages.createSqlTable()
46 self.maTableGroupesRef=TableGroupesRef()
47 self.maTableGroupesRef.createSqlTable()
48 self.maTablePerfs=TablePerfs()
49 self.maTablePerfs.createSqlTable()
50 self.maTableMailles=TableMailles()
51 self.maTableMailles.createSqlTable()
52 self.maTableTailles=TableTailles()
53 self.maTableTailles.createSqlTable()
54 self.maTableGroupes=TableGroupes()
55 self.maTableGroupes.createSqlTable()
56 self.maTableRatios=TableRatios()
57 self.maTableRatios.createSqlTable()
58 self.maTableGroupeRatios=TableGroupeRatios()
59 self.maTableGroupeRatios.createSqlTable()
60 self.maTableGroupeTailles=TableGroupeTailles()
61 self.maTableGroupeTailles.createSqlTable()
64 self.maTableMaillages=TableMaillages()
65 self.maTableMailleurs=TableMailleurs()
66 self.maTableVersions=TableVersions()
67 self.maTableMachines=TableMachines()
68 self.maTableMailles=TableMailles()
69 self.maTableTailles=TableTailles()
70 self.maTableGroupes=TableGroupes()
71 self.maTableGroupesRef=TableGroupesRef()
72 self.maTablePerfs=TablePerfs()
73 self.maTableRatios=TableRatios()
74 self.maTableGroupeRatios=TableGroupeRatios()
75 self.maTableGroupeTailles=TableGroupeTailles()
78 self.maTableMailleurs.remplit()
79 self.maTableMaillages.remplit()
80 self.maTableVersions.remplit()
81 self.maTableMachines.creeMachine()
82 self.maTableGroupesRef.remplit()
87 def exportToCSV(self,partiel):
88 aujourdhui=datetime.date.today()
89 monFolder="ExportDB"+str(aujourdhui)
94 self.maTableMachines.exportToCSV()
95 self.maTableMailles.exportToCSV()
96 self.maTableTailles.exportToCSV()
97 self.maTableGroupes.exportToCSV()
98 self.maTablePerfs.exportToCSV()
99 self.maTableRatios.exportToCSV()
100 self.maTableGroupeRatios.exportToCSV()
101 self.maTableGroupeTailles.exportToCSV()
102 if partiel==True: return
103 self.maTableMailleurs.exportToCSV()
104 self.maTableVersions.exportToCSV()
105 self.maTableMaillages.exportToCSV()
106 self.maTableMachines.exportToCSV()
107 self.maTableGroupesRef.exportToCSV()
109 def importFromCSV(self,folder,partiel,force):
111 self.maTableMailleurs.importFromCSV(folder,force)
112 self.maTableVersions.importFromCSV(folder,force)
113 self.maTableMaillages.importFromCSV(folder,force)
114 self.maTableGroupesRef.importFromCSV(folder,force)
115 self.maTableMachines.importFromCSV(folder,force)
116 self.maTableMailles.importFromCSV(folder,force)
117 self.maTableGroupes.importFromCSV(folder,force)
118 self.maTablePerfs.importFromCSV(folder,force)
119 self.maTableRatios.importFromCSV(folder,force)
120 self.maTableGroupesRef.importFromCSV(folder,force)
121 self.maTableGroupeRatios.importFromCSV(folder,force)
122 self.maTableGroupeTailles.importFromCSV(folder,force)
125 # jamais appelee. juste pour memoire
126 texteQuery='select * from sqlite_master;'
128 return maQuery.exec_(texteQuery)
130 def passeJobs(self,all,salomePath,version,force,listeMaillage):
131 if all==True: paramMaillage=self.maTableMaillages.construitListeMaillages()
132 else : paramMaillage=self.maTableMaillages.verifieListeMaillages(listeMaillage)
133 # paramMaillage=(( id, script, fichier med),)
135 bOk,versionId,versionName = self.maTableVersions.chercheVersion(version)
137 self.maTableVersions.creeVersion(version)
138 print "nouvelle Version enregistree dans la base"
139 bOk,versionId,versionName = self.maTableVersions.chercheVersion(version)
141 print "Impossible de creer la version"
144 bOk,nomMachine = self.maTableMachines.chercheMachine()
146 self.maTableMachines.creeMachine()
147 print "enregistrement de la machine dans la table des machines"
148 bOk,nomMachine = self.maTableMachines.chercheMachine()
150 print "Impossible de creer la version"
154 for params in paramMaillage:
156 print "___________________________________________"
158 print " Job : ", params[1]
159 print " Version de salome : ", versionName
163 mesGroupesRef=self.maTableGroupesRef.getVals(idJob)
164 fichierGroupesRef=str(params[2]).replace('.med','_groupesRef.res')
165 from Stats.utiles import writeFile
166 if mesGroupesRef != [] :
167 writeFile(fichierGroupesRef,",".join(mesGroupesRef))
168 monjob=Job(params,salomePath,versionId,mesGroupesRef)
170 print " Debut d execution"
174 self.maTablePerfs.insereOuRemplaceLigne((idJob,versionId,nomMachine,int(monjob.getCPU()),0),False)
176 # remplit la table Mailles
177 listeColonnes,listeValues=monjob.getStatSurMailles()
179 for col in listeColonnes :
180 lVal=[idJob,versionId,col]+[listeValues[i]]
182 if str(listeValues[i]) != str(0): self.maTableMailles.insereOuRemplaceLigne(lVal,False)
185 # remplit la table Tailles
186 listeValues=monjob.getStatSurTailles()
187 lVal=[params[0],versionId]+listeValues
188 self.maTableTailles.insereOuRemplaceLigne(tuple(lVal),False)
190 # remplit la table Ratio
191 maDim=self.maTableMaillages.getVal(params[0],'dimension')
192 listeValues=monjob.getStatSurRatios()
193 lVal=[params[0],versionId]+listeValues
194 self.maTableRatios.insereOuRemplaceLigne(tuple(lVal),False)
196 # remplit les Groupes
197 for groupe in mesGroupesRef:
198 listeColonnes,listeValues=monjob.getStatSurGroupes(groupe)
200 for col in listeColonnes :
201 lVal=[groupe,params[0],versionId,col]+[listeValues[i]]
203 if str(listeValues[i]) != str(0): self.maTableGroupes.insereOuRemplaceLigne(lVal,False)
206 # remplit les Ratio Groupes
207 for groupe in mesGroupesRef:
208 listeValues=monjob.getStatSurRatiosGroupes(groupe)
209 if listeValues==['0','0','0','0','0','0'] : continue
210 lVal=[params[0],versionId,groupe]+listeValues
211 self.maTableGroupeRatios.insereOuRemplaceLigne(tuple(lVal),False)
212 listeValues=monjob.getStatSurTaillesGroupes(groupe)
213 lVal=[params[0],versionId,groupe]+listeValues
214 self.maTableGroupeTailles.insereOuRemplaceLigne(tuple(lVal),False)
219 def compare(self,version,ListeVersionRefString,fichier):
220 print "_________________________________________________________________"
221 print "Generation du rapport de comparaison"
223 bOk,versionId,versionName = self.maTableVersions.chercheVersion(version)
225 print "version ", version , " inconnue dans la base"
227 print "Version a comparer : ", versionName
228 versionCompName=versionName
229 versionCompId=versionId
232 listeVersionRefName=[]
233 ListeVersionRef=ListeVersionRefString.split(",")
234 for id in ListeVersionRef:
235 bOk,versionId,versionName = self.maTableVersions.chercheVersion(id)
237 print "version ", id , " inconnue dans la base"
239 listeVersionRefId.append(versionId)
240 listeVersionRefName.append(versionName)
242 bOk,nomMachine = self.maTableMachines.chercheMachine()
243 monDocument=Document()
244 monDocument.initEntete(versionCompName, nomMachine)
246 maillagesIdListe, maillagesNameListe=self.maTableMaillages.getTous()
247 if len(maillagesIdListe) != len (listeVersionRefId):
248 print "Pas assez de version de reference"
251 allEntitySurMaille=self.maTableMailles.getAllEntity()
252 allEntitySurGroupe=self.maTableGroupes.getAllEntity()
254 # Boucle sur les maillages
255 for idMaillage in maillagesIdListe :
257 versionRefId=listeVersionRefId[idMaillage - 1]
258 versionRefName=listeVersionRefName[idMaillage - 1]
259 mailleurId=self.maTableMaillages.getMailleurId(idMaillage)
260 mailleurName=self.maTableMailleurs.getName(mailleurId)
262 # Recuperation des seuils
263 l1,l2,l3,l4,l5,l6=self.maTableMaillages.getSeuilsPourMaillage(idMaillage)
272 dicoMaillage["NBCPU"]=self.maTablePerfs.getVal(idMaillage,versionCompId,nomMachine)
273 dicoMaillage["REFCPU"]=self.maTablePerfs.getVal(idMaillage,versionRefId,nomMachine)
274 dicoMaillage["DIFCPU"],dicoMaillage["DIFREL"],dicoMaillage["WARNING"]=self.calculDiffCPU(dicoMaillage["NBCPU"],dicoMaillage["REFCPU"],monSeuilCPU)
275 monDocument.initMaillage(maillagesNameListe[idMaillage-1],mailleurName,versionRefName,dicoMaillage)
277 # Boucle sur les Mailles
280 dico["TITRE"]="Nombre de Mailles dans le maillage entier"
282 for nomColonne in allEntitySurMaille:
283 val=self.maTableMailles.getVal(idMaillage,versionCompId,nomColonne)
284 valRef=self.maTableMailles.getVal(idMaillage,versionRefId,nomColonne)
285 if val==0 and valRef==0 : continue
287 #print nomColonne;print val; print valRef
288 cMAIL="MAIL"+str(i); cREF="REF"+str(i)
289 cNB="NB"+str(i); cDIF="DIF"+str(i); cREL="REL"+str(i)
291 dico[cMAIL]=nomColonne
294 dico[cDIF],dico[cREL],dico[cWARN]=self.calculDiff(val,valRef,monSeuilNbMaille)
295 monDocument.initMaille(dico,i)
302 dicoMaillage["RMAX"]=self.maTableRatios.getVal(idMaillage,versionCompId,'RatioMax')
303 dicoMaillage["RMAXREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,'RatioMax')
304 dicoMaillage["DIFARMAX"],dicoMaillage["DIFRRMAX"],dicoMaillage["WRRMAX"]=self.calculDiff(dicoMaillage["RMAX"],dicoMaillage["RMAXREF"],monSeuilRatio)
305 dicoMaillage["RMIN"]=self.maTableRatios.getVal(idMaillage,versionCompId,'RatioMin')
306 dicoMaillage["RMINREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,'RatioMin')
307 dicoMaillage["DIFARMIN"],dicoMaillage["DIFRRMIN"],dicoMaillage["WRRMIN"]=self.calculDiff(dicoMaillage["RMIN"],dicoMaillage["RMINREF"],monSeuilRatio)
308 dicoMaillage["RMOY"]=self.maTableRatios.getVal(idMaillage,versionCompId,'Moyenne')
309 dicoMaillage["RMOYREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,'Moyenne')
310 dicoMaillage["DIFARMOY"],dicoMaillage["DIFRRMOY"],dicoMaillage["WRRMOY"]=self.calculDiff(dicoMaillage["RMOY"],dicoMaillage["RMOYREF"],monSeuilRatio)
311 dicoMaillage["R1Q"]=self.maTableRatios.getVal(idMaillage,versionCompId,'Q1')
312 dicoMaillage["R1QREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,'Q1')
313 dicoMaillage["DIFAR1Q"],dicoMaillage["DIFRR1Q"],dicoMaillage["WRR1Q"]=self.calculDiff(dicoMaillage["R1Q"],dicoMaillage["R1QREF"],monSeuilRatio)
314 dicoMaillage["RMED"]=self.maTableRatios.getVal(idMaillage,versionCompId,'Mediane')
315 dicoMaillage["RMEDREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,'Mediane')
316 dicoMaillage["DIFARMED"],dicoMaillage["DIFRRMED"],dicoMaillage["WRRMED"]=self.calculDiff(dicoMaillage["RMED"],dicoMaillage["RMEDREF"],monSeuilRatio)
317 dicoMaillage["R3Q"]=self.maTableRatios.getVal(idMaillage,versionCompId,'Q3')
318 dicoMaillage["R3QREF"]=self.maTableRatios.getVal(idMaillage,versionRefId,'Q3')
319 dicoMaillage["DIFAR3Q"],dicoMaillage["DIFRR3Q"],dicoMaillage["WRR3Q"]=self.calculDiff(dicoMaillage["R3Q"],dicoMaillage["R3QREF"],monSeuilRatio)
321 dicoMaillage["TMAX"]=self.maTableTailles.getVal(idMaillage,versionCompId,'TailleMax')
322 dicoMaillage["TMAXREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,'TailleMax')
323 dicoMaillage["DIFATMAX"],dicoMaillage["DIFRTMAX"],dicoMaillage["WTMAX"]=self.calculDiff(dicoMaillage["TMAX"],dicoMaillage["TMAXREF"],monSeuilTaille)
324 dicoMaillage["TMIN"]=self.maTableTailles.getVal(idMaillage,versionCompId,'TailleMin')
325 dicoMaillage["TMINREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,'TailleMin')
326 dicoMaillage["DIFATMIN"],dicoMaillage["DIFRTMIN"],dicoMaillage["WTMIN"]=self.calculDiff(dicoMaillage["TMIN"],dicoMaillage["TMINREF"],monSeuilTaille)
327 dicoMaillage["TMOY"]=self.maTableTailles.getVal(idMaillage,versionCompId,'Moyenne')
328 dicoMaillage["TMOYREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,'Moyenne')
329 dicoMaillage["DIFATMOY"],dicoMaillage["DIFRTMOY"],dicoMaillage["WTMOY"]=self.calculDiff(dicoMaillage["TMOY"],dicoMaillage["TMOYREF"],monSeuilTaille)
330 dicoMaillage["T1Q"]=self.maTableTailles.getVal(idMaillage,versionCompId,'Q1')
331 dicoMaillage["T1QREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,'Q1')
332 dicoMaillage["DIFAT1Q"],dicoMaillage["DIFRT1Q"],dicoMaillage["WT1Q"]=self.calculDiff(dicoMaillage["T1Q"],dicoMaillage["T1QREF"],monSeuilTaille)
333 dicoMaillage["TMED"]=self.maTableTailles.getVal(idMaillage,versionCompId,'Mediane')
334 dicoMaillage["TMEDREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,'Mediane')
335 dicoMaillage["DIFATMED"],dicoMaillage["DIFRTMED"],dicoMaillage["WTMED"]=self.calculDiffCPU(dicoMaillage["TMED"],dicoMaillage["TMEDREF"],monSeuilTaille)
336 dicoMaillage["T3Q"]=self.maTableTailles.getVal(idMaillage,versionCompId,'Q3')
337 dicoMaillage["T3QREF"]=self.maTableTailles.getVal(idMaillage,versionRefId,'Q3')
338 dicoMaillage["DIFAT3Q"],dicoMaillage["DIFRT3Q"],dicoMaillage["WT3Q"]=self.calculDiffCPU(dicoMaillage["T3Q"],dicoMaillage["T3QREF"],monSeuilTaille)
340 #PNPNPN a revoir le initJob
341 monDocument.initJob(dicoMaillage)
344 # Boucle sur les groupes du maillage
345 mesGroupesRef=self.maTableGroupesRef.getVals(idMaillage)
346 if mesGroupesRef==[] : monDocument.addNoGroup()
347 for groupeId in mesGroupesRef:
350 dico["TITRE"]="Nombre de Mailles dans le groupe "+groupeId
351 for nomColonne in allEntitySurGroupe:
352 val=self.maTableGroupes.getVal(groupeId,idMaillage,versionCompId,nomColonne)
353 valRef=self.maTableGroupes.getVal(groupeId,idMaillage,versionRefId,nomColonne)
354 if val==0 and valRef==0 : continue
356 cMAIL="MAIL"+str(i); cREF="REF"+str(i)
357 cNB="NB"+str(i); cDIF="DIF"+str(i); cREL="REL"+str(i)
359 dico[cMAIL]=nomColonne
362 dico[cDIF],dico[cREL],dico[cWARN]=self.calculDiff(val,valRef,monSeuilNbMaille)
363 monDocument.initMaille(dico,i)
369 if self.maTableGroupeRatios.getVal(idMaillage,versionCompId,groupeId,'RatioMax') != 0 :
370 dico["RMAX"]=self.maTableGroupeRatios.getVal(idMaillage,versionCompId,groupeId,'RatioMax')
371 dico["RMAXREF"]=self.maTableGroupeRatios.getVal(idMaillage,versionRefId,groupeId,'RatioMax')
372 dico["DIFARMAX"],dico["DIFRRMAX"],dico["WRRMAX"]=self.calculDiff(dico["RMAX"],dico["RMAXREF"],monSeuilRatio)
373 dico["RMIN"]=self.maTableGroupeRatios.getVal(idMaillage,versionCompId,groupeId,'RatioMin')
374 dico["RMINREF"]=self.maTableGroupeRatios.getVal(idMaillage,versionRefId,groupeId,'RatioMin')
375 dico["DIFARMIN"],dico["DIFRRMIN"],dico["WRRMIN"]=self.calculDiff(dico["RMIN"],dico["RMINREF"],monSeuilRatio)
376 dico["RMOY"]=self.maTableGroupeRatios.getVal(idMaillage,versionCompId,groupeId,'Moyenne')
377 dico["RMOYREF"]=self.maTableGroupeRatios.getVal(idMaillage,versionRefId,groupeId,'Moyenne')
378 dico["DIFARMOY"],dico["DIFRRMOY"],dico["WRRMOY"]=self.calculDiff(dico["RMOY"],dico["RMOYREF"],monSeuilRatio)
379 dico["R1Q"]=self.maTableGroupeRatios.getVal(idMaillage,versionCompId,groupeId,'Q1')
380 dico["R1QREF"]=self.maTableGroupeRatios.getVal(idMaillage,versionRefId,groupeId,'Q1')
381 dico["DIFAR1Q"],dico["DIFRR1Q"],dico["WRR1Q"]=self.calculDiff(dico["R1Q"],dico["R1QREF"],monSeuilRatio)
382 dico["RMED"]=self.maTableGroupeRatios.getVal(idMaillage,versionCompId,groupeId,'Mediane')
383 dico["RMEDREF"]=self.maTableGroupeRatios.getVal(idMaillage,versionRefId,groupeId,'Mediane')
384 dico["DIFARMED"],dico["DIFRRMED"],dico["WRRMED"]=self.calculDiff(dico["RMED"],dico["RMEDREF"],monSeuilRatio)
385 dico["R3Q"]=self.maTableGroupeRatios.getVal(idMaillage,versionCompId,groupeId,'Q3')
386 dico["R3QREF"]=self.maTableGroupeRatios.getVal(idMaillage,versionRefId,groupeId,'Q3')
387 dico["DIFAR3Q"],dico["DIFRR3Q"],dico["WRR3Q"]=self.calculDiff(dico["R3Q"],dico["R3QREF"],monSeuilRatio)
388 monDocument.CreeGroupeRatios(dico)
391 if self.maTableGroupeTailles.getVal(idMaillage,versionCompId,groupeId,'TailleMax') != 0:
392 dico["TMAX"]=self.maTableGroupeTailles.getVal(idMaillage,versionCompId,groupeId,'TailleMax')
393 dico["TMAXREF"]=self.maTableGroupeTailles.getVal(idMaillage,versionRefId,groupeId,'TailleMax')
394 dico["DIFATMAX"],dico["DIFRTMAX"],dico["WTMAX"]=self.calculDiff(dico["TMAX"],dico["TMAXREF"],monSeuilTaille)
395 dico["TMIN"]=self.maTableGroupeTailles.getVal(idMaillage,versionCompId,groupeId,'TailleMin')
396 dico["TMINREF"]=self.maTableGroupeTailles.getVal(idMaillage,versionRefId,groupeId,'TailleMin')
397 dico["DIFATMIN"],dico["DIFRTMIN"],dico["WTMIN"]=self.calculDiff(dico["TMIN"],dico["TMINREF"],monSeuilTaille)
398 dico["TMOY"]=self.maTableGroupeTailles.getVal(idMaillage,versionCompId,groupeId,'Moyenne')
399 dico["TMOYREF"]=self.maTableGroupeTailles.getVal(idMaillage,versionRefId,groupeId,'Moyenne')
400 dico["DIFATMOY"],dico["DIFRTMOY"],dico["WTMOY"]=self.calculDiff(dico["TMOY"],dico["TMOYREF"],monSeuilTaille)
401 dico["T1Q"]=self.maTableGroupeTailles.getVal(idMaillage,versionCompId,groupeId,'Q1')
402 dico["T1QREF"]=self.maTableGroupeTailles.getVal(idMaillage,versionRefId,groupeId,'Q1')
403 dico["DIFAT1Q"],dico["DIFRT1Q"],dico["WT1Q"]=self.calculDiff(dico["T1Q"],dico["T1QREF"],monSeuilTaille)
404 dico["TMED"]=self.maTableGroupeTailles.getVal(idMaillage,versionCompId,groupeId,'Mediane')
405 dico["TMEDREF"]=self.maTableGroupeTailles.getVal(idMaillage,versionRefId,groupeId,'Mediane')
406 dico["DIFATMED"],dico["DIFRTMED"],dico["WTMED"]=self.calculDiffCPU(dico["TMED"],dico["TMEDREF"],monSeuilTaille)
407 dico["T3Q"]=self.maTableGroupeTailles.getVal(idMaillage,versionCompId,groupeId,'Q3')
408 dico["T3QREF"]=self.maTableGroupeTailles.getVal(idMaillage,versionRefId,groupeId,'Q3')
409 dico["DIFAT3Q"],dico["DIFRT3Q"],dico["WT3Q"]=self.calculDiffCPU(dico["T3Q"],dico["T3QREF"],monSeuilTaille)
410 monDocument.CreeGroupeTaille(dico)
416 monDocument.creeDocument(fichier)
418 def calculDiffCPU(self,nb,nbRef,seuil):
419 # different de calculDiff : si on est inferieur a la reference
420 # on n a pas de warning
422 diffRel=((nb-nbRef)*100)/(nbRef*1.00)
424 warning="plus de "+ str(seuil) + "% de difference CPU"
427 diffRelStr=str(diffRel)+"%"
428 return diff,diffRelStr,warning
430 def calculDiff(self,nb,nbRef,seuil):
431 #print nb,nbRef,seuil
433 diffRel=((nb-nbRef)*100)/(nbRef*1.00)
434 if diffRel > seuil or (-1*diffRel) > seuil :
435 warning="difference superieure a "+ str(seuil) + "%"
438 diffRelStr=str(diffRel)+"%"
439 return diff,diffRelStr,warning