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

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

WIP in new gui. Add init Actions

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                try:
147                        os.system(command)
148                        log_msg="Exec Init-Actions"
149                        self.log(log_msg)
150                        return True
151
152                except Exception as e:
153                        log_msg="Exec Init-Actions.Error: " +str(e)
154                        self.log(log_msg)
155                        return False           
156
157        def isLliurexUpIsUpdated(self):
158
159                try:
160                        is_lliurexup_updated=self.llxUpCore.isLliurexUpIsUpdated()
161                        log_msg="Checking lliurex-up. Is lliurex-up updated: "+ str(is_lliurexup_updated)
162                        self.log(log_msg)
163                        return is_lliurexup_updated
164               
165                except Exception as e:
166                        log_msg="Checking lliurex-up. Error: " + str(e)
167                        self.log(log_msg)
168                        return True
169
170        #def isLliurexUpIsUpdated
171
172        def installLliurexUp(self):
173
174                try:
175                        is_lliurexup_installed=self.llxUpCore.installLliurexUp()
176                        log_msg="Installing lliurex-up: " + str(is_lliurexup_installed)
177                        self.log(log_msg)
178                        return is_lliurexup_installed
179
180                except Exception as e:
181                        log_msg="Installing lliurex-up. Error: " + str(e)
182                        self.log(log_msg)
183                        return True
184
185        #def installLliurexUp   
186
187       
188        def lliurexMirrorIsUpdated(self):
189
190                try:
191                        is_mirror_updated=self.llxUpCore.lliurexMirrorIsUpdated()
192
193                        if is_mirror_updated !=None:
194                       
195                                if is_mirror_updated['action']=='update':
196                                        log_msg="Checking mirror. Is mirror update: False"
197                                        self.log(log_msg)
198                                        return False
199                                else: 
200                                        log_msg="Checking mirror. Is mirror update: " + is_mirror_updated['action']
201                                        self.log(log_msg)
202                                        return True
203                        else:
204                                log_msg="Checking mirror. Is mirror update: None"
205                                self.log(log_msg)
206                                return True
207               
208               
209                except Exception as e:
210                        log_msg="Checking mirror. Error: " + str(e)
211                        self.log(log_msg)
212                        return True     
213
214        #def lliurexMirrorIsUpdated             
215
216        def lliurexMirrorIsRunning(self):
217
218                try:
219                        is_lliurexmirror_running=self.llxUpCore.lliurexMirrorIsRunning()
220                        return is_lliurexmirror_running
221
222                except Exception as e:
223                        log_msg="Updating mirror. Error: " + str(e)
224                        self.log(log_msg)
225                        return False
226
227        #def lliurexMirrorIsRunning             
228
229        def getPercentageLliurexMirror(self):
230
231                try:
232                        percentage_mirror=self.llxUpCore.getPercentageLliurexMirror()
233                        if percentage_mirror != None:
234                                return percentage_mirror
235                        else:
236                                return 0       
237               
238                except Exception as e:
239                        return 0       
240
241
242        #def getPercentageLliurexMirror
243
244        def getLliurexVersionLocal(self):
245               
246                try:
247                       
248                        self.lliurexVersionLocal=self.llxUpCore.getLliurexVersionLocal()
249                        log_msg="Get LliurexVersion installed: " + self.lliurexVersionLocal["installed"]
250                        self.log(log_msg)
251                        log_msg="Get LliurexVersion candidate from Local repository: " + self.lliurexVersionLocal["candidate"]
252                        self.log(log_msg)
253                        #self.lliurexVersionLocal=self.lliurexVersionLocal["candidate"]
254
255                except Exception as e:
256                        log_msg="Get LliurexVersion from Local repository. Error: " + str(e)
257                        self.log(log_msg)
258                        self.lliurexVersionLocal=None
259
260                return self.lliurexVersionLocal
261
262        #def getLliurexVersionLocal(
263       
264        def getLliurexVersionNet(self):
265               
266                try:
267                        self.lliurexVersionNet=self.llxUpCore.getLliurexVersionLliurexNet()["candidate"]
268                        log_msg="Get LliurexVersion candidate from Lliurex Net: " + self.lliurexVersionNet
269                        self.log(log_msg)
270                       
271
272                except Exception as e:
273                        log_msg="Get LliurexVersion from Lliurex Net. Error: " + str(e)
274                        self.log(log_msg)
275                        self.lliurexVersionNet=None
276
277                return self.lliurexVersionNet   
278
279        #def getLliurexVersionNet
280       
281        def installInitialFlavour(self,flavourToInstall):
282
283                try:
284                        is_flavour_installed=self.llxUpCore.installInitialFlavour(flavourToInstall)
285                        return is_flavour_installed
286                        self.log(is_flavour_installed)
287
288                except Exception as e:
289                        print str(e)
290
291        #def installInitialFlavour
292
293        def getPackagesToUpdate(self):
294               
295                ref_flavour=["lliurex-meta-server","lliurex-meta-client", "lliurex-meta-desktop", "lliurex-meta-music", "lliurex-meta-pyme", "lliurex-meta-infantil"] 
296                packages_parse=[]
297                self.incorrect_flavours=[]
298               
299                try:
300                        packages=self.llxUpCore.getPackagesToUpdate()
301                        if len(packages)>0:
302                                for item in packages:
303                                        version=packages[item]
304                                        packages_parse.append(item+";"+version['candidate']+";"+'20Mb')
305                                        if item in ref_flavour:
306                                                self.incorrect_flavours.append(item)
307
308                        log_msg="Get packages to update. Number of packages: " + str(len(packages)) 
309                        self.log(log_msg)               
310
311                except Exception as e:
312                        log_msg="Get packages to update. Error: " + str(e)
313                        self.log(log_msg)
314
315                return packages_parse
316                       
317        #def getPackagesToUpdate
318
319        def checkIncorrectFlavours(self):
320               
321                count=0
322
323                if len(self.incorrect_flavours)>0:
324
325                        for item in self.incorrect_flavours:
326                                if self.targetMetapackage != None:
327                                        print self.targetMetapackage
328                                        if item != self.targetMetapackage:
329                                                count=count+1
330                                else:
331                                        meta=item.split("-")[2]
332                                        if 'None' in self.previousFlavours:
333                                                if not meta in self.metapackageRef:
334                                                        count=count+1
335                                        else:           
336                                                if not meta in self.previousFlavours:
337                                                        count=count+1
338
339                if count>0:
340                        log_msg="Checking incorrect flavours. Others flavours detected: " + str(self.incorrect_flavours)
341                        self.log(log_msg)
342                        return True
343
344                else:
345                        log_msg="Checking incorrect flavours. Others flavours no detected"
346                        self.log(log_msg)
347                        return False
348       
349        #def checkIncorrectFlavours
350
351        def preActionsScript(self):
352
353                self.preActions=self.llxUpCore.preActionsScript()
354                self.preActions=self.preActions + ' ;touch ' + self.preactions_token + '\n'
355                log_msg="Exec Pre-Actions"
356                self.log(log_msg)
357                return self.preActions
358
359        #def preActionsScript   
360
361        def distUpgradeProcess(self):
362               
363                self.distupgrade=self.llxUpCore.distUpgradeProcess()   
364                self.distupgrade=self.distupgrade + ' ;touch ' + self.upgrade_token + '\n'
365                log_msg="Exec Dist-uggrade"
366                self.log(log_msg)
367                return self.distupgrade
368
369        #def distUpgradeProcess
370       
371        def checkErrorDistUpgrade(self):
372
373                count=0
374                error=False
375
376                if os.path.exists(self.errorpostaction_token):
377                        aux = open(self.errorpostaction_token,'r')
378                        lines = aux.readlines()
379                        for x in lines:
380                                if 'E: ' in x:
381                                        count=count+1
382                        aux.close()
383
384                if count==0:
385                        cmd='dpkg -l | grep "^i[^i]" >' + self.errorupgrade_token
386                        os.system(cmd)
387               
388                        if os.path.exists(self.errorupgrade_token):
389                                aux = open(self.errorupgrade_token,'r')
390                                lines = aux.readlines()
391                                aux.close()
392                       
393                                if len(lines)>0:
394                                        error=True
395                                        #log_msg="Dist-upgrade process ending with errors"
396                                        #self.log(log_msg)
397                                else:
398                                        j=0
399                                        cmd='apt-get dist-upgrade -sV >' + self.finalupgrade_token
400                                        os.system(cmd)
401                                        if os.path.exists(self.finalupgrade_token):
402                                                aux = open(self.finalupgrade_token,'r')
403                                                lines = aux.readlines()
404                                                aux.close()
405
406                                                for x in lines:
407                                                        if 'Inst' in x:
408                                                                j=j+1
409
410                                                if j>0:
411                                                        error=True             
412                else:
413                        error=True
414
415                if error:
416                        log_msg="Dist-upgrade process ending with errors"
417                        self.log(log_msg)
418                else:                   
419                        log_msg="Dist-upgrade process ending OK"
420                        self.log(log_msg)
421       
422                return error
423               
424
425        #def checkErrorDistUpgrade
426       
427        def checkFinalFlavour(self):
428               
429                flavourToInstall=None
430               
431                try:
432                        self.targetMetapackage=self.llxUpCore.checkFlavour()
433                        log_msg="Final check metapackage. Metapackage to install: " + str(self.targetMetapackage)
434                        self.log(log_msg)
435                        if self.targetMetapackage==None:
436                                flavourToInstall=self.requiresInstallFlavour()
437                        else:
438                                flavourToInstall=self.targetMetapackage         
439
440                except Exception as e:
441                        log_msg="Final check metapackage. Error: " + str(e)
442                        self.log(log_msg)
443
444                return flavourToInstall
445
446       
447        #def checkFinalFlavour
448       
449        def installFinalFlavour(self,flavourToInstall):
450
451                self.command=self.llxUpCore.installFinalFlavour(flavourToInstall)
452                self.command=self.command + ' ;touch ' + self.installflavour_token + '\n'
453                log_msg="Install final flavour"
454                self.log(log_msg)
455                return self.command
456
457        #def installFinalFlavour
458
459        def postActionsScript(self):
460
461                self.postActions=self.llxUpCore.postActionsScript()
462                self.postActions=self.postActions + ' 2> >(tee ' + self.errorpostaction_token + ') ;touch ' + self.postactions_token + '\n'
463                log_msg="Exec Post-Actions"
464                self.log(log_msg)
465                return self.postActions
466
467        #def postActionsScript
468
469        def cleanEnvironment(self):
470               
471                try:
472                        self.llxUpCore.cleanEnvironment()
473                        log_msg="Clean environment: OK"
474                        self.log(log_msg)
475
476                except Exception as e:
477                        log_msg="Clean environment. Error :" + str(e)
478                        self.log(log_msg)                               
479
480        #def cleanEnvironment
481                       
482        def log(self,msg):
483               
484                log_file="/var/log/lliurex-up.log"
485                f=open(log_file,"a+")
486                f.write(msg + '\n')
487                f.close()
488
489        #def log                       
Note: See TracBrowser for help on using the repository browser.