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

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

Add checking of n4d service

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