source: lliurex-up/trunk/fuentes/lliurex-up/usr/share/lliurex-up/LliurexUpConnect.py @ 3607

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

WIP in show changelog of packages

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