source: lliurex-up/trunk/fuentes/lliurex-up-gui/LliurexUpConnect.py @ 3127

Last change on this file since 3127 was 3127, checked in by jrpelegrina, 2 years ago

WIP in new gui. Add checking for errors in upgrade

File size: 11.6 KB
Line 
1import xmlrpclib 
2import os
3import shutil
4import subprocess
5import socket
6import threading
7import datetime
8from math import pi
9
10import LliurexUpCore
11
12from gi.repository import Gtk, Gdk, GObject, GLib, PangoCairo, Pango
13
14import signal
15signal.signal(signal.SIGINT, signal.SIG_DFL)
16
17
18class LliurexUpConnect():
19
20        def __init__(self):
21
22                self.llxUpCore=LliurexUpCore.LliurexUpCore()
23                GObject.threads_init()
24                log_msg="------------------------------------------\n"+"LLIUREX-UP STARTING AT: " + datetime.datetime.today().strftime("%d/%m/%y %H:%M:%S") +"\n------------------------------------------"
25                self.log(log_msg)
26                #self.saveTargetMetapackagePath=os.path.join(self.llxUpCore.processPath,"targetMetapackage")
27                self.preactions_token=os.path.join(self.llxUpCore.processPath,'preactions_token')
28                self.upgrade_token=os.path.join(self.llxUpCore.processPath,'upgrade_token')
29                self.installflavour_token=os.path.join(self.llxUpCore.processPath,'installflavour_token')
30                self.postactions_token=os.path.join(self.llxUpCore.processPath,'postactions_token')
31                self.errorpostaction_token=os.path.join(self.llxUpCore.processPath,'errorpostaction_token')
32                self.errorupgrade_token=os.path.join(self.llxUpCore.processPath,'errorupgrade_token')
33                self.checkInitialFlavour()
34
35
36        #def __init__   
37
38
39        def checkInitialFlavour(self):
40
41                self.targetMetapackage=None
42
43                try:
44                        self.targetMetapackage=self.llxUpCore.checkFlavour()
45                        log_msg="Initial check metapackage. Metapackage to install: " + str(self.targetMetapackage)
46                        self.log(log_msg)
47                       
48                        #if self.targetMetapackage !=None:
49                        self.metapackageRef=self.llxUpCore.metapackageRef
50                        if len(self.metapackageRef)==0:
51                                self.llxUpCore.getTargetMetapackage()
52                        self.metapackageRef=sorted(self.metapackageRef) 
53                         
54                        self.previousFlavours=self.llxUpCore.previuosFlavours
55                        if len(self.previousFlavours)==0:
56                                self.llxUpCore.getPreviuosFlavours()
57                       
58                        log_msg="Get initial flavours: " + str(self.previousFlavours)
59                        self.log(log_msg)
60                 
61                except Exception as e:
62                        log_msg="Initial check metapackage. Error: " + str(e)
63                        self.log(log_msg)
64
65                return self.targetMetapackage
66
67        #def checkFlavoour
68
69
70        # def saveTargetMetapackage(self):
71
72        #       try:
73        #               aux=open(self.saveTargetMetapackagePath,'w')
74        #               x=self.targetMetapackage.split("-")[2]
75        #               aux.write(x+"\n")
76        #               x="edu"
77        #               aux.write(x+"\n")
78        #               aux.close()
79
80        #       except Exception as e:
81        #               print str(e)   
82
83        def requiresInstallFlavour(self):
84               
85                flavourToInstall=None
86               
87                self.flavours=self.llxUpCore.flavours
88                log_msg="Get update flavours: " + str(self.flavours)
89                self.log(log_msg)
90
91                if not 'None' in self.previousFlavours:
92                        if self.previousFlavours !=self.flavours:
93                                flavourToInstall=self.parseFlavourToInstall(self.previousFlavours)
94                                log_msg="Requires Install this Flavour: " + str(flavourToInstall)
95                                self.log(log_msg)
96                               
97                        else:
98                                log_msg="Requires Install Flavour: No"
99                                self.log(log_msg)       
100                                                       
101                else:
102                        log_msg="Flavours reference: " + str(self.metapackageRef)
103                        self.log(log_msg)
104                        if self.metapackageRef != self.flavours:
105                                flavourToInstall=self.parseFlavourToInstall(self.metapackageRef)
106
107                                log_msg="Requires Install this Flavour: " + str(flavourToInstall)
108                                self.log(log_msg)
109                        else:
110                                log_msg="Requires Install Flavour: No"
111                                self.log(log_msg)
112
113                return flavourToInstall                                         
114                       
115        #def requiresInstallFlavour
116       
117        def parseFlavourToInstall(self,flavours):
118       
119                parse_flavour=""
120
121                for item in flavours:
122                        if item != "edu":
123                                parse_flavour=parse_flavour + " " + "lliurex-meta-" + item
124
125                return parse_flavour
126                       
127        #def parseFlavourToInstall(
128       
129        def canConnectToLliurexNet(self):
130
131                try:
132                        can_connect=self.llxUpCore.canConnectToLliurexNet()
133                        if can_connect:
134                                return True 
135                        else:
136                                return False
137                except:
138                        return False
139
140        #def canConnectToLliurexNet
141
142        def isLliurexUpIsUpdated(self):
143
144                try:
145                        is_lliurexup_updated=self.llxUpCore.isLliurexUpIsUpdated()
146                        log_msg="Checking lliurex-up. Is lliurex-up updated: "+ str(is_lliurexup_updated)
147                        self.log(log_msg)
148                        return is_lliurexup_updated
149               
150                except Exception as e:
151                        log_msg="Checking lliurex-up. Error: " + str(e)
152                        self.log(log_msg)
153                        return True
154
155        #def isLliurexUpIsUpdated
156
157        def installLliurexUp(self):
158
159                try:
160                        is_lliurexup_installed=self.llxUpCore.installLliurexUp()
161                        log_msg="Installing lliurex-up: " + str(is_lliurexup_installed)
162                        self.log(log_msg)
163                        return is_lliurexup_installed
164
165                except Exception as e:
166                        log_msg="Installing lliurex-up. Error: " + str(e)
167                        self.log(log_msg)
168                        return True
169
170        #def installLliurexUp   
171
172       
173        def lliurexMirrorIsUpdated(self):
174
175                try:
176                        is_mirror_updated=self.llxUpCore.lliurexMirrorIsUpdated()
177
178                        if is_mirror_updated !=None:
179                       
180                                if is_mirror_updated['action']=='update':
181                                        log_msg="Checking mirror. Is mirror update: False"
182                                        self.log(log_msg)
183                                        return False
184                                else: 
185                                        log_msg="Checking mirror. Is mirror update: " + is_mirror_updated['action']
186                                        self.log(log_msg)
187                                        return True
188                        else:
189                                log_msg="Checking mirror. Is mirror update: None"
190                                self.log(log_msg)
191                                return True
192               
193               
194                except Exception as e:
195                        log_msg="Checking mirror. Error: " + str(e)
196                        self.log(log_msg)
197                        return True     
198
199        #def lliurexMirrorIsUpdated             
200
201        def lliurexMirrorIsRunning(self):
202
203                try:
204                        is_lliurexmirror_running=self.llxUpCore.lliurexMirrorIsRunning()
205                        return is_lliurexmirror_running
206
207                except Exception as e:
208                        log_msg="Updating mirror. Error: " + str(e)
209                        self.log(log_msg)
210                        return False
211
212        #def lliurexMirrorIsRunning             
213
214        def getPercentageLliurexMirror(self):
215
216                try:
217                        percentage_mirror=self.llxUpCore.getPercentageLliurexMirror()
218                        if percentage_mirror != None:
219                                return percentage_mirror
220                        else:
221                                return 0       
222               
223                except Exception as e:
224                        return 0       
225
226
227        #def getPercentageLliurexMirror
228
229        def getLliurexVersionLocal(self):
230               
231                try:
232                       
233                        self.lliurexVersionLocal=self.llxUpCore.getLliurexVersionLocal()
234                        log_msg="Get LliurexVersion installed: " + self.lliurexVersionLocal["installed"]
235                        self.log(log_msg)
236                        log_msg="Get LliurexVersion candidate from Local repository: " + self.lliurexVersionLocal["candidate"]
237                        self.log(log_msg)
238                        #self.lliurexVersionLocal=self.lliurexVersionLocal["candidate"]
239
240                except Exception as e:
241                        log_msg="Get LliurexVersion from Local repository. Error: " + str(e)
242                        self.log(log_msg)
243                        self.lliurexVersionLocal=None
244
245                return self.lliurexVersionLocal
246
247        #def getLliurexVersionLocal(
248       
249        def getLliurexVersionNet(self):
250               
251                try:
252                        self.lliurexVersionNet=self.llxUpCore.getLliurexVersionLliurexNet()["candidate"]
253                        log_msg="Get LliurexVersion candidate from Lliurex Net: " + self.lliurexVersionNet
254                        self.log(log_msg)
255                       
256
257                except Exception as e:
258                        log_msg="Get LliurexVersion from Lliurex Net. Error: " + str(e)
259                        self.log(log_msg)
260                        self.lliurexVersionNet=None
261
262                return self.lliurexVersionNet   
263
264        #def getLliurexVersionNet
265       
266        def installInitialFlavour(self,flavourToInstall):
267
268                try:
269                        is_flavour_installed=self.llxUpCore.installInitialFlavour(flavourToInstall)
270                        return is_flavour_installed
271                        self.log(is_flavour_installed)
272
273                except Exception as e:
274                        print str(e)
275
276        #def installInitialFlavour
277
278        def getPackagesToUpdate(self):
279               
280                ref_flavour=["lliurex-meta-server","lliurex-meta-client", "lliurex-meta-desktop", "lliurex-meta-music", "lliurex-meta-pyme", "lliurex-meta-infantil"] 
281                self.incorrect_flavours=[]
282                try:
283                        packages_parse=[]
284                        packages=self.llxUpCore.getPackagesToUpdate()
285                        if len(packages)>0:
286                                for item in packages:
287                                        version=packages[item]
288                                        packages_parse.append(item+";"+version['candidate']+";"+'20Mb')
289                                        if item in ref_flavour:
290                                                self.incorrect_flavours.append(item)
291
292                        log_msg="Get packages to update. Number of packages: " + str(len(packages)) 
293                        self.log(log_msg)               
294                        return packages_parse
295
296                except Exception as e:
297                        log_msg="Get packages to update. Error: " + str(e)
298                        self.log(log_msg)
299                        return packages_parse
300
301        #def getPackagesToUpdate
302
303        def checkIncorrectFlavours(self):
304               
305                count=0
306
307                if len(self.incorrect_flavours)>0:
308
309                        for item in self.incorrect_flavours:
310                                if self.targetMetapackage != None:
311                                        print self.targetMetapackage
312                                        if item != self.targetMetapackage:
313                                                count=count+1
314                                else:
315                                        meta=item.split("-")[2]
316                                        if 'None' in self.previousFlavours:
317                                                if not meta in self.metapackageRef:
318                                                        count=count+1
319                                        else:           
320                                                if not meta in self.previousFlavours:
321                                                        count=count+1
322
323                if count>0:
324                        log_msg="Checking incorrect flavours. Others flavours detected: " + str(self.incorrect_flavours)
325                        self.log(log_msg)
326                        return True
327
328                else:
329                        log_msg="Checking incorrect flavours. Others flavours no detected"
330                        self.log(log_msg)
331                        return False
332       
333        #def checkIncorrectFlavours
334
335        def preActionsScript(self):
336
337                self.preActions=self.llxUpCore.preActionsScript()
338                self.preActions=self.preActions + ' ;touch ' + self.preactions_token + '\n'
339                log_msg="Exec Pre-Actions"
340                self.log(log_msg)
341                return self.preActions
342
343        #def preActionsScript   
344
345        def distUpgradeProcess(self):
346               
347                self.distupgrade=self.llxUpCore.distUpgradeProcess()   
348                self.distupgrade=self.distupgrade + ' ;touch ' + self.upgrade_token + '\n'
349                log_msg="Exec Dist-uggrade"
350                self.log(log_msg)
351                return self.distupgrade
352
353        #def distUpgradeProcess
354       
355        def checkErrorDistUpgrade(self):
356
357                cmd='dpkg -l | grep "^i[^i]" >' + self.errorupgrade_token
358                os.system(cmd)
359               
360                if os.path.exists(self.errorupgrade_token):
361                        aux = open(self.errorupgrade_token,'r')
362                        lines = aux.readlines()
363                        aux.close()
364                        if len(lines)>0:
365                                log_msg="Dist-upgrade process ending with errors"
366                                self.log(log_msg)
367                                return False
368                        else:
369                                log_msg="Dist-upgrade process ending OK"
370                                self.log(log_msg)
371                                return True
372                else:
373                        return True
374                #~ count=0
375                #~ if os.path.exists(self.errorupgrade_token):
376                        #~ aux = open(self.errorupgrade_token,'r')
377                        #~ lines = aux.readlines()
378                        #~ for x in lines:
379                                #~ if 'E: ' in x:
380                                        #~ count=count+1
381                        #~ aux.close()
382
383                #~ if count==0:
384                        #~ cmd='dpkg -l | grep "^i[^i]" >/tmp/errores.txt'
385                        #~ os.system(cmd)
386                       
387                        #~ log_msg="Dist-upgrade process ending OK"
388                        #~ self.log(log_msg)
389                        #~ return True
390               
391
392                #~ else:
393                        #~ log_msg="Dist-upgrade process ending with errors"
394                        #~ self.log(log_msg)
395                        #~ return False                 
396
397
398        #def checkErrorDistUpgrade
399       
400        def checkFinalFlavour(self):
401               
402                flavourToInstall=None
403               
404                try:
405                        self.targetMetapackage=self.llxUpCore.checkFlavour()
406                        log_msg="Final check metapackage. Metapackage to install: " + str(self.targetMetapackage)
407                        self.log(log_msg)
408                        if self.targetMetapackage==None:
409                                flavourToInstall=self.requiresInstallFlavour()
410                        else:
411                                flavourToInstall=self.targetMetapackage         
412
413                except Exception as e:
414                        log_msg="Final check metapackage. Error: " + str(e)
415                        self.log(log_msg)
416
417                return flavourToInstall
418
419       
420        #def checkFinalFlavour
421       
422        def installFinalFlavour(self,flavourToInstall):
423
424                self.command=self.llxUpCore.installFinalFlavour(flavourToInstall)
425                self.command=self.command + ' ;touch ' + self.installflavour_token + '\n'
426                log_msg="Install final flavour"
427                self.log(log_msg)
428                return self.command
429
430        #def installFinalFlavour
431
432        def postActionsScript(self):
433
434                self.postActions=self.llxUpCore.postActionsScript()
435                self.postActions=self.postActions + ' 2> >(tee ' + self.errorpostaction_token + ') ;touch ' + self.postactions_token + '\n'
436                log_msg="Exec Post-Actions"
437                self.log(log_msg)
438                return self.postActions
439
440        #def postActionsScript
441
442        def cleanEnvironment(self):
443               
444                try:
445                        self.llxUpCore.cleanEnvironment()
446                        log_msg="Clean environment: OK"
447                        self.log(log_msg)
448
449                except Exception as e:
450                        log_msg="Clean environment. Error :" + str(e)
451                        self.log(log_msg)                               
452
453        #def cleanEnvironment
454                       
455        def log(self,msg):
456               
457                log_file="/var/log/lliurex-up.log"
458                f=open(log_file,"a+")
459                f.write(msg + '\n')
460                f.close()
461
462        #def log                       
Note: See TracBrowser for help on using the repository browser.