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

Last change on this file since 3156 was 3156, checked in by jrpelegrina, 3 years ago

Add zomando

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